在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语句对象及结果集。