JDBC API主要位于JDK中的java.sql包中(之后扩展的内容位于javax.sql包中),主要包括(斜体代表接口,需驱动程序提供者来具体实现):

  • DriverManager:负责加载各种不同驱动程序(Driver),并根据不同的请求,向调用者返回相应的数据库连接(Connection)。
  • Driver:驱动程序,会将自身加载到DriverManager中去,并处理相应的请求并返回相应的数据库连接(Connection)。
  • Connection:数据库连接,负责与进行数据库间通讯,SQL执行以及事务处理都是在某个特定Connection环境中进行的。可以产生用以执行SQL的Statement。
  • Statement:用以执行SQL查询和更新(针对静态SQL语句和单次执行)。
  • PreparedStatement:用以执行包含动态参数的SQL查询和更新(在服务器端编译,允许重复执行以提高效率)。
  • CallableStatement:用以调用数据库中的存储过程
  • SQLException:代表在数据库连接的建立和关闭和SQL语句的执行过程中发生了例外情况(即错误)。

利用Class.forName()方法来加载JDBC驱动程序(Driver)至DriverManager:

Class.forName( "com.somejdbcvendor.TheirJdbcDriver" );

然后,从DriverManager中,通过JDBC URL,用户名,密码来获取相应的数据库连接(Connection):

Connection conn = DriverManager.getConnection(
"jdbc:somejdbcvendor:other data needed by some jdbc vendor", // URL
"myLogin", // 用户名
"myPassword" ); // 密码

不同的JDBC驱动程序的URL是不同的,它永远以“jdbc:”开始,但后面的内容依照驱动程序类型不同而各异。在获取Connection之后,便可以建立Statement用以执行SQL语句。下面是一个插入(INSERT)的例子:

 Statement stmt = conn.createStatement();
stmt.executeUpdate( "INSERT INTO MyTable( name ) VALUES ( 'my name' ) " );

查询(SELECT)的结果存放于结果集(ResultSet)中,可以按照顺序依次访问:

 Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery( "SELECT * FROM MyTable" );
while ( rs.next() ) {
int numColumns = rs.getMetaData().getColumnCount();
for ( int i = 1 ; i <= numColumns ; i++ ) {
// 与大部分Java API中下标的使用方法不同,字段的下标从1开始
// 当然,还有其他很多的方式(ResultSet.getXXX())获取数据
System.out.println( "COLUMN " + i + " = " + rs.getObject(i) );
}
}
rs.close();
stmt.close();

但是,通常,Java程序员们更倾向于使用PreparedStatement。下面的例子使用上例中的conn对象:

 PreparedStatement ps = null;
ResultSet rs = null;
try {
ps = conn.prepareStatement( "SELECT i.*, j.* FROM Omega i, Zappa j
WHERE i = ? AND j = ?" );
// 使用问号作为参数的标示
// 进行参数设置
// 与大部分Java API中下标的使用方法不同,字段的下标从1开始,1代表第一个问号
// 当然,还有其他很多针对不同类型的类似的PreparedStatement.setXXX()方法
ps.setString(1, "Poor Yorick");
ps.setInt(2, 8008);
// 结果集
rs = ps.executeQuery();
while ( rs.next() ) {
int numColumns = rs.getMetaData().getColumnCount();
for ( int i = 1 ; i <= numColumns ; i++ ) {
// 与大部分Java API中下标的使用方法不同,字段的下标从1开始
// 当然,还有其他很多的方式(ResultSet.getXXX())获取数据
System.out.println( "COLUMN " + i + " = " + rs.getObject(i) );
}
}
catch (SQLException e) {
// 异常处理
}
finally { // 使用finally进行资源释放
try {
rs.close();
ps.close();
} catch( SQLException e){} // 异常处理:忽略close()时的错误
}
以上内容转自:http://zh.wikipedia.org/w/index.php?title=JDBC&variant=zh-hans

本BLOG用于个人学习总结!
目的在于记录个人成长.
所有文字均属于个人理解.
如有错误,望多指教!不胜感激!