數據連接步驟
- 注冊驅動(只做一次)
- 建立連接(Connection)
- 創建執行SQL的語句(Statament)
- 執行語句
- 處理執行結果(Result)
- 釋放資源
1.JDBC連接數據庫
a.加載JDBC驅動程序
在連接數據庫之前,首先要加載想要連接的數據庫驅動到JVM通常使用
b.java.lang.Class類的靜態方法forName實現
- 推薦使用這種方式不會對具體的驅動類產生依賴
Class.forName("com.mysql.jdbc.Driver");
- 會造成DriverManager中產生一兩個一樣的驅動,并會對驅動類產生依賴
DriverManager.registerDriver(com.mysql.jdbc.Driver);
- 雖然不會產生具體的驅動類產生依賴,但是注冊不太方便,基本不使用
System.setPropertry("jdb.drivers","driver1:driver2");
例如:
成功加載后,會將Driver類的實例注冊到DriverManager類中.try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { System.out.println("找不到驅動類,注冊失敗!"); e.printStackTrace(); } }
2.建立連接(Connection)
- 連接url定義了連接數據庫時的協議/子協議/數據源標識.
- 書寫格式:JDBC:子協議:子名稱//主機名:端口/數據庫名稱?屬性名=屬性值&.....
協議:在JDBC中總是以jdbc開始 子協議:是橋連接驅動程序或是數據庫管理系統名稱. user,password可以用"屬性名=屬性值"方式告訴數據庫. 例如: "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8";
######創建連接數據庫
- 要連接數據庫,需要向DriverManager請求并獲得Connection對象,該對 象就代表一個數據庫的連接
- 使用DriverManager的getConnection(String url,String username,String password)方法傳入指定要連接的數據庫的路徑,用戶名和密碼
例如:
//連接mysql 數據庫,用戶名root.密碼0000
String url = "jdbc:mysql://localhost:3306/test";
String username = "root";
Stringpassword = "0000";
try{
Connection conn =
DriverManager.getConnection(url , username , password ) ;
}catch(SQLException se){
System.out.println("數據庫連接失敗!");
se.printStackTrace() ;
}
#####3.創建執行SQL語句(Statement)
要執行SQL語句,必須獲得java.sql.Statement實例,Statement實例分為以下3種類型
- 執行靜態SQL語句,通常使用Statement實例實現,
- 執行動態SQL語句,通常使用PreparedStatement實例實現,
- 執行數據庫存儲過程,通常使用CallableStatement實例實現.
######具體實現方式如下:
Statement
- Statement st = conn.createStatement();
- st.executeQuery(sql);
PrepasredStatement
- String sql = "select * from user where name = ?";
- PreparedStatement ps = conn.PreparedStatement(sql);
- ps.setString(1,"col_value");
- ps.executeQuery();
CallableStatement
- CallableStatement cst = conn.prepareCall("{CALL demoSp(?,?)}");
####4.執行SQL語句
Statement接口提供了三種SQL語句的方法:executeQuery,executeUpdate,execute.
- ResultSet executeQuery(String sqlString):執行查詢數據庫的SQL語句,返回一個結果集對象
- int executeUpdate(String sqlString):用于執行insert,update或者delete以及執行SQL語句,如:create table和drop table等.
######實現代碼
String sql = "select id,name,password,email,birthday from user";
ResultSet rs = st.executeQuery(sql);
或者
ResultSet rs = st.executeQuery("select * from user");
以及
int i = st.executeQuery(String sql);
####5.處理執行結果(ResultSet)
兩種情況:
a. 執行更新返回本次操作影響到的記錄數.
b.執行查詢返回的結果是一個ResultSet對象
// 參數中的1是指sql中的列索引,使用列的具體來拿
-
while (rs.next()) {
System.out.println(rs.getObject(1);
while(rs.next){
String name = rs.getString("name");
}
####6.釋放資源
操作完成以后要把所有使用的JDBC對象全部關閉,以釋放JDBC資源,關閉順序和開始順序相反.
數據庫連接是非常稀有的資源,用完后必須馬上釋放,如果Connection不能及時正確關閉導致系統宕機,Connection的使用原則是盡量晚創建,盡量早的釋放.
#####關閉順序:
1.關閉結果集ResultSet
2.關閉聲明Statement
3.關閉連接Connection
try {
if (rs != null)
rs.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (st != null)
st.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (conn != null)
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}