8-1、JDBC對象介紹(4大參數等)


1 JDBC中的主要類(接口)

在JDBC中常用的類有:

l  DriverManager;(注冊驅動類,調用該類就執行靜態代碼塊的內容,自己注冊)

l  Connection;數據庫連接, 可以得到statement,preparedStatement:java.sql.類

l  Statement;

l  ResultSet。

 

2 DriverManager

其實我們今后只需要會用DriverManager的getConnection()方法即可:

  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 con = DriverManager.getConnection(url, username, password);

 

注意,上面代碼可能出現的兩種異常:

  1. ClassNotFoundException:這個異常是在第1句上出現的,出現這個異常有兩個可能:

l  你沒有給出mysql的jar包;

l  你把類名稱打錯了,查看類名是不是com.mysql.jdbc.Driver。

 

  1. SQLException:這個異常出現在第5句,出現這個異常就是三個參數的問題,往往username和password一般不是出錯,所以需要認真查看url是否打錯。

 

對於DriverManager.registerDriver()方法了解即可,因為我們今后注冊驅動只會Class.forName(),而不會使用這個方法。

 

3 Connection

Connection最為重要的方法就是獲取Statement:

l  Statement stmt = con.createStatement();

 

后面在學習ResultSet方法時,還要學習一下下面的方法:

l  Statement stmt = con.createStatement(int,int[c1] );

4 Statement

Statement最為重要的方法是:

l  int executeUpdate[c2] (String sql):執行更新操作,即執行insert、update、delete語句,其實這個方法也可以執行create table、alter table,以及drop table等語句,但我們很少會使用JDBC來執行這些語句;

l  ResultSet executeQuery[c3] (String sql):執行查詢操作,執行查詢操作會返回ResultSet,即結果集。

 

  boolean execute[c4] ()

Statement還有一個boolean execute()方法,這個方法可以用來執行增、刪、改、查所有SQL語句。該方法返回的是boolean類型,表示SQL語句是否有結果集!。

如果使用execute()方法執行的是更新語句,那么還要調用int getUpdateCount()來獲取insert、update、delete語句所影響的行數。

如果使用execute()方法執行的是查詢語句,那么還要調用ResultSet getResultSet()來獲取select語句的查詢結果。

 

5 ResultSet之滾動結果集(了解)scroll,sentive, forward_only

下一行:默認只能使用它,其他的方法存在,但不能使用!默認的結果集不可滾動!

上一行

下N行

上N行

到N行

結果集不能滾動時,紅色的方法表示不能使用。

ResultSet表示結果集,它是一個二維的表格!ResultSet內部維護一個行光標(游標),ResultSet提供了一系列的方法來移動游標:

l  void beforeFirst():把光標放到第一行的前面,這也是光標默認的位置;

l  void afterLast():把光標放到最后一行的后面;

l  boolean first():把光標放到第一行的位置上,返回值表示調控光標是否成功;

l  boolean last():把光標放到最后一行的位置上;

l   

l  boolean isBeforeFirst():當前光標位置是否在第一行前面;

l  boolean isAfterLast():當前光標位置是否在最后一行的后面;

l  boolean isFirst():當前光標位置是否在第一行上;

l  boolean isLast():當前光標位置是否在最后一行上;

l   

l  boolean previous():把光標向上挪一行;

l  boolean next():把光標向下挪一行;

l  boolean relative(int row):相對位移,當row為正數時,表示向下移動row行,為負數時表示向上移動row行;

l  boolean absolute(int row):絕對位移,把光標移動到指定的行上;

l  int getRow():返回當前光標所有行。

 

 

獲取結果集元數據!(列數,列名等)

l  得到元數據:rs.getMetaData(),返回值為ResultSetMetaData;

l  獲取結果集列數:int getColumnCount()

l  獲取指定列的列名:String getColumnName(int colIndex)

 

結果集特性:當使用Connection的createStatement時,已經確定了Statement生成的結果集是什么特性。

l  是否可滾動

l  是否敏感(敏感:數據庫改變,使結果集也會改變)

l  是否可更新(可更新:修改結果集,使數據庫也改變)

con.createStatement():生成的結果集:不滾動、不敏感、不可更新!

con.createStatement(int,int):

第一個參數:

l  ResultSet.TYPE_FORWARD_ONLY:不滾動結果集;

l  ResultSet.TYPE_SCROLL_INSENSITIVE:滾動結果集,但結果集數據不會再跟隨數據庫而變化;

l  ResultSet.TYPE_SCROLL_SENSITIVE[c5] :滾動結果集,但結果集數據不會再跟隨數據庫而變化;

第二個參數:

CONCUR_READ_ONLY:結果集是只讀的,不能通過修改結果集而反向影響數據庫;

l  CONCUR_UPDATABLE:結果集是可更新的,對結果集的更新可以反向影響數據庫。

 

 

 

上面方法分為兩類,一類用來判斷游標位置的,另一類是用來移動游標的。如果結果集是不可滾動的,那么只能使用next()方法來移動游標,而beforeFirst()、afterLast()、first()、last()、previous()、relative()方法都不能使用!!!

結果集是否支持滾動,要從Connection類的createStatement()方法說起。也就是說創建的Statement決定了使用Statement創建的ResultSet是否支持滾動。

Statement createStatement(int resultSetType, int resultSetConcurrency)

resultSetType的可選值:

l  ResultSet.TYPE_FORWARD_ONLY:不滾動結果集;

l  ResultSet.TYPE_SCROLL_INSENSITIVE:滾動結果集,但結果集數據不會再跟隨數據庫而變化;

l  ResultSet.TYPE_SCROLL_SENSITIVE :滾動結果集,但結果集數據不會再跟隨數據庫而變化;

 

可以看出,如果想使用滾動的結果集,我們應該選擇TYPE_SCROLL_INSENSITIVE!其實很少有數據庫驅動會支持TYPE_SCROLL_SENSITIVE的特性!通常我們也不需要查詢到的結果集再受到數據庫變化的影響。

 

resultSetConcurrency的可選值:

CONCUR_READ_ONLY:結果集是只讀的,不能通過修改結果集而反向影響數據庫;

l  CONCUR_UPDATABLE:結果集是可更新的,對結果集的更新可以反向影響數據庫。

 

通常可更新結果集這一“高級特性”我們也是不需要的!

 

獲取滾動結果集的代碼如下:

Connection con = …

Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, CONCUR_READ_ONLY);

String sql = …//查詢語句

ResultSet rs = stmt.executeQuery(sql);//這個結果集是可滾動的,不敏感的

 

6 ResultSet之獲取列數據(getXxx(1,2,3…))

可以通過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數據;

l  Object getObject(String columnName):獲取名稱為columnName的列的Object數據;


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM