jdbc 的一些重點(diǎn)
1,jdbc的作用:與數(shù)據(jù)庫建立連接、執(zhí)行SQL 語句、處理結(jié)果。
2,DriverManager :依據(jù)數(shù)據(jù)庫的不同,管理JDBC驅(qū)動
Connection :負(fù)責(zé)連接數(shù)據(jù)庫并擔(dān)任傳送數(shù)據(jù)的任務(wù)
Statement :由 Connection 產(chǎn)生、負(fù)責(zé)執(zhí)行SQL語句
ResultSet:負(fù)責(zé)保存Statement執(zhí)行后所產(chǎn)生的查詢結(jié)果
3,jdbc URL:提供一種標(biāo)識數(shù)據(jù)庫的方法,使相應(yīng)的JDBC驅(qū)動程序識別數(shù)據(jù)庫并與之建立4,連接:將對JDBC API的調(diào)用,轉(zhuǎn)換為對另一組數(shù)據(jù)庫連接API的調(diào)用
優(yōu)點(diǎn):可以訪問所有ODBC可以訪問的數(shù)據(jù)庫
缺點(diǎn):執(zhí)行效率低、功能不夠強(qiáng)大
5,純Java驅(qū)動
• 由JDBC驅(qū)動直接訪問數(shù)據(jù)庫
• 優(yōu)點(diǎn):100% Java,快又可跨平臺
• 缺點(diǎn):訪問不同的數(shù)據(jù)庫需要下載專用的JDBC驅(qū)動
6,使用純Java驅(qū)動方式進(jìn)行直連
1、下載數(shù)據(jù)庫廠商提供的驅(qū)動程序包
2、將驅(qū)動程序包引入工程中
3、編寫代碼,通過純Java驅(qū)動方式與數(shù)據(jù)庫建立連接
例如:
Class.forName(“com.mysql.jdbc.Driver”);
Connection con=DriverManger.getconnection(“jdbc:mysq://localhost:3306/tset”,”root”,”mysql”);
7, 在使用純Java驅(qū)動方式進(jìn)行數(shù)據(jù)庫連接時,如果程序在運(yùn)行時拋出異常:
java.sql.SQLException: No suitable driver found for jdbc:sqlserver://localhost:1433;DatabaseName=news
那么出錯的原因是什么?如何解決?
工程中沒有載入驅(qū)動,應(yīng)該把相應(yīng)的.jar文件導(dǎo)入到lib文件夾下。
8,請單獨(dú)建立一個類ConnectionManager,專門負(fù)責(zé)建立數(shù)據(jù)庫連接、以及關(guān)閉連接,并思考這樣做帶來的好處是什么?
既便于管理又可以提高代碼的復(fù)用率。
9,PreparedStatement 接口繼承 Statement接口
PreparedStatement比普通的Statement對象使用起來更加靈活,更有效率
Sql語句運(yùn)行多次時盡量使用preparedStatement,以便提高運(yùn)行效率。
例子:
public class NewsFirstTitleDB2 {
public static void main(String[ ] args) {
Connection con = null;
PreparedStatement pStatement = null;
try {
SimpleDateFormat hmFromat =
new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
con = ConnectionManager.getConnection();
String strSql = "insert into FirstLevelTitle values(?,?,?,?)";
pStatement = con.prepareStatement(strSql);
pStatement.setInt(1, 1);
pStatement.setString(2, "軍事");
pStatement.setString(3, "管理員");
pStatement.setString(4, hmFromat.format(new Date()));
pStatement.executeUpdate();
} catch (SQLException sqlE) {
sqlE.printStackTrace();
} finally {
ConnectionManager.closeStatement(pStatement);
ConnectionManager.closeConnection(con);
}
}
10,statement主要用于執(zhí)行靜態(tài)的sql語句;
Preparedstatement執(zhí)行動態(tài)的sql語句
Resultset 返回查詢的結(jié)果集
2,DriverManager :依據(jù)數(shù)據(jù)庫的不同,管理JDBC驅(qū)動
Connection :負(fù)責(zé)連接數(shù)據(jù)庫并擔(dān)任傳送數(shù)據(jù)的任務(wù)
Statement :由 Connection 產(chǎn)生、負(fù)責(zé)執(zhí)行SQL語句
ResultSet:負(fù)責(zé)保存Statement執(zhí)行后所產(chǎn)生的查詢結(jié)果
3,jdbc URL:提供一種標(biāo)識數(shù)據(jù)庫的方法,使相應(yīng)的JDBC驅(qū)動程序識別數(shù)據(jù)庫并與之建立4,連接:將對JDBC API的調(diào)用,轉(zhuǎn)換為對另一組數(shù)據(jù)庫連接API的調(diào)用
優(yōu)點(diǎn):可以訪問所有ODBC可以訪問的數(shù)據(jù)庫
缺點(diǎn):執(zhí)行效率低、功能不夠強(qiáng)大
5,純Java驅(qū)動
• 由JDBC驅(qū)動直接訪問數(shù)據(jù)庫
• 優(yōu)點(diǎn):100% Java,快又可跨平臺
• 缺點(diǎn):訪問不同的數(shù)據(jù)庫需要下載專用的JDBC驅(qū)動
6,使用純Java驅(qū)動方式進(jìn)行直連
1、下載數(shù)據(jù)庫廠商提供的驅(qū)動程序包
2、將驅(qū)動程序包引入工程中
3、編寫代碼,通過純Java驅(qū)動方式與數(shù)據(jù)庫建立連接
例如:
Class.forName(“com.mysql.jdbc.Driver”);
Connection con=DriverManger.getconnection(“jdbc:mysq://localhost:3306/tset”,”root”,”mysql”);
7, 在使用純Java驅(qū)動方式進(jìn)行數(shù)據(jù)庫連接時,如果程序在運(yùn)行時拋出異常:
java.sql.SQLException: No suitable driver found for jdbc:sqlserver://localhost:1433;DatabaseName=news
那么出錯的原因是什么?如何解決?
工程中沒有載入驅(qū)動,應(yīng)該把相應(yīng)的.jar文件導(dǎo)入到lib文件夾下。
8,請單獨(dú)建立一個類ConnectionManager,專門負(fù)責(zé)建立數(shù)據(jù)庫連接、以及關(guān)閉連接,并思考這樣做帶來的好處是什么?
既便于管理又可以提高代碼的復(fù)用率。
9,PreparedStatement 接口繼承 Statement接口
PreparedStatement比普通的Statement對象使用起來更加靈活,更有效率
Sql語句運(yùn)行多次時盡量使用preparedStatement,以便提高運(yùn)行效率。
例子:
public class NewsFirstTitleDB2 {
public static void main(String[ ] args) {
Connection con = null;
PreparedStatement pStatement = null;
try {
SimpleDateFormat hmFromat =
new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
con = ConnectionManager.getConnection();
String strSql = "insert into FirstLevelTitle values(?,?,?,?)";
pStatement = con.prepareStatement(strSql);
pStatement.setInt(1, 1);
pStatement.setString(2, "軍事");
pStatement.setString(3, "管理員");
pStatement.setString(4, hmFromat.format(new Date()));
pStatement.executeUpdate();
} catch (SQLException sqlE) {
sqlE.printStackTrace();
} finally {
ConnectionManager.closeStatement(pStatement);
ConnectionManager.closeConnection(con);
}
}
10,statement主要用于執(zhí)行靜態(tài)的sql語句;
Preparedstatement執(zhí)行動態(tài)的sql語句
Resultset 返回查詢的結(jié)果集