标签归档:jdbc

JDBC 参考

JDBC

下载JDBC驱动包(https://dev.mysql.com/downloads/connector/j/):
1 如果是一般Java项目,通过IDE添加包到项目
2 如果是Java Web项目,把包添加到WebContent/WEB-INF/lib中

在使用前,需要导入包(java.sql.*):

import java.sql.*;

<%@ page import="java.sql" %>

建立链接步骤:

import java.sql.*;

public class DB {

	public static void main(String[] args) {
                Connection conn = null;
                Statement stmt = null;
		try {
                        //Class.forName("oracle.jdbc.driver.OracleDriver");
			Class.forName("com.mysql.jdbc.Driver");
			String url = "jdbc:mysql://localhost:3306/test?useSSL=false&autoReconnect=true";
			String username = "root";
			String password = "root";
			
			conn = DriverManager.getConnection(url, username, password);
			if (conn != null) {
				System.out.println("数据库链接成功");
				stmt = conn.createStatement();
				ResultSet rs = stmt.executeQuery("SELECT * FROM tst");
				while (rs.next()) {
					System.out.println(rs.getInt("id"));
				}
				
				rs.close();
				stmt.close();
				conn.close();
			} else {
				System.out.println("数据库链接失败");
			}
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
	           try {
	    	       if (stmt != null) {
	                   stmt.close();
	    	       }
	           } catch (SQLException se2){
	           }
	
	           try {
	               if (conn!=null) {
	    	           conn.close();
	               }
	           } catch (SQLException se){
	               se.printStackTrace();
	           }
               }
	}

}

构建JDBC应用程序涉及以下六个步骤
导入包:需要包含包含数据库编程所需的JDBC类的包。 大多数情况下,使用import java.sql.*就足够了。
注册JDBC驱动程序:需要初始化驱动程序,以便可以打开与数据库的通信通道。
打开一个连接:需要使用DriverManager.getConnection()方法创建一个Connection对象,它表示与数据库的物理连接。
执行查询:需要使用类型为Statement的对象来构建和提交SQL语句到数据库。
从结果集中提取数据:需要使用相应的ResultSet.getXXX()方法从结果集中检索数据。
清理环境:需要明确地关闭所有数据库资源,而不依赖于JVM的垃圾收集。
注意:url后添加了useSSL=false参数,这个是因为高版本MySQL默认启用SSL进行链接,这里是明确不使用SSL。autoReconnect=true在丢失链接或链接未正确关闭时,可以重新建立链接。finally块用来保证资源正确关闭。

JDBC API提供以下接口和类
DriverManager:此类管理数据库驱动程序列表。 使用通信子协议将来自java应用程序的连接请求与适当的数据库驱动程序进行匹配。在JDBC下识别某个子协议的第一个驱动程序将用于建立数据库连接。
Driver:此接口处理与数据库服务器的通信。我们很少会直接与Driver对象进行交互。 但会使用DriverManager对象来管理这种类型的对象。 它还提取与使用Driver对象相关的信息。
Connection:此接口具有用于联系数据库的所有方法。 连接(Connection)对象表示通信上下文,即,与数据库的所有通信仅通过连接对象。
Statement:使用从此接口创建的对象将SQL语句提交到数据库。 除了执行存储过程之外,一些派生接口还接受参数。
ResultSet:在使用Statement对象执行SQL查询后,这些对象保存从数据库检索的数据。 它作为一个迭代器并可移动ResultSet对象查询的数据。
SQLException:此类处理数据库应用程序中发生的任何错误。

JDBC驱动程序类型(分1,2,3,4,4是纯Java实现)

JDBC数据类型
下表总结了当调用PreparedStatement或CallableStatement对象或ResultSet.updateXXX()方法的setXXX()方法时,将Java数据类型转换为的默认JDBC数据类型。

SQL类型 JDBC/Java类型 setXXX updateXXX
VARCHAR java.lang.String setString updateString
CHAR java.lang.String setString updateString
LONGVARCHAR java.lang.String setString updateString
BIT boolean setBoolean updateBoolean
NUMERIC java.math.BigDecimal setBigDecimal updateBigDecimal
TINYINT byte setByte updateByte
SMALLINT short setShort updateShort
INTEGER int setInt updateInt
BIGINT long setLong updateLong
REAL float setFloat updateFloat
FLOAT float setFloat updateFloat
DOUBLE double setDouble updateDouble
VARBINARY byte[ ] setBytes updateBytes
BINARY byte[ ] setBytes updateBytes
DATE java.sql.Date setDate updateDate
TIME java.sql.Time setTime updateTime
TIMESTAMP java.sql.Timestamp setTimestamp updateTimestamp
CLOB java.sql.Clob setClob updateClob
BLOB java.sql.Blob setBlob updateBlob
ARRAY java.sql.Array setARRAY updateARRAY
REF java.sql.Ref SetRef updateRef
STRUCT java.sql.Struct SetStruct updateStruct

处理NULL值(SQL使用NULL值和Java使用null是不同的概念)

Statement stmt = conn.createStatement( );
String sql = "SELECT id, first, last, age FROM Employees";
ResultSet rs = stmt.executeQuery(sql);

int id = rs.getInt(1);
if( rs.wasNull( ) ) {
   id = 0;
}

事务:

try{
   //Assume a valid connection object conn
   conn.setAutoCommit(false);
   Statement stmt = conn.createStatement();

   String SQL = "INSERT INTO Employees  " +
                "VALUES (106, 20, 'Rita', 'Tez')";
   stmt.executeUpdate(SQL);  
   //Submit a malformed SQL statement that breaks
   String SQL = "INSERTED IN Employees  " +
                "VALUES (107, 22, 'Sita', 'Singh')";
   stmt.executeUpdate(SQL);
   // If there is no error.
   conn.commit();
}catch(SQLException se){
   // If there is any error.
   conn.rollback();
}