在Inside JDBC(一)中,给大家介绍了DriverManager类与Driver接口的含义及用法,从本文开始,我们来看看JDBC的具体用法。 要操作数据库,首先的建立数据库连接(Connection),数据库连接的具体功能定义在java.sql.Connection接口中。我们先来看看如何建立连接。 通过对Driver接口的学习,知道了其connect方法是用于建立数据库连接的,完整代码如下:
package com.wwei.jdbc; import java.sql.Connection; import java.sql.Driver; import java.util.Properties; public class Conn_1 { public static void main(String[] args) throws Exception{ Driver driver = new com.mysql.jdbc.Driver(); String url = "jdbc:mysql://localhost/test"; Properties info = new Properties();//连接信息 info.put("user", "root"); info.put("password", "wwei"); Connection con = driver.connect(url, info);//建立连接,成功返回连接实例,否则返回null。 if(con != null){ System.out.println("建立连接"); } if(con != null && !con.isClosed()){ con.close(); System.out.println("连接已断开"); } } }Connection实例使用完毕,切记关闭。如果在有连接池的情况要返回连接池。在这段代码中,我们采用了直接实例化驱动类com.mysql.jdbc.Driver,这种方式不可取,因为迫使应用代码高度依赖MySQL 的Connector/J实现,如果变更了数据库代码需要重构。 在这里之所以这样写,是希望大家更深入的理解JDBC,在实际开发中应该是下面一段代码的写法:
package com.wwei.jdbc; import java.sql.Connection; import java.sql.DriverManager; public class Conn_2 { public static void main(String[] args) throws Exception { // 连接信息可以从外部得到,比如配置文件。 String url = "jdbc:mysql://localhost:3306/test"; String driverClass = "com.mysql.jdbc.Driver"; String user = "root"; String password = "wwei"; Class.forName(driverClass); Connection con = DriverManager.getConnection(url, user, password); if (con != null) { System.out.println("建立连接"); } if (con != null && !con.isClosed()) { con.close(); System.out.println("连接已断开"); } } }
这一次,JDBC代码就没有耦合具体的JDBC驱动实现了,如果出现数据库的变更,我们只需要修改相应的连接信息了和驱动实现的jar库文件,这些链接信息都可以从JDBC驱动实现的文档中获得,不需要死记。当为了提高熟练度,最好还是记住常见数据库的连接信息。大家可以Google一下。 在Connection接口中,常用方法有SQL语句对象(Statement,PreparedStatement,CallableStatement)的工厂方法:Statement createStatement()系列、PreparedStatement prepareStatement(String sql)系列、CallableStatement prepareCall(String sql)系列,分别用于创建普通、预编译、存储过程SQL语句对象;事务处理方法: boolean getAutoCommit()、 void setAutoCommit(boolean autoCommit)、
void setTransactionIsolation(int level)、Savepoint setSavepoint(String name)、 void commit()、 void rollback()、void rollback(Savepoint savepoint)。 默认情况下,Connection 对象处于自动提交模式下,这意味着它在执行每个语句后都会自动提交更改。 如果禁用自动提交模式(setAutoCommit(false)),为了提交更改,必须显式调用 commit 方法; 否则无法保存数据库更改。 上述方法的使用举例待介绍SQL语句对象和结果集(ResultSet)之后在编写,先来了解一下java.sql.DatabaseMetaData接口,这个接口定义了整体数据库的综合信息,有驱动提供商实现。虽然很少用到但如果想从驱动实现中了解数据支持的功能,就需要了解了。代码:
package com.wwei.jdbc; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; public class DBMetaData { public static void main(String[] args) throws Exception{ DatabaseMetaData meta = null; String url = "jdbc:mysql://localhost:3306/test"; String driverClass = "com.mysql.jdbc.Driver"; String user = "root"; String password = "wwei"; Class.forName(driverClass); Connection con = DriverManager.getConnection(url, user, password); if (con != null) { meta = con.getMetaData(); System.out.println("数据库产品名称:" + meta.getDatabaseProductName() ); System.out.println("数据库产品版本:" + meta.getDatabaseProductVersion() ); System.out.println("数据库主版本:" + meta.getDatabaseMajorVersion()); System.out.println("数据库次版本:" + meta.getDatabaseMinorVersion()); System.out.println("驱动名称:" + meta.getDriverName() ); System.out.println("驱动版本:" + meta.getDriverVersion()); System.out.println("驱动实现JDBC规范主版本:" + meta.getJDBCMajorVersion()); System.out.println("驱动实现JDBC规范次版本:" + meta.getJDBCMinorVersion()); System.out.println("当前数据库允许列最大字符数:" + meta.getMaxColumnNameLength()); System.out.println("当前数据库支持最大并发连接数:" + meta.getMaxConnections()); System.out.println("数据库中在同一时间内可处于开放状态的最大活动语句数:" + meta.getMaxStatements()); } if (con != null && !con.isClosed()) { con.close(); } } }DatabaseMetaDate中有更多的信息,可以进一步查阅JDK 文档学习。下一篇将介绍所有SQL语句对象及结果集。