Java JDBC连接数据库常见操作总结

 更新时间:2019年03月08日 10:20:07   作者:时间在这里停顿  
这篇文章主要介绍了Java JDBC连接数据库常见操作,结合实例形式总结分析了java基于jdbc连接mysql、Oracle数据库及连接池相关操作技巧,需要的朋友可以参考下

本文实例总结了Java JDBC连接数据库常见操作。分享给大家供大家参考,具体如下:

db.properties配置文件(MySql数据库)

# db.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=123456
# paramter for BasicDataSource
initSize=2
maxActive=2

db.properties配置文件(Oracle数据库)

# db.properties
jdbc.driver=oracle.jdbc.OracleDriver
jdbc.url=jdbc:oracle:thin:localhost:1521:orcl
jdbc.username=root
jdbc.password=123456
# paramter for BasicDataSource
initSize=2
maxActive=2

JDBC直接连接数据库

package JDBC;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
/**
 * JDBC连接数据库管理工具类
 */
public class JDBC {
  static String driver;
  static String url;
  static String username;
  static String password;
  static {
    try {
      Properties cfg = new Properties();
      InputStream in = JDBC.class.getClassLoader().getResourceAsStream("db.properties");
      cfg.load(in);  //将文件内容加载到Properties对象中(以散列表形式存在)
      driver = cfg.getProperty("jdbc.driver");
      url = cfg.getProperty("jdbc.url");
      username = cfg.getProperty("jdbc.username");
      password = cfg.getProperty("jdbc.password");
      in.close();
    } catch (IOException e) {
      e.printStackTrace();
      throw new RuntimeException(e);
    }
  }
  /**
   * 创建数据库连接
   */
  public static Connection getConnection() {
    try {
      Class.forName(driver); //注册驱动
      Connection conn = DriverManager.getConnection(url, username, password);
      return conn;
    } catch (Exception e) {
      e.printStackTrace();
      throw new RuntimeException(e);
    }
  }
  /*
   * 关闭数据库的连接
   */
  public static void close(Connection conn) {
    if (conn != null) {
      try {
        conn.close();
      } catch (SQLException e) {
        e.printStackTrace();
      }
    }
  }
}

通过连接池连接数据库

package JDBC;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
import org.apache.commons.dbcp.BasicDataSource;
/**
 * 连接池版本的数据库连接管理工具类
 */
public class DBUtils {
  private static String driver;
  private static String url;
  private static String username;
  private static String password;
  private static int initSize;
  private static int maxActive;
  private static BasicDataSource dbs;
  static {
    dbs = new BasicDataSource();
    Properties cfg = new Properties();
    try {
      InputStream in = DBUtils.class.getClassLoader().getResourceAsStream("db.properties");
      cfg.load(in);
      // 初始化参数
      driver = cfg.getProperty("jdbc.driver");
      url = cfg.getProperty("jdbc.url");
      username = cfg.getProperty("jdbc.username");
      password = cfg.getProperty("jdbc.password");
      initSize = Integer.parseInt(cfg.getProperty("initSize"));
      maxActive = Integer.parseInt(cfg.getProperty("maxActive"));
      in.close();
      // 初始化连接池
      dbs.setDriverClassName(driver);
      dbs.setUrl(url);
      dbs.setUsername(username);
      dbs.setPassword(password);
      dbs.setInitialSize(initSize);
      dbs.setMaxActive(maxActive);
    } catch (IOException e) {
      e.printStackTrace();
      throw new RuntimeException(e);
    }
  }
  /**
   * 创建数据库连接,从连接池中获取连接,如果连接池满了,则等待.
   */
  public static Connection getConnection() {
    try {
      Connection conn = dbs.getConnection();
      return conn;
    } catch (SQLException e) {
      e.printStackTrace();
      throw new RuntimeException(e);
    }
  }
  /*
   * 关闭数据库的连接,归还到连接池
   */
  public static void close(Connection conn) {
    if (conn != null) {
      try {
        conn.close();
      } catch (SQLException e) {
        e.printStackTrace();
      }
    }
  }
  //回滚,仅在禁用自动提交时使用
  public static void rollback(Connection conn) {
    if (conn != null) {
      try {
        conn.rollback();
      } catch (SQLException e) {
        e.printStackTrace();
      }
    }
  }
}

连接数据库后的使用

Connection conn=null;
try{
  conn=DbUtils.getConnection();
  Statement st=conn.createStatement();
  String sql="select id, name from people";
  ResultSet rs=st.executeQuery(sql);
  while(rs.next()){
    int id=rs.getInt("id");
    String name=rs.getString("name");
    System.out.println(id+","+name);
  }
  //结果集元数据
  ResultSetMetaData meta = rs.getMetaData();
  int n = meta.getColumnCount(); //多少列
  for(int i=1; i<=n; i++){
    String name= meta.getColumnName(i); //获取列名
    System.out.println(name);
  }
  rs.close();//释放查询结果
  st.close();//释放语句对象
}catch(Exception e){
  e.printStackTrace();
}finally {
  DbUtils.close(conn);
}

预编译SQL执行 及 取消自动提交

try {
  conn = DBUtils.getConnection();
  conn.setAutoCommit(false);  //取消自动提交, 后续手动提交
  String sql="update people set name=? where id=? ";
  PreparedStatement ps= conn.prepareStatement(sql);
  //按照顺序发送参数
  ps.setString(1, "Lao Wang");
  ps.setInt(2, 100);
  //执行"执行计划"
  int n=ps.executeUpdate();
  conn.commit();  //手动提交
} catch (Exception e) {
  e.printStackTrace();
  DBUtils.rollback(conn); //异常回滚
}finally{
  DBUtils.close(conn);
}

Statement的addBatch(sql)executeBatch()方法可以批量执行sql。

Statement st=conn.createStatement();
st.addBatch(sql1); //sql1 添加到Statement的缓存中
st.addBatch(sql2);
st.addBatch(sql3);
int[] ary=st.executeBatch();  //执行一批SQL

PreparedStatement也支持批量参数的处理

PreparedStatement ps = conn.prepareStatement(sql);
ps.setInt(1, 1);
ps.setString(2, "wang");
ps.addBatch();   //将参数添加到ps缓存区
ps.setInt(1, 2);
ps.setString(2, "li");
ps.addBatch();   //将参数添加到ps缓存区
int[] ary = ps.executeBatch(); // 批量执行

PreparedStatement ps = conn.prepareStatement(sql);

还可以传入第二个参数用以获取自增主键或者序号自增的列

更多关于java相关内容感兴趣的读者可查看本站专题:《Java使用JDBC操作数据库技巧总结》、《Java+MySQL数据库程序设计总结》、《Java数据结构与算法教程》、《Java文件与目录操作技巧汇总》、《Java操作DOM节点技巧总结》和《Java缓存操作技巧汇总

希望本文所述对大家java程序设计有所帮助。

相关文章

  • 详细介绍idea如何设置类头注释和方法注释(图文)

    详细介绍idea如何设置类头注释和方法注释(图文)

    本篇文章主要介绍了idea如何设置类头注释和方法注释(图文),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • 浅谈java二进制、十进制、十六进制、字符串之间的相互转换

    浅谈java二进制、十进制、十六进制、字符串之间的相互转换

    下面小编就为大家带来一篇浅谈二进制、十进制、十六进制、字符串之间的相互转换。小编觉得挺不错的,现在就分享给大家,也给大家做个参考,一起跟随小编过来看看吧
    2016-06-06
  • IDEA 每次新建工程都要重新配置 Maven的解决方案

    IDEA 每次新建工程都要重新配置 Maven的解决方案

    这篇文章主要介绍了IDEA 每次新建工程都要重新配置Maven解决方案,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • Java流形式返回前端的实现示例

    Java流形式返回前端的实现示例

    ​ Java后端开发项目时,需要给前端传一些数据,本文主要介绍了Java流形式返回前端的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • Spring Bean 依赖注入常见错误问题

    Spring Bean 依赖注入常见错误问题

    这篇文章主要介绍了Spring Bean 依赖注入常见错误问题,文中提到value的工作大体分为三个核心步骤,具体内容详情跟随小编一起看看吧
    2021-09-09
  • Java中字符串常见的一些拼接方式总结

    Java中字符串常见的一些拼接方式总结

    字符串拼接是我们在Java代码中比较经常要做的事情,就是把多个字符串拼接到一起,下面这篇文章主要给大家总结介绍了关于Java中字符串常见的一些拼接方式,需要的朋友可以参考下
    2023-04-04
  • mybatis主表与明细表一对多的同时插入操作方法

    mybatis主表与明细表一对多的同时插入操作方法

    对主表(采购申请表)和明细表(申请物资表)同时进行插入操作insert,怎么实现呢,下面给大家分享mybatis主表与明细表一对多的同时插入操作方法,感兴趣的朋友一起看看吧
    2023-02-02
  • springmvc九大组件之HandlerAdapter详解

    springmvc九大组件之HandlerAdapter详解

    这篇文章主要介绍了springmvc九大组件之HandlerAdapter详解,RequestMappingHandlerAdapter支持的handler的类型是HandlerMethod,而HandlerMethod是通过解析@RequestMapping注解获得的,需要的朋友可以参考下
    2023-11-11
  • java Array和Arrays的区别总结

    java Array和Arrays的区别总结

    在本篇内容里小编给大家整理的是一篇关于java Array和Arrays的区别总结内容,有需要的朋友们可以学习下。
    2021-03-03
  • Spring中的三级缓存与循环依赖详解

    Spring中的三级缓存与循环依赖详解

    Spring三级缓存是Spring框架中用于解决循环依赖问题的一种机制,这篇文章主要介绍了Spring三级缓存与循环依赖的相关知识,本文给大家介绍的非常详细,需要的朋友可以参考下
    2024-05-05

最新评论