JDBC(Java數據庫連接)
1. 什么是JDBC?
JDBC全稱:Java Database Connectivity,簡稱JDBC
2. JDBC常用的開發接口(☆)
接口 | 描述 |
---|---|
Connection | 用來與數據庫建立連接 |
Statement | 用來發送SQL語句 |
ResultSet | 執行SQL語句返回的結果集 |
PreparedStatement | 用來發送SQL語句的,是Statement的子接口(預編譯、防止SQL注入) |
3. 創建JDBC的步驟(☆)
- 導入數據庫驅動包,加載驅動
OracleDriver od = new OracleDriver();
DriverManager.registerDriver(od);
// 參數:驅動類的完整路徑
Class.forName("oracle.jdbc.driver.OracleDriver");
- 建立連接
Connection conn = DriverManager.getConnection(連接URL, 用戶名, 密碼);
("jdbc:oracle:thin:@127.0.0.1:1521:orcl,用戶名, 密碼")
- 創建可執行SQL語句的statement對象,發送SQL語句
Statement sm = conn.createStatement();
PreparedStatement ps = conn.prepareStatement(sql)
- 獲取結果集,遍歷數據
ResultSet rs = sm.executeQuery("select * from t_depart");
// 執行的SQL語句為查詢語句,返回的結果是ResultSet類型
statement.executeQuery(sql);
// 執行的SQL語句為刪除、修改、添加,返回的結果是int類型,代表數據庫中有多少條記錄被改變
statement.executeUpdate(sql);
// 執行的SQL語句為查詢、刪除、修改、添加,返回的結果是boolean類型,若為true,代表執行的為查詢語句,否則為其他語句
statement.execute(sql);
- 關閉,先開的后關,后開的先關
rs.close();
sm.close();
conn.close();
4. 時間處理
Java中有三個時間,java.util.Date
時間基類,有三個子類:
時間 | 描述 |
---|---|
java.sql.Date | 數據庫時間,精確到年月日 |
java.sql.Timestamp | 數據庫時間,精確到年月日時分秒 |
java.sql.Time | 數據庫時間,精確時分秒 |
5. JDBC編程思想(類與數據庫對應關系)(☆)
- 一個類對應一張表
- 一個屬性對應一個字段
- 一個對象對應一條記錄
6. Statement與PreparedStatement區別(☆)
PrepareStatement是Statement的子接口
-
PerparedStatement自帶預編譯功能,相同的SQL語句只會編譯一次,提高執行效率
Statement每次執行SQL語句都會重新編譯,執行效率不高 -
PerparedStatement防止SQL注入,安全性比較高
Statement不能防止SQL注入,安全性較低
7. 數據類型與Java類型的匹配
數據庫類型 | Java類型 |
---|---|
char | String |
varchar | |
varchar2 | |
clob | |
number | int |
long | |
number(7,2) | double |
date | java.sql.Date |
timestamp | java.sql.Timestamp |
8. JDBC如何手動提交事務
JDBC默認自動提交事務
-
把Connection對象設置成手動提交事務,代碼如下:
conn.setAutoCommit(false);
-
當Statement對象執行SQL語句之后,提交事務,代碼如下:
int row = ps.executeUpdate();
conn.commit();
select t.*, rowid from t_newsuser t;
// 格式化表
truncate table t_newsuser;
9. 如何釋放一張表的空間,提高查詢效率
select * from t_newstype;
select * from t_newstype1;
- 創建一張備份表
create table t_newstype1 as select * from t_newstype;
- 清空原表
truncate table t_newstype;
- 還原數據
insert into t_newstype select * from t_newstype1;
commit;
- 刪除備份表
drop table t_newtype1;
10. executeUpdate與executeQuery的區別
-
executeUpdate:執行的語句是DDL、DML,DDL幾乎不用,返回值為:影響行數(int)
- drop:刪除表結構,並且刪除數據,釋放表空間
- truncate:保留表結構,清除數據,釋放表空間
- delete:保留表結構,刪除指定數據,提交事務,不一定釋放空間
-
executeQuery:執行的語句是DQL,select查詢語句,返回值為:結果集(ResultSet)
10. JDBC常見異常
常見異常 | 可能引起原因 |
---|---|
標識符無效 | 字段名單詞寫錯 |
索引中丟失IN或OUT | 字段名與?個數不匹配 |
無效的列索引 | 參數多余? |
ORA-00911:無效字符 | 多個無效的字符,例如:分號 |
列在此處不允許 | 數據類型不匹配 |