?? 4_jdbc學(xué)習(xí)筆記.txt
字號:
2004-9-13 星期一 小雨
l. 連接到數(shù)據(jù)庫的方法
答:1) ODBC(Open Database Connectivity)
一個(gè)以C語言為基礎(chǔ)訪問SQL為基礎(chǔ)數(shù)據(jù)庫引擎的接口,它提供了一致的接口用于和數(shù)據(jù)庫溝通以及訪問數(shù)據(jù)。
2) JDBC
Java版本的ODBC
2. JDBC應(yīng)用編程接口
答:JDBC應(yīng)用編程接口是:
1) 標(biāo)準(zhǔn)的數(shù)據(jù)訪問接口,可以連到不同的數(shù)據(jù)庫;
2) JAVA編程語言的一組類和接口。
JDBC應(yīng)用編程接口能夠:
1) 連接到數(shù)據(jù)庫;
2) 發(fā)SQL查詢字符串到數(shù)據(jù)庫;
3) 處理結(jié)果。
JDBC應(yīng)用編程接口有二個(gè)主要的部分:
1) JAVA應(yīng)用程序開發(fā)接口面向JAVA應(yīng)用程序開發(fā)者;
2) JDBC驅(qū)動程序開發(fā)接口
3. JDBC Driver
答:1) 一大堆實(shí)現(xiàn)了JDBC類和接口的類;
2) 提供了一個(gè)實(shí)現(xiàn)java.sql.Driver接口的類。
4. JDBC Driver的四種類型
答:1) JDBC-ODBC橋
由ODBC驅(qū)動提供JDBC訪問
2) 本地API
部分Java driver把JDBC調(diào)用轉(zhuǎn)化成本地的客戶端API
3) JDBC-net
純的Java driver,將JDBC調(diào)用轉(zhuǎn)入DBMS,與網(wǎng)絡(luò)協(xié)議無關(guān)。然后通過服務(wù)器將調(diào)用轉(zhuǎn)為DBMS協(xié)議。
4) 本地協(xié)議
純的java driver,將JDBC調(diào)用直接轉(zhuǎn)為DBMS使用的網(wǎng)絡(luò)協(xié)議
5. JDBC開發(fā)者接口
答:1) java.sql--java 2平臺下JDBC的主要功能,標(biāo)準(zhǔn)版(J2SE)
2) javax.sql--java 2平臺下JDBC增強(qiáng)功能,企業(yè)版(J2EE)
6. 使用URL確認(rèn)數(shù)據(jù)庫
答:我們使用URL來確定一個(gè)數(shù)據(jù)庫(正確的Driver,正確的主機(jī),正確的協(xié)議,正確的協(xié)議,正確的用戶名和密碼);
語法:protocol:subprotocol:subname
范例:jdbc:db2:MyTest
jdbc:db2://localhost:6789/MyTest
7. javax.sql包JDBC2.0的增強(qiáng)功能
答:1) 數(shù)據(jù)源接口;
2) 連接池;
3) 分布式交易;
4) 行集;
8. 創(chuàng)建一個(gè)基本的JDBC應(yīng)用
答:1) 步驟一:注冊一個(gè)driver;
2) 步驟二:建立一個(gè)到數(shù)據(jù)庫的連接;
3) 步驟三:創(chuàng)建一個(gè)statement;
4) 步驟四:執(zhí)行SQL語句;
5) 步驟五:處理結(jié)果;
6) 步驟六:關(guān)閉JDBC對象
9. 注冊一個(gè)Driver(步驟一)
答:1) driver被用于連接到數(shù)據(jù)庫;
2) JDBC應(yīng)用編程接口使用第一個(gè)能成功連接到給定URL的driver;
3) 在同一時(shí)間可以裝載多個(gè)driver
10.注冊一個(gè)driver的方法:
答:1) 使用類loader(裝載;實(shí)例化;注冊入DriverManager)
a. Class.forName("Com.ibm.db2.jdbc.app.DB2Driver");
b. Class.forName("Com.ibm.db2.jdbc.net.DB2Driver");
c. Class.forName("Com.microsoft.jdbc.sqlServer.SQLServerDriver);
d. Class.forName("oracl.jdbc.driver.OracleDriver");
e. Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
2) 實(shí)例化一個(gè)Driver
a. Driver drv = new COM.cloudscape.core.RmiJdbcDriver();
2004-9-14 星期二 陰
1. 建立一個(gè)到數(shù)據(jù)庫的連接(步驟二)
答:DriverManager調(diào)用getConnection(urlString)方法,實(shí)際上調(diào)用的是driver的connect(urlString)方法;
1) 當(dāng)一個(gè)driver肯定地對應(yīng)到一個(gè)數(shù)據(jù)庫URL,DriverManager建立一個(gè)連接;
2) 當(dāng)沒有driver匹配,返回null然后下一個(gè)driver被檢驗(yàn);
3) 假如沒有建立連接,拋出一個(gè)SQLExcepiton異常
2. 經(jīng)常使用的一些JDBC URL
答:1) JDBC-ODBC: jdbc:odbc:<DB>
2) Oracle: jdbc:oracle:oci:@<sid> or jdbc:oracle:thin:@<SID>
3) Weblogic MS-SQL: jdbc:weblogic:mssqlserver4:<DB>@<HOST>:<PORT>
4) DB2: jdbc:db2:MyTest or jdbc.db2://localhost:6789/MyTest(需要用戶名和密碼)
3. Driver連接方法
答:1) 創(chuàng)建一個(gè)到指定Driver實(shí)例的直接調(diào)用;
2) 避免一般訪問的問題
Driver drv = new COM.ibm.db2.jdbc.app.DB2Driver();
Connection con = null;
try {con = drv.connect("jdbc:db2:MyTest",new Properties())}
catch(SQLException e){}
4. 創(chuàng)建一個(gè)Statement(步驟三)
答:1) Statement的三個(gè)接口:
a. Statement;
b. PreparedStatement(繼承自Statement);
c. CallableStatement(繼承自PreparedStatement);
2) 使用方法Connection.createStatement()得到一個(gè)Statement對象
5. PreparedStatement對象
答:1) 調(diào)用ProparedStatement比statement更為高效;
2) 繼承自Statement;
3) 語法:PreparedStatement pstm = connection.prepareStatement(sqlString);
6. CallableStatement對象
答:1) 通過CallableStatement調(diào)用數(shù)據(jù)庫中的存儲過程;
2) 繼承自PreparedStatement;
3) CallableStatement cstm = connection.prepareCall("{call return_student[?,?]}");
cstm.setString(1,"8623034");
cstm.registerOutparameter(2, Types.REAL);
cstm.execute();
float gpa = cstm.getFloat(2);
7. Statement接口的比較
答: | Statement | PreparedStatement | CallableStatement
------------------------------------------------------------------------------
寫代碼位置 | 客戶端 | 客戶端 | 服務(wù)器端
------------------------------------------------------------------------------
寫代碼位置 | 客戶端 | 服務(wù)器端 | 服務(wù)器端
------------------------------------------------------------------------------
編寫代碼技術(shù) |Java,SQL操作 |Java,SQL操作 | 數(shù)據(jù)庫的程序語言,如PL/SQL
------------------------------------------------------------------------------
可配置性 | 高 |第一次高,以后低 | 低
------------------------------------------------------------------------------
可移植性 | 高 |假設(shè)支持PreparedStatement的話高
------------------------------------------------------------------------------
傳輸效率 | 低 |第一次低,以后高 | 高
8. 執(zhí)行SQL Statement(步驟四)
答:通過接口方法將SQL語句傳輸至黙認(rèn)的數(shù)據(jù)庫連接,返回結(jié)果可能是一個(gè)數(shù)據(jù)表,可以通過java.sql.ResultSet訪問。
1) Statement的接口方法:
a. executeQuery(sqlString): 執(zhí)行給定的SQL聲明,返回一個(gè)結(jié)果集(ResultSet)對象;
b. executeUpdate(sqlString): 執(zhí)行給定的SQL聲明,可以是INSERT、UPDATE或DELETE聲明,也可以是SQL DDL聲明;
c. execute(sqlString): 執(zhí)行給定的SQL聲明。
9. 處理結(jié)果(步驟五)
答:1) 使用結(jié)果集(ResultSet)對象的訪問方法獲取數(shù)據(jù);
a. next():下一個(gè)記錄
b. first():第一個(gè)記錄
c. last():最后一個(gè)記錄
d. previous():上一個(gè)記錄
2) 通過字段名或索引取得數(shù)據(jù)
3) 結(jié)果集保持了一個(gè)指向了當(dāng)前行的指針,初始化位置為第一個(gè)記錄前。
10. 關(guān)閉JDBC對象(步驟六)
答:1) 首先關(guān)閉記錄集;
2) 其次關(guān)閉聲明;
3) 最后關(guān)閉連接對象。
11. 數(shù)據(jù)表和類對應(yīng)的三種關(guān)系:
答:1) 一個(gè)表對應(yīng)一個(gè)類;
2) 一個(gè)表對應(yīng)相關(guān)類;
3) 一個(gè)表對應(yīng)整個(gè)類關(guān)系層
12. 類間關(guān)系的幾種表設(shè)計(jì):
答:1) 多對一,
2) 一對一:
3) 一對多:
4) 多對多:
13. SQL數(shù)據(jù)類型及其相應(yīng)的Java數(shù)據(jù)類型
答:SQL數(shù)據(jù)類型 Java數(shù)據(jù)類型 說明
------------------------------------------------------------------
INTEGER或者INT int 通常是個(gè)32位整數(shù)
SMALLINT short 通常是個(gè)16位整數(shù)
NUMBER(m,n) DECIMAL(m,n) Java.sql.Numeric 合計(jì)位數(shù)是m的定點(diǎn)十進(jìn)制數(shù),小數(shù)后面有n位數(shù)
DEC(m,n) Java.sql.Numeric 合計(jì)位數(shù)是m的定點(diǎn)十進(jìn)制數(shù),小數(shù)后面有n位數(shù)
FLOAT(n) double 運(yùn)算精度為n位二進(jìn)制數(shù)的浮點(diǎn)數(shù)
REAL float 通常是32位浮點(diǎn)數(shù)
DOUBLE double 通常是64位浮點(diǎn)數(shù)
CHARACTER(n)或CHAR(n) String 長度為n的固定長度字符串
VARCHAR(n) String 最大長度為n的可變長度字符串
BOOLEAN boolean 布爾值
DATE Java.sql.Date 根據(jù)具體設(shè)備而實(shí)現(xiàn)的日歷日期
TIME Java.sql.Time 根據(jù)具體設(shè)備而實(shí)現(xiàn)的時(shí)戳
TIMESTAMP Java.sql.Timestamp 根據(jù)具體設(shè)備而實(shí)現(xiàn)的當(dāng)日日期和時(shí)間
BLOB Java.sql.Blob 二進(jìn)制大型對象
CLOB Java.sql.Clob 字符大型對象
ARRAY Java.sql.Array
2004-9-15 星期三 陰
1. 元數(shù)據(jù)
答:關(guān)于數(shù)據(jù)的信息,例如類型或者容量。通過JDBC API可以訪問:
1) 數(shù)據(jù)庫元數(shù)據(jù);
a. 使用connection.getMetadata方法返回DataMetaData引用
b. 能夠使用isReadOnly此類方法獲取信息
2) 結(jié)果集元數(shù)據(jù);
a. 使用ResultSet.getMetadata方法返回ResultSetMetaData引用
b. 能夠使用getColumnCount此類方法獲取信息
2. 事務(wù)處理
答:1) 一系列的動作作為一個(gè)不可分的操作;
2) JDBC API中使用事務(wù)處理步驟:
a. 用false作為參數(shù)調(diào)用setAutoCommit方法;
b. 執(zhí)行一或多個(gè)關(guān)于數(shù)據(jù)庫的操作;
c. 調(diào)用commit方法完成改變;
d. 恢復(fù)上次提交后的改變,調(diào)用rollback方法.
try
{
con.setAutoCommit(false);
Statement stm = con.createStatement();
stm.executeUpdate("insert into student(name, age, gpa) values('gzhu', 30, 4.8)");
stm.commit();
}
catch(SQLException e)
{
try
{
con.rollback();
}
catch(Exception e)
{
}
}
3. 并發(fā)控制
答:1) 設(shè)置隔離級別方法:setTransactionIsolation
2) 隔離級別靜態(tài)變量
a. TRANSACTION_NONE:只讀的數(shù)據(jù)字典;
b. TRANSACTION_READ_UNCOMMITTED:只讀未提交數(shù)據(jù);
c. TRANSACTION_READ_COMMITTED:只讀未提交數(shù)據(jù);
d. TRANSACTION_REPEATABLE_READ:重復(fù)讀取數(shù)據(jù);
e. TRANSACTION_SERIALIZABLE:無論做什么操作都不許別人動。
3) 示例:con.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
4. JDBC 2.0 應(yīng)用程序編程接口增強(qiáng)功能
答:1) ResultSet增強(qiáng):
a. 可以回卷;
b. 可以修改;
設(shè)置示例:Statement stm = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
2) Statement增強(qiáng)了批量修改能力(batch updates);
3) 更高級的數(shù)據(jù)類型(例:Struct)。
5. JDBC 2.0標(biāo)準(zhǔn)擴(kuò)展
答:1) JNDI(Java Naming and Directory Interface): 解決離散狀態(tài)下Object的查找;
2) 連接池:在內(nèi)存中保存了一個(gè)數(shù)據(jù)庫連接,不需要注冊驅(qū)動器,提高性能的重要方法。
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -