日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Java中JDBC常見對象

 Mis林桑 2017-03-28

JDBC對象介紹

JDBC中的主要類(接口)

在JDBC中常用的類有:

l  DriverManager;

l  Connection;

l  Statement;

l  ResultSet。

DriverManager

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

1.       Class.forName(“com.mysql.jdbc.Driver”);//注冊驅(qū)動

2.       String url = “jdbc:mysql://localhost:3306/mydb1”;

3.       String username = “root”;

4.       String password = “123”;

5.       Connection con = DriverManager.getConnection(url, username,password);


注意,上面代碼可能出現(xiàn)的兩種異常:

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

l  你沒有給出mysql的jar包;

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


2.       SQLException:這個異常出現(xiàn)在第5句,出現(xiàn)這個異常就是三個參數(shù)的問題,往往username和password一般不是出錯,所以需要認(rèn)真查看url是否打錯。

Connection

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

l  Statement stmt = con.createStatement();


后面在學(xué)習(xí)ResultSet方法時,還要學(xué)習(xí)一下下面的方法:

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

Statement

Statement最為重要的方法是:

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

l  ResultSet executeQuery(String sql):執(zhí)行查詢操作,執(zhí)行查詢操作會返回ResultSet,即結(jié)果集。


  boolean execute()

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

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

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


ResultSet結(jié)果集

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

ResultSet表示結(jié)果集,它是一個二維的表格!ResultSet內(nèi)部維護(hù)一個行光標(biāo)(游標(biāo)),ResultSet提供了一系列的方法來移動游標(biāo):

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

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

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

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


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

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

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

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


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

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

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

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

l  int getRow():返回當(dāng)前光標(biāo)所有行。


獲取結(jié)果集元數(shù)據(jù)!

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

獲取結(jié)果集列數(shù):intgetColumnCount()

獲取指定列的列名:StringgetColumnName(int colIndex)


結(jié)果集特性:當(dāng)使用ConnectioncreateStatement時,已經(jīng)確定了Statement生成的結(jié)果集是什么特性。

是否可滾動

是否敏感

是否可更新


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

con.createStatement(int,int)

第一個參數(shù):

l  ResultSet.TYPE_FORWARD_ONLY:不滾動結(jié)果集;

l  ResultSet.TYPE_SCROLL_INSENSITIVE:滾動結(jié)果集,但結(jié)果集數(shù)據(jù)不會再跟隨數(shù)據(jù)庫而變化;

l  ResultSet.TYPE_SCROLL_SENSITIVE:滾動結(jié)果集,但結(jié)果集數(shù)據(jù)不會再跟隨數(shù)據(jù)庫而變化;

第二個參數(shù):

CONCUR_READ_ONLY:結(jié)果集是只讀的,不能通過修改結(jié)果集而反向影響數(shù)據(jù)庫;

l  CONCUR_UPDATABLE:結(jié)果集是可更新的,對結(jié)果集的更新可以反向影響數(shù)據(jù)庫。


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

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

StatementcreateStatement(int resultSetType, int resultSetConcurrency)

resultSetType的可選值:

l  ResultSet.TYPE_FORWARD_ONLY:不滾動結(jié)果集;

l  ResultSet.TYPE_SCROLL_INSENSITIVE:滾動結(jié)果集,但結(jié)果集數(shù)據(jù)不會再跟隨數(shù)據(jù)庫而變化;

l  ResultSet.TYPE_SCROLL_SENSITIVE:滾動結(jié)果集,但結(jié)果集數(shù)據(jù)不會再跟隨數(shù)據(jù)庫而變化;


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


resultSetConcurrency的可選值:

CONCUR_READ_ONLY:結(jié)果集是只讀的,不能通過修改結(jié)果集而反向影響數(shù)據(jù)庫;

l  CONCUR_UPDATABLE:結(jié)果集是可更新的,對結(jié)果集的更新可以反向影響數(shù)據(jù)庫。


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


獲取滾動結(jié)果集的代碼如下:

Connection con = …

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

String sql = …//查詢語句

ResultSet rs = stmt.executeQuery(sql);//這個結(jié)果集是可滾動的


ResultSet之獲取列數(shù)據(jù)

可以通過next()方法使ResultSet的游標(biāo)向下移動,當(dāng)游標(biāo)移動到你需要的行時,就需要來獲取該行的數(shù)據(jù)了,ResultSet提供了一系列的獲取列數(shù)據(jù)的方法:

l  String getString(int columnIndex):獲取指定列的String類型數(shù)據(jù);

l  int getInt(int columnIndex):獲取指定列的int類型數(shù)據(jù);

l  double getDouble(int columnIndex):獲取指定列的double類型數(shù)據(jù);

l  boolean getBoolean(int columnIndex):獲取指定列的boolean類型數(shù)據(jù);

l  Object getObject(int columnIndex):獲取指定列的Object類型的數(shù)據(jù)。


上面方法中,參數(shù)columnIndex表示列的索引,列索引從1開始,而不是0,這第一點與數(shù)組不同。如果你清楚當(dāng)前列的數(shù)據(jù)類型,那么可以使用getInt()之類的方法來獲取,如果你不清楚列的類型,那么你應(yīng)該使用getObject()方法來獲取。

ResultSet還提供了一套通過列名稱來獲取列數(shù)據(jù)的方法:

l  String getString(String columnName):獲取名稱為columnName的列的String數(shù)據(jù);

l  int getInt(String columnName):獲取名稱為columnName的列的int數(shù)據(jù);

l  double getDouble(String columnName):獲取名稱為columnName的列的double數(shù)據(jù);

l  boolean getBoolean(String columnName):獲取名稱為columnName的列的boolean數(shù)據(jù);

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

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多