JDBC--Java Database Connectivity
?
1.JDBC:Java DataBase Connectivity ?可以為多種關系型數據庫DBMS 提供統一的訪問方式,用Java來操作數據庫
2.JDBC API 主要功能:
三件事,具體是通過以下類/接口實現:
DriverManager : 管理jdbc驅動
Connection: 連接(通過DriverManager產生)
Statement(PreparedStatement) :增刪改查 ?(通過Connection產生 )
CallableStatement ?: 調用數據庫中的 存儲過程/存儲函數 ?(通過Connection產生 )
Result :返回的結果集 ?(上面的Statement等產生 )
Connection產生操作數據庫的對象:
Connection產生Statement對象:createStatement()
Connection產生PreparedStatement對象:prepareStatement()
Connection產生CallableStatement對象:prepareCall();
Statement操作數據庫:
增刪改:executeUpdate()
查詢:executeQuery();
ResultSet:保存結果集 select * from xxx
next():光標下移,判斷是否有下一條數據;true/false
previous(): ?true/false
getXxx(字段名|位置):獲取具體的字段值?
PreparedStatement操作數據庫:
public interface PreparedStatement extends Statement?
因此
增刪改:executeUpdate()
查詢:executeQuery();
--此外
賦值操作 setXxx();
PreparedStatement與Statement在使用時的區別:
1.Statement:
sql
executeUpdate(sql)
2.
PreparedStatement:
sql(可能存在占位符?)
在創建PreparedStatement 對象時,將sql預編譯 prepareStatement(sql)
executeUpdate()
setXxx()替換占位符?
推薦使用PreparedStatement:原因如下:
1.編碼更加簡便(避免了字符串的拼接)
String name = "zs" ;
int age = 23 ;
stmt:
String sql =" insert into student(stuno,stuname) values('"+name+"', ?"+age+" ) ? ?" ;
stmt.executeUpdate(sql);
pstmt:
String sql =" insert into student(stuno,stuname) values(?,?) " ;
pstmt = connection.prepareStatement(sql);//預編譯SQL
pstmt.setString(1,name);
pstmt.setInt(2,age);
2.提高性能(因為 有預編譯操作,預編譯只需要執行一次)
需要重復增加100條數?
stmt:
String sql =" insert into student(stuno,stuname) values('"+name+"', ?"+age+" ) ? ?" ;
for(100)
stmt.executeUpdate(sql);
pstmt:
String sql =" insert into student(stuno,stuname) values(?,?) " ;
pstmt = connection.prepareStatement(sql);//預編譯SQL
pstmt.setString(1,name);
pstmt.setInt(2,age);
for( 100){
pstmt.executeUpdate();
}
3.安全(可以有效防止sql注入)
sql注入: 將客戶輸入的內容 ?和 開發人員的SQL語句 混為一體
stmt:存在被sql注入的風險 ?
(例如輸入 ?用戶名:任意值 ' or 1=1 --
?? ? ? 密碼:任意值)
分析:
select count(*) from login where uname='任意值 ' or 1=1 --' and upwd ='任意值' ?;
select count(*) from login where uname='任意值 ' or 1=1 ;
select count(*) from login ;
select count(*) from login where uname='"+name+"' and upwd ='"+pwd+"'?
pstmt:有效防止sql注入
推薦使用pstmt
3.jdbc訪問數據庫的具體步驟:
a.導入驅動,加載具體的驅動類
b.與數據庫建立連接
c.發送sql,執行
d.處理結果集 (查詢)
4.
數據庫驅動
?? ??? ?驅動jar?? ??? ??? ??? ??? ?具體驅動類?? ??? ??? ??? ??? ??? ?連接字符串
Oracle?? ??? ?ojdbc-x.jar?? ??? ??? ??? ?oracle.jdbc.OracleDriver?? ??? ??? ??? ?jdbc:oracle:thin:@localhost:1521:ORCL
MySQL?? ??? ?mysql-connector-java-x.jar?? ??? ?com.mysql.jdbc.Driver?? ??? ??? ??? ??? ?jdbc:mysql://localhost:3306/數據庫實例名
SqlServer?? ?sqljdbc-x.jar?? ??? ??? ??? ?com.microsoft.sqlserver.jdbc.SQLServerDriver?? ??? ?jdbc:microsoft:sqlserver:localhost:1433;databasename=數據庫實例名
使用jdbc操作數據庫時,如果對數據庫進行了更換,只需要替換:驅動、具體驅動類、連接字符串、用戶名、密碼
?
總結
以上是生活随笔為你收集整理的JDBC--Java Database Connectivity的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Leetcode--542. 01 矩阵
- 下一篇: java美元兑换,(Java实现) 美元