JDBC中的主要類(接口)
在JDBC中常用的類有:
DriverManager;
Connection;
Statement;
ResultSet。
DriverManager
1. Class.forName(“com.MySQL.jdbc.Driver”);//注冊驅動
2. String url = “jdbc:mysql://localhost:3306/mydb1”;
3. String username = “root”;
4. String password = “123”;
5. Connection conn = DriverManager.getConnection(url, username,password);//獲得連接
注意,上面代碼可能出現的兩種異常:
1. ClassNotFoundException:這個異常是在第1句上出現的,出現這個異常有兩個可能:
1.你沒有給出mysql的jar包;
2.你把類名稱打錯了,查看類名是不是com.mysql.jdbc.Driver。
2. SQLException:這個異常出現在第5句,出現這個異常就是三個參數的問題,往往username和password一般不是出錯,所以需要認真查看url是否打錯。
Connection
Connection最為重要的方法就是獲取Statement:
stmt=conn.CreateStatement();
resultSet rs=stmt.executeQuery(sql);
上面是statement的用法
============================
下面是PrepareStatement的用法
ptmt=conn.PreparedStatement(sql);
resultSet rs=ptmt.executeQuery();
Statement
Statement最為重要的方法是:
int executeUpdate(String sql):執行更新操作,即執行insert、update、delete語句,其實這個方法也可以執行createtable、alter table,以及drop table等語句,但我們很少會使用JDBC來執行這些語句;
ResultSet executeQuery(String sql):執行查詢操作,執行查詢操作會返回ResultSet,即結果集。
boolean execute()
Statement還有一個boolean execute()方法,這個方法可以用來執行增、刪、改、查所有SQL語句。該方法返回的是boolean類型,表示SQL語句是否有結果集!。
如果使用execute()方法執行的是更新語句,那么還要調用int getUpdateCount()來獲取insert、update、delete語句所影響的行數。
如果使用execute()方法執行的是查詢語句,那么還要調用ResultSet getResultSet()來獲取select語句的查詢結果。
PreparedStatement
在數據庫的操作過程中,PreparedStatement 對象是一個很不起眼但是記為重要的接口對象,它繼承 於Statement,並與之在兩方面有所不同:
1)PreparedStatement 實例包含已編譯的 SQL 語句。這就是使語句“准備好”。包含於 PreparedStatement 對象中的 SQL 語句可具有一個或多個 IN 參數。IN參數的值在 SQL 語句創建時未被指定。相反的,該語句為每個 IN 參數保留一個問號(“?”)作為占位符。每個問號的值必須在該語句執行之前,通過適當的setXXX 方法來提供。
2)由於 PreparedStatement 對象已預編譯過,所以其執行速度要快於 Statement 對象。因此,多次執行的 SQL 語句經常創建為 PreparedStatement 對象,以提高效率。
作為 Statement 的子類,PreparedStatement 繼承了 Statement 的所有功能。同時,三種方法 execute、 executeQuery 和 executeUpdate 已被更改以使之不再需要參數。這些方法的 Statement 形式(接受 SQL 語句參數的形式)不應該用於 PreparedStatement 對象。
【PreparedStatement的setObject的作用和setString的作用是一樣的!】
setObject的第二個參數是Object類型,但是內部會通過instance of判斷這個參數到底是哪個類型的具體對象,從而調用相應類型的set方法。
3)setXXX 方法中的 XXX 是 Java 類型。它是一種隱含的 JDBC 類型(一般 SQL 類型),因為驅動程序將把 Java 類型映射為相應的 JDBC 類型(遵循該 JDBCGuide中§8.6.2 “映射 Java 和 JDBC 類型”表中所指定的映射),並將該 JDBC 類型發送給數據庫。例如,以下代碼段將 PreparedStatement 對象 pstmt 的第二個參數設置為 44,Java 類型為 short:
pstmt.setShort(2, 44);
驅動程序將 44 作為 JDBC SMALLINT 發送給數據庫,它是 Java short 類型的標准映射。
程序員的責任是確保將每個 IN 參數的 Java 類型映射為與數據庫所需的 JDBC 數據類型兼容的 JDBC 類型。不妨考慮數據庫需要 JDBC SMALLINT 的情況。如果使用方法 setByte ,則驅動程序將 JDBC TINYINT 發送給數據庫。這是可行的,因為許多數據庫可從一種相關的類型轉換為另一種類型,並且通常 TINYINT 可用於SMALLINT 適用的任何地方。
4) setObject(i+1,arg[i])用法與setInt(i+1,arg[i]),setString(i+1,arg[i])用法類似,
但不需指定參數類型,可以通用;
其中,第一個是指你SQL語句中的第幾個參數,第二個是要設置的值
舉個例子:SQL語句如下,
String sql="Select * From tableName Where id=? And Name=?"; pstmt.setInt(1,100)//就表示此處id=100 pstmt.setString(2,"abc")//表示此處Name="abc"
ResultSet之獲取列數據
可以通過next()方法使ResultSet的游標向下移動,當游標移動到你需要的行時,就需要來獲取該行的數據了,ResultSet提供了一系列的獲取列數據的方法:
l String getString(int columnIndex):獲取指定列的String類型數據;
l int getInt(int columnIndex):獲取指定列的int類型數據;
l double getDouble(int columnIndex):獲取指定列的double類型數據;
l boolean getBoolean(int columnIndex):獲取指定列的boolean類型數據;
l Object getObject(int columnIndex):獲取指定列的Object類型的數據。
上面方法中,參數columnIndex表示列的索引,列索引從1開始,而不是0,這第一點與數組不同。如果你清楚當前列的數據類型,那么可以使用getInt()之類的方法來獲取,如果你不清楚列的類型,那么你應該使用getObject()方法來獲取。
ResultSet還提供了一套通過列名稱來獲取列數據的方法:
l String getString(String columnName):獲取名稱為columnName的列的String數據;
l int getInt(String columnName):獲取名稱為columnName的列的int數據;
l double getDouble(String columnName):獲取名稱為columnName的列的double數據;
l boolean getBoolean(String columnName):獲取名稱為columnName的列的boolean數據;
Object getObject(String columnName):獲取名稱為columnName的列的Object數據;