Javaweb學習筆記11 JDBC

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{

  //先打開的後關閉,後打開的先關閉

  //關閉以前先排空,由於有可能還沒創建鏈接已經報異常,鏈接沒創建沒辦法關閉

}

相關文章
相關標籤/搜索