JDBC : Java Database Connectivity 能夠爲多種關係型數據庫DBMS 提供統一的訪問方式,目的就是用java來操做數據庫java
一個驅動程序就是一個jar包,操做不一樣數據庫的jar包由各自數據庫廠商提供mysql
jdbc提供統一的操做,忽略中間實現的細節(各個驅動程序)。sql
A jdbc api:提供各類操做訪問類接口 Connection Statement PreparedStatement(子類)ResultSet數據庫
B jdbc DriverManager:管理不一樣的數據庫驅動api
C 各類數據庫驅動:相應的數據庫廠商提供的(第三方公司提供) 鏈接直接操做數據庫安全
主要是學A,C是廠商提供,調用便可oracle
三件事,具體是經過如下類/接口實現函數
DriverManager :管理jdbc驅動sqlserver
Connection :鏈接 (經過DriverManager來產生) 性能
Statement(PrepareStatement):增刪改查 (經過Connection來產生)
CallableStatement: 調用數據庫中的存儲過程或者存儲函數 (經過Connection來產生)
ResultSet :返回結果集 (經過Statement來產生)
jdbc訪問數據庫的具體步驟
a。導入驅動,加載具體的驅動類
b。與數據庫創建鏈接( 數據庫名(包含鏈接字符串,IP,端口號)、用戶名、密碼 )
c。發送sql。執行
d。處理結果集
4.數據庫驅動 驅動jar 具體驅動類
oracle ojdbc-x.jar oracle.jdbc.OracleDriver
MySql mysql-connector-java-x.jar com.mysql.jdbc.Driver
SqlServer sqljdbc-x.jar com.microsoft.sqlserver.jdbc.SQLServerDriver
鏈接字符串
jdbc:oracle:thin:@localhost:1521:ORCL
jdbc:mysql://localhost:3306/數據庫實例名
jdbc:microsoft:sqlserver:localhost:1433;databasename=數據庫實例名
鏈接過程當中遇到的問題彙總
問題 解決方式
字符集不匹配 將mysql的默認字符集設置爲utf-8
用的包過於老舊 從官網下載對應版本
time zone 對應不上 在url最後加上?serverTimezone=GMT%2B8
root不能沒有密碼鏈接 設置root的密碼而且記住
使用jdbc操做數據庫時,若是對數據庫進行了更換,只須要替換:驅動、具體驅動類、鏈接字符串、用戶名、密碼
增刪改都是executeUpdate ,查詢是executeQuery
resultSet就是數據庫的一張表
經過循環將數據取出來
rs 是executeQuery查詢後返回的對象,有next()方法與getXXX(name)方法
connection 產生Statement對象 createStatement()
connection 產生PreparedStatement對象 PrepareStatement()
connection 產生CallableStatement對象 prepareCall()
Statement 操做數據庫:
增刪改:executeUpdate()
查詢 : executeQuery()
ResultSet 保存結果集 select* from xxx
next()光標下移,判斷是否有下一條數據
privious:true/false
getXxx(字段名/位置)獲取具體的字段值
PreparedStatement 操做數據庫:
public interface Prepared Statement extends Statement
所以有
增刪改:executeUpdate()
查詢 : executeQuery()
有一堆賦值操做 setXxx()
Statement 與 PreparedStatement:
Statement
直接寫sql,寫完執行就好了
PreparedStatement:
這個sql可能存在佔位符問號,在建立statement的對象時將sql預編譯 prepareStatement(sql)
用setXxx方法替換佔位符
推薦使用preparedStatement,緣由以下
1。編碼更加簡便,避免字符串的拼接
2。提升性能(由於有預編譯操做)
重複增長100次的時候 prepared sql 須要編譯執行100次
prepared Statement
3。安全
可以有效的防止sql注入
JDBC總結(模板、八股文);
try{
a。導入驅動包、加載具體驅動類Class.forName(""具體驅動類)
b。與數據庫創建鏈接connection = DriverManager.getConnection(...);
c經過connection ,獲取操做數據庫的對象(statement/preparedstatement/callablestatement)
stmt=connection.createStatement();
d。(查詢)處理結果集 resultset
while(rs.next()){rs.getXxx}
}catch(ClassNotfFundException e ){
//找驅動的時候會拋出這個異常
}catch(SQLException e){
//除了上面那個,都拋出這個
}catch(Exception e){
}finally{
//先打開的後關閉,後打開的先關閉
//關閉以前先排空,由於有可能還沒創建鏈接已經報異常,鏈接沒創建沒辦法關閉
}