Java 数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。它JDBC是面向关系型数据库的。

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语句的执行过程中发生了例外情况(即错误)。
使用Statement:
	static void test() throws SQLException, ClassNotFoundException {
		Class.forName("com.mysql.jdbc.Driver");

		Connection conn = DriverManager.getConnection(
				"jdbc:mysql://prelive.baobaoj.com:3306/bbjdb", "bbjoperator",
				"QQKCZDPFzoiTqBYp");
		Statement st = conn.createStatement();
		ResultSet rs = st
				.executeQuery("SELECT * FROM `BBJ_PHOTO` t  where t.id= 6146");

		while (rs.next()) {
			System.out.println(rs.getObject(1) + "\t" + rs.getObject(2) + "\t"
					+ rs.getObject(3) + "\t" + rs.getObject(4) + "\t"
					+ rs.getObject(5));
		}
		rs.close();
		st.close();
		conn.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()时的错误
 }
一个数据库事务代码如下:
boolean autoCommitDefault = conn.getAutoCommit();
try {
    conn.setAutoCommit(false);
 
    /* 在此基于有事务控制的conn执行你的代码 */
 
    conn.commit();
} catch (Throwable e) {
    try { conn.rollback(); } catch (Throwable ignore) {}
    throw e;
} finally {
    try { conn.setAutoCommit(autoCommitDefault); } catch (Throwable ignore) {}
}
一个工具类

public class DBUtil {
       


       
        public static String db_driver = "oracle.jdbc.driver.OracleDriver" ;
        public static String db_url = "jdbc:oracle:thin:@sz-vision:1521:visiondb" ;
        public static String db_user = "COMMUNITY";
        public static String db_password = "Tbv1B2LvB" ;
       




        public static Connection getConnection() {
              Connection conn = null;
               try {
                     Class.forName(db_driver);
                     conn = DriverManager.getConnection(db_url, db_user, db_password);
              } catch (ClassNotFoundException e) {
                     e.printStackTrace();
              } catch (SQLException e) {
                     e.printStackTrace();
              }
              
               return conn;
       }
       
}