一、 Connection con = DriverManager.getConnection();

JDBC入门方案,实现步骤如下:

  1. 导入驱动jar包:mysql-connector-java-5.1.37-bin.jar;
  2. 注册驱动:java.sql.DriverManager.registerDriver(new Driver());
  • 在com.mysql.jdbc.Driver类中存在如下静态代码块
  • 因此开发中获取字节码文件对象即可:Class.forName("com.mysql.jdbc.Driver");
  • MySQL5之后利用驱动文件自动注册驱动,可省略注册驱动的步骤
static {
	try {
  	 java.sql.DriverManager.registerDriver(new Driver());
  	 } catch (SQLException E) {
  	 throw new RuntimeException("Can't register driver!");
  	 }
}
  1. 获取数据库连接对象:
  • Connection connection = DriverManager.getConnection(String url, String username, String password);
  • @param url 指定连接路径,具体内容为:jdbc:mysql://ip地址(域名):端口号/数据库名称
    ** 如果连接的是本机mysql服务器,且mysql服务默认端口是3306,则url可以简写为:jdbc:mysql:///数据库名称
  • @param username 数据库用户名
  • @param password 数据库用户密码
    可参考 :
  1. 获取 preparedStatement 对象:
  • PreparedStatement preparedStatement = connection.prepareStatement(String sql)
  • PreparedStatement 可解决SQL注入问题,效率更高,创建对象前需先定义SQL语句作为实参传入
  1. 操作数据库

二、Connection con = dataSource.getConnection();

利用数据库连接池对象获取,常用的数据库连接池为C3P0、Druid

C3P0使用步骤:
  1. 导入jar包 :
  • c3p0-0.9.5.2.jar
  • mchange-commons-java-0.2.12.jar
  • mysql-connector-java-5.1.37-bin.jar
  1. 定义配置文件并将文件移动到src目录下,C3P0可完成配置文件的自动加载
  2. 创建数据库连接池对象:
    DataSource dataSource = new ComboPooledDataSource();
  3. 获取Connection对象:
    Connection connection = dataSource.getConnection();
Druid使用步骤:
  1. 导入jar包 :
  • druid-1.0.9.jar
  • mysql-connector-java-5.1.37-bin.jar
  1. 定义配置文件,手动导入配置文件:

InputStream is = new InputStream(类名.class.getClassLoader().getResourceAsStream(filename));Properties properties = new Properties();properties.load(is); 类名 表示当前正在编辑的类,开发中会创建JDBCUtil工具类,该类名即为JDBCUtil
@param filename 配置文件名称

  1. 创建数据库连接池对象:
    DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
  2. 获取Connection对象:
    Connection connection = dataSource.getConnection();

三、Connection connection = JDBCUtil.getConnection();

开发中会创建工具类来获取 DataSource 和 Connection,将加载配置文件等步骤进行封装

C3P0工具类

转自:

/**
 * 创建数据库连接池
 */
public class JDBCUtils {
 // 创建一个ThreadLoacl对象,用当前线程作为key
 private static ThreadLocal<Connection> tc = new ThreadLocal<Connection>();
 // 读取的是C3P0-config默认配置创建数据库连接池对象
 private static DataSource ds = new ComboPooledDataSource();
 
 // 获取数据库连接池对象
 public static DataSource getDataSource() {
  return ds;
 }
 
 // 从连接池中获取连接
 public static Connection getConnection() throws SQLException {
  Connection conn = tc.get();
  if (conn == null) {
   conn = ds.getConnection();
   // 将conn存放到集合tc中
   tc.set(conn);//首次创建连接
  }
  return conn;
 }
 
 // 开启事务
 public static void startTransaction() {
  try {
   // 获取连接
   Connection conn = this.getConnection();
   // 开启事务
   /*
    * setAutoCommit总的来说就是保持数据的完整性,一个系统的更新操作可能要涉及多张表,需多个SQL语句进行操作
    * 循环里连续的进行插入操作,如果你在开始时设置了:conn.setAutoCommit(false);
    * 最后才进行conn.commit(),这样你即使插入的时候报错,修改的内容也不会提交到数据库,
    */
   conn.setAutoCommit(false);
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
 
 public static void commit() {
  try {
   Connection conn = tc.get();
   if (conn != null) {
    conn.commit();
   }
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
 
 public static void rollback() {
  try {
   // 从集合tc中得到一个连接
   Connection conn = tc.get();
   if (conn != null) {
    // 该方法用于取消在当前事务中进行的更改,并释放当前Connection对象持有的所有数据库锁。此方法只有在手动事务模式下才可用
    conn.rollback();
   }
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } 
 } 
}
Druid工具类

需要利用静态代码块对此工具类进行初始化,完成加载配置信息和创建DataSurce的步骤

static {
    try {
        //1.加载配置文件
        InputStream is = JDBCUtil.class.getClassLoader().getResourceAsStream("druid.properties");
        Properties properties = new Properties();
        properties.load(is);
        //2.创建连接池对象
        ds = DruidDataSourceFactory.createDataSource(properties);
    } catch (IOException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    }
}