使用JDBC的五個(gè)精華功能
一.批處理:
1.批處理時(shí)即可以用statement ,也可以用preparedstatement,一般可用后者。用后者的特點(diǎn):
PreparedStatement ps = con.prepareStatement(sqlURL+"?,?,?,?,null)");
ps.addBatch(sqlURL);
ps.addBatch(sqlURL2);
ps.addBatch(sqlURL3)
ps.execute()//是用來(lái)執(zhí)行初始化語(yǔ)句
ps.executeBatch()//是用來(lái)執(zhí)行ps.addBatch中的語(yǔ)句。
對(duì)于statement也用此特點(diǎn)。但.createStatement不能初始化.但可用stet.updateExecuate(sql) .
2.批處理有一個(gè)完整的sql操作過(guò)程的需要。它可以決定操作的回不回退,來(lái)確定操作的特征:
使用批處理是要考慮到異常的后果,是否已經(jīng)到達(dá)操作的目的。
3.二個(gè)表沒(méi)辦法通過(guò)sql語(yǔ)句合并,只是select 和 jion能獲取一個(gè)二個(gè)表的結(jié)果集合而已。
唯一的辦法:一個(gè)個(gè)的讀取,一個(gè)個(gè)的insert。
4.批處理中不能有b/lob類型進(jìn)行preparedStatement.setC/Blob()。
二.SQL語(yǔ)句:
1.對(duì)于update,insert等都可以用?表示當(dāng)時(shí)未用,然后對(duì)其進(jìn)行setxxx("")即補(bǔ)上.
2.對(duì)于integer類型的字段可以采用自動(dòng)增長(zhǎng)的方式:*聲明標(biāo)的方式如下:
createURL=CREATE TABLE netPage( orderList INT AUTO_INCREMENT, url VARCHAR(200), title VARCHAR(50), createTime DATE, file TEXT,PRIMARY key(orderList), KEY(url) )
注當(dāng)設(shè)定二個(gè)KEY值時(shí),數(shù)據(jù)庫(kù)先檢驗(yàn)***個(gè)key,如果沒(méi)有相同的就不檢驗(yàn)第二個(gè),如果有才檢驗(yàn)。只有當(dāng)某行的二個(gè)key都一樣時(shí)才報(bào)錯(cuò)。
3.當(dāng)要對(duì)表進(jìn)行清空要用TRUNCATE TABLE netpagebak,如果用delete *的話,就會(huì)當(dāng)表為空時(shí),回報(bào)錯(cuò) 。
4.DELETE netPageBak.* FROM netPageBak,netPage WHERE netPageBak.url=netPage.url 的意思是:
從netPageBak中刪除含有與netpage中url相同的url行。
5.在用到數(shù)據(jù)庫(kù)的字段是要回避含有:的string作為某一個(gè)字段的值。會(huì)出異常的(sql語(yǔ)法不對(duì))。
6.使用RowSet.getString(int),該int從1開始對(duì)應(yīng)相關(guān)的列字段。
三.數(shù)據(jù)類型:
1.在用到where語(yǔ)句的條件是:=null;將會(huì)被認(rèn)為沒(méi)有條件一樣,即使對(duì)應(yīng)的確實(shí)有字段的值為null.一搬在該字段為null時(shí),可用該字段的默認(rèn)值,或空值。
2??捎胠imit語(yǔ)句對(duì)檢索的行數(shù)結(jié)果限制。例:
SELECT * FROM netPage WHERE createTime="" LIMIT 10
注:LIMIT 接受一個(gè)或兩個(gè)數(shù)字參數(shù)。參數(shù)必須是一個(gè)整數(shù)常量。如果給定兩個(gè)參數(shù),***個(gè)參數(shù)指定***個(gè)返回記錄行的偏移量(從第幾行開始)(可選),第二個(gè)參數(shù)指定返回記錄行的***數(shù)目。這是mysql的使用方法,其他數(shù)據(jù)庫(kù)有類似的操作。
四.異常:
1。在設(shè)計(jì)方法來(lái)共享同一個(gè)connection 時(shí),要注意有關(guān)異常產(chǎn)生的情況,可能導(dǎo)致connection沒(méi)有及時(shí)關(guān)閉,因此要在每一個(gè)異常出現(xiàn)時(shí)設(shè)置關(guān)閉connection
2.java.sql.SQLException: Unable to connect to any hosts due to exception: java.net.ConnectException: Connection refused: connect
at com.mysql.jdbc.Connection.createNewIO(Connection.java:1797)
at com.mysql.jdbc.Connection.<init>(Connection.java:562)
其異常是由于數(shù)據(jù)庫(kù)的連接出問(wèn)題了。
五.數(shù)據(jù)庫(kù)大對(duì)象:
一.當(dāng)有大對(duì)象的使用:
1.COLB是代表大的數(shù)據(jù)(字符型) Blob代表大的二進(jìn)制數(shù)據(jù)類型 對(duì)于這些大對(duì)象而言在初始的時(shí)候要付null值否則會(huì)出錯(cuò)。
2.在用到sql語(yǔ)句的時(shí)候一定要保證語(yǔ)句的完整性。:
◆用逗號(hào)表示字段之間的間隔。
◆對(duì)于含values的語(yǔ)句注意括符的匹配。
◆當(dāng)用字符串表示sql語(yǔ)句是要注意''號(hào)來(lái)表示字符串。
例:sqlURL=sqlURL+num+",'"+hsStr+"','"+title+"','"+date.toString()+"',"+null+");";
注:sql結(jié)尾可無(wú);
3.一般不采用blob,clob,而采用long,long raw的原因是:需要平臺(tái)的支持。
【編輯推薦】