2011.09.13

 

週二

       今天學習了JDBC,JDBC是我們使用JAVA程序操作數據庫的工具.

Java Data Base Connectivity  java數據庫連接

是一種用於執行SQL語句的Java API,可以爲多種關係數據庫提供統一訪問,它由一組用Java語言編寫的類和接口組成

 

我們想用Java程序操作數據庫, 就需要使用數據庫的驅動.

由於每種數據庫存儲數據的方式不同, 他們所提供的數據庫驅動也就不同.

如果我們學習所有數據庫的驅動, 那麼學習成本是很高的.

JDBC就是一套數據庫驅動的規範, 由多個接口組成.

1.1.      註冊驅動

DriverManager.registerDriver(new com.mysql.jdbc.Driver());

可以加載MySQL的驅動, 但我們不推薦這麼做.

參考com.mysql.jdbc.Driver的源代碼我們可以看到, 這個類的靜態代碼塊中已經將自己註冊到DriverManager了.

如果我們在程序中再次註冊, 相當於註冊了兩次.

參考文檔26.3.1.1, 我們可以使用一下形式註冊驅動, 當類被加載時自動註冊.

Class.forName("com.mysql.jdbc.Driver");

1.2.      獲取連接、URL地址

DriverManager通過已註冊的驅動獲取Connection, 這個Connection是java.sql.Connection的實現類.

具體返回的是哪個類, 由驅動決定. 也就是說, 我們註冊的是MySQL的驅動, 返回的就是MySQL的Connection. 查看源碼.

 

DriverManager在獲取連接的時候需要URL地址, 地址的語法爲:

jdbc:mysql://ip:port/sid[?參數名=參數值][&參數名=參數值]

jdbc:mysql: 是協議和子協議

ip:port 例如localhost:3306就是本機上的3306端口, 如果是本機3306端口可以省寫. 例如jdbc:mysql:///jdbc1

sid 是數據庫名, 例如jdbc1

後面可以跟參數, 例如 ?user=root&password=root 或者 useUnicode=true&characterEncoding=UTF-8

 

常用數據庫的url地址

Oracle:       jdbc:oracle:thin:@localhost:1521:sid

SQL Server:   jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=sid

MySQL:        jdbc:mysql://localhost:3306/sid

1.3.      Connection

Statement createStatement()

創建Statement對象, Statement對象可以向數據庫發送SQL語句

 

PreparedStatement prepareStatement(String sql)

在程序中編譯sql語句, 可以減輕數據庫服務器壓力, 以及提高程序安全性.

 

CallableStatement prepareCall(String sql)

調用存儲過程, 存儲過程是數據庫中的一組編譯好的SQL語句, 類似於Java中的函數

 

void setAutoCommit(boolean autoCommit)

設置自動提交事務

 

void commit()

提交事務

 

void rollback()

回滾事務

1.4.      Statement

ResultSet executeQuery(String sql)

執行查詢語句, 返回結果集

 

int executeUpdate(String sql)

執行插入, 修改, 刪除語句, 返回影響行數

 

boolean execute(String sql)

執行任意sql語句, 返回執行是否成功

 

void addBatch( String sql )

將sql語句添加到命令列表

 

int[] executeBatch()

運行命令列表, 返回每一個命令影響的行數

1.5.      ResultSet

通過Statement運行查詢語句可以獲得結果集.

結果集中存儲從數據庫中查詢出數據的集合, 內部維護一個指針, 默認指向開始位置之前.

 

boolean next()

嘗試將指針向下移動一行, 返回是否成功

 

Object getObject(int columnIndex)

Object getObject(String columnName)

當指針指向某一條記錄之後, 可以根據列號或者列名獲取某一列的數據, 由於數據庫中可以存放多種類型數據, 所以返回Object

 

由於我們通常是將獲取到的結果集中的數據封裝到對象中, 所以經常要將Object強轉成其他類型.

而ResultSet中定義了一系列方法方便我們的操作.

SQL類型

JDBC對應方法

Java類型

BIT

getBoolean()

boolean

TINYINT

getByte()

byte

SMALLINT

getShort()

short

INT

getInt()

int

BIGINT

getLong()

long

CHAR, VARCHAR, LONGVARCHAR

getString()

String

TEXT(CLOB)

getClob()

java.sql.Clob

BLOB

getBlob()

java.sql.Blob

DATE

getDate()

java.sql.Date

TIME

getTime()

java.sql.Time

TIMESTAMP

getTimestamp()

java.sql.Timestamp

 

ResultSet除了大量get方法外還有一些控制指針移動的方法

 

boolean next()

嘗試將指針向後移動一行, 返回是否成功

 

boolean previous()

嘗試將指針向前移動一行, 返回是否成功


boolean absolute(int row)

嘗試將指針移動到指定行, 返回是否成功

 

void beforeFirst()

將指針移動到第一行以前

 

void afterLast()

將指針移動到最後一行以後

1.6.      釋放資源

在程序運行結束以後, 和數據庫相關的資源不會被自動釋放掉, 我們需要手動釋放ResultSet, Statement, Connection

尤其Connection是非常寶貴的資源, 使用結束之後應該儘早釋放.

爲了確保釋放資源的代碼一定會執行到, 我們通常將它們放在finally中

發佈了45 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章