JDBC API主要功能:
與數(shù)據(jù)庫建立連接,執(zhí)行SQL語句,處理結(jié)果。
1.DriverManager:依據(jù)數(shù)據(jù)庫的不同,管理JDBC驅(qū)動。
2.Connection:負責連接數(shù)據(jù)庫并且擔任傳輸數(shù)據(jù)的任務(wù)。
3.Statement:由Connection產(chǎn)生,負責執(zhí)行SQL語句。
4.ResultSet:負責保存Statement執(zhí)行后所產(chǎn)生的查詢結(jié)果。
在JDBC中用到的相關(guān)方法:
1.forName();返回與帶有給定字符串名的類或是接口(獲取驅(qū)動類的全部名稱,進行加載。)
2.getConnection();獲取連接數(shù)據(jù)庫的相關(guān)信息,包括:url數(shù)據(jù)庫的地址及其數(shù)據(jù)庫名,user用戶名,password密碼。
3.createStatemebt();創(chuàng)建一個Statement對象,將SQL語句發(fā)送到數(shù)據(jù)庫。
4.executeUpdate(String sql);增,刪,改都用。返回值是執(zhí)行該操作所影響的行數(shù)
5.execute(String sql);可以執(zhí)行任意的SQL語句,然后獲得一個布爾值,表示是否返回ResulSet。
6.使用ResultSet查詢表的信息
createStatement();在連接數(shù)據(jù)庫的時候,獲取一個可以執(zhí)行的SQL語句,在這里就是查詢?nèi)蝿?wù)。
executeQuery(String sql);執(zhí)行查詢時 ,要用statement類的exeuteQuery();方法來下達select指令以查詢數(shù)據(jù)庫,executeQuery();方法會把數(shù)據(jù)庫響應(yīng)的查詢結(jié)果放在ResultSet類對象中供我們使用。執(zhí)行SQL查詢并獲取到ResultSet對象
getobject();具體的查詢,其中的查詢可以是索引,也可以是名。
ResultSet常用方法:
Boolean next();將光標從當前位置向下移動一行
Boolean previous();游標從當前位置向上移動一行(與上面的相反)
void close(); ???????????關(guān)閉ResultSet對象
int getInt(int colIndex); ???以int形式獲取結(jié)果集當前行指定列號值
int getInt(String colLabel); 以int形式獲取結(jié)果集當前行指定列名值
float getFloat(int colIndex);以float形式獲取結(jié)果集當前行指定列號值
float getFloat(String colLabel); 以float形式獲取結(jié)果集當前行指定列名值
String getString(int colIndex); ?以String形式獲取結(jié)果集當前行指定列號值
String getString(String colLabel);以String形式獲取結(jié)果集當前行指定列名值
PreparedStatement:
PreparedStatement可以避免注入隱患
PreparedStatement接口是繼承Statement接口的,要比Statement對象使用起來更加靈活,更有效率。
列子使用:
Statement:
PreparedStatement:
1.PreparedStatement是預(yù)編譯的,對于批量處理可以大大提高效率. 也叫JDBC存儲過程。
1.提高了安全性。
2.提高SQL語句執(zhí)行的性能
3.提高了代碼的可讀性和維護性
2.使用 Statement 對象。在對數(shù)據(jù)庫只執(zhí)行一次性存取的時侯,用 Statement 對象進行處理。PreparedStatement 對象的開銷比Statement大,對于一次性操作并不會帶來額外的好處。
3.statement每次執(zhí)行sql語句,相關(guān)數(shù)據(jù)庫都要執(zhí)行sql語句的編譯,preparedstatement是預(yù)編譯得,preparedstatement支持批處理