標籤:
參考 hu_shengyang的專欄 : http://blog.csdn.net/hu_shengyang/article/details/6290029
JDBC API中提供的常用資料庫編程的類和介面如下
1.Driver 介面:代表驅動程式
2.DriverManager 類:驅動程式管理員
3.Connection 介面:代表資料庫連接
4.Statement 、PreparedStatement、CallableStatement 介面:代表資料庫操作對象
5.ResultSet 介面:代表結果集
6.DatabaseMetadata、ResultSetMetadata介面:代表中繼資料
7.Types 類:代表JDBC類型
詳細解釋
2.DriverManager類
DriverManager類管理一組JDBC驅動程式的基本服務,跟蹤可用的驅動程式,並在資料庫和相應驅動程式之間建立串連,處理諸如驅動程式登入時間限制及登入和跟蹤訊息的顯示等事務。
首先使用DriverManager類載入磁碟機,使用該類的DriverManager.registerDriver(Driver driver)方法註冊磁碟機。(registerDriver方法是靜態方法,可用類名直接調用)。
有兩種方法載入磁碟機
(1)DriverManager.registerDriver(Driver driver),則在DriverManager的驅動程式列可用於建立串連
(2)通過調用方法Class.forName()顯示載入驅動程式類。由於與外部設定無關,推薦
String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";class.forName(driver);
常用方法:DriverManager.getConnection(),參數不同,有以下幾種
DriverManager.getConnection(String url);
DriverManager.getConnection(String url, String user , String password); //user為資料庫使用者名稱,password為資料庫密碼
3.Connection介面
當調用DriverManager.getConnection方法發出串連請求時,DriverManager將檢查每個驅動程式是否可以建立串連,返回一個Connection資料庫連接對象。
createStatement()方法建立一個State對象來將SQL語句發送到資料庫,不帶參數的SQL語句通常使用Statement對象執行,如果多次執行相同SQL語句,可以使用PreparedStatement方法
例:Statement stmt = dbConn.createStatement();
4.Statement介面
發送SQL語句到資料庫中。
JDBC有3種Statement對象,Statement 、PreparedStatement(繼承自Statement)、CallableStatement(繼承自PreparedStatement)
Statement介面提供了3種執行SQL語句的方法
(1)executeQuery() 用於產生單個結果集語句,如select,返回單個ResuleSet對象
(2)executeUpdate() 執行INSERT,UPDATE,DELETE語句等資料操作語言以及CREATE TABLE和DROP TABLE等資料定義語言 (Data Definition Language)
(3)execute() 執行返回多個結果集、多個更新或者二者組合的語句
5.ResultSet介面
包含符合SQL語句中條件的所有行,並且通過一套get方法提供了對這些行中資料的訪問。
ResultSet.next移動到結果的下一行記錄 getXXX()擷取指定列中的資料
三、JDBC應用程式的基本步驟:
1.註冊驅動
2.建立資料庫連接
3.建立資料庫操作對象
4.執行SQL
5.處理結果集
6.關閉JDBC對象
1.註冊一個驅動driver
註冊驅動程式的三種方式:
方式一:Class.forName("Oracle.jdbc.driver.OracleDriver");
方式二:Driver driver=new Oracle.jdbc.driver.OracleDriver();
DriverManager.registerDriver(driver);
方式三:編譯時間在虛擬機器中載入驅動
javac -D jdbc.drivers = oracle.jabc.driver.OracleDriver xxx.java
java -D jabc.drivers = 驅動全名 類名
使用系統屬性名,載入驅動 -D表示為系統屬性賦值
附:mysql 的Driver全名:com.mysql.jdbc.Driver
sqlserver 的Driver全名:com.microsoft.jdbc.sqlserver.SQLServerDriver
2.建立串連
conn=DriverManager.getConnection
("jdbc:oracle.thin:@192.168.0.254:1521/test","username","password");
上面括弧中放的是:oracle自協議[email protected]+ip:port / 資料庫執行個體名,資料庫使用者名稱,使用者密碼。
mysql url寫法:jdbc:mysql://192.168.254:3306/test
SQLServer url寫法:jdbc:sqlserver://localhost:1433; DatabaseName=ztest
其他資料的補充(未證實正確性)
Oracle(thin模式):jdbc:oracle:thin:@localhost:1521:orcl //orcl為資料庫的SID
Sybase:jdbc:sybase:Tds:localhost:5007/myDB //myDB為資料庫名
DB2: jdbc:db2://localhost:5000/myDB
MySQL: jdbc:mysql://localhost/myDB?user=soft&password=123&useUnicode=true&characterEncoding=8859_1
3.獲得一個Statement對象
sta = conn.createStatement();
4.通過Statement執行sql語句
sta.excuteQuery(sql);//返回一個查詢結果集
sta.executeUpdate(sql);//傳回值為 int 型,表示影響記錄的條數
將sql語句通過串連發送到資料庫中執行,以實現對資料庫的操作。
5.處理結果集
使用Connection對象獲得一個Stagement,Statement中的executeQuery(String sql)方法可以使用select語句查詢,並返回一個結果集 ResultSet 。通過遍曆這個結果集,可以獲得select語句的查詢結果。ResultSet的next()方法會操作一個遊標從第一條記錄開始讀取,直到最後一天記 錄。 executeUpdate(String sql)方法用於執行 DDL /DML 語句,比如update,delete等。
只有select語句才有返回結果集。
例:Statement sta = con.createStatement(); //建立statement對象
String sql = " insert into test(id,name) values(1"+" " " "+"king"+" "" "+") ";
sta.executeUpdate(sql); //執行sql語句
String sql = "select * from test";
ReslutSet rs = sta.executeQuery(sql);//執行sql語句後有結果集
//遍曆處理結果集
while(rs.next()){
System.out.println(rs.getInt("id"));
System.out.println(rs.getString("name"));
}
6.關閉資料庫連接(釋放資源)
調用close()方法:
rs.close();
sta.close();
conn.close();
ResultSet 、Statement 和Connetction是依次依賴的。
注意:要按先 ResultSet ,再Statement,最後Connetction的順序關閉資源。因ResultSet和Statement在串連的情況下才能使用,所以在連使用束 後可能還有其他的statement還在串連,所以不能先關閉Connection。
======================================
舉例
在sqlserver內建立資料庫ztest,運行下面的語句
建表:
create table Student(
sno char(9) PRIMARY KEY,
sname char(20),
ssex char(2)
)
插入資料:
insert into Student values(‘1000001‘,‘張一‘,‘m‘);
insert into Student values(‘1000002‘,‘張二‘,‘f‘);
insert into Student values(‘1000003‘,‘張三‘,‘f‘);
insert into Student values(‘1000004‘,‘張四‘,‘f‘);
insert into Student values(‘1000005‘,‘張五‘,‘m‘);
insert into Student values(‘1000006‘,‘張六‘,‘f‘);
insert into Student values(‘1000007‘,‘張七‘,‘m‘);
insert into Student values(‘1000008‘,‘張八‘,‘m‘);
public class Test {public static void main(String[]args) {String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; //載入JDBC驅動String dbURL = "jdbc:sqlserver://localhost:1433; DatabaseName=ztest"; //串連伺服器和資料庫testString userName = "sa"; //預設使用者名String userPwd ="123"; //密碼Connection dbConn = null;try {Class.forName(driverName);dbConn = DriverManager.getConnection(dbURL, userName, userPwd);System.out.println("Connection Successful!"); //如果串連成功 控制台輸出Connection Successful!} catch (Exception e) {e.printStackTrace();System.out.println("串連失敗...");}try {Statement stmt = dbConn.createStatement();stmt.executeUpdate("insert into Student values(‘22222222‘,‘李四‘,‘m‘);");ResultSet rs = stmt.executeQuery("select * from student");while(rs.next()){System.out.println(rs.getString("sno")+" "+rs.getString("sname")+" "+rs.getString("ssex"));}} catch (SQLException e) {e.printStackTrace();}}}
控制台結果
Connection Successful!1000001 張一 m 1000002 張二 f 1000003 張三 f 1000004 張四 f 1000005 張五 m 1000006 張六 f 1000007 張七 m 1000008 張八 m 22222222 李四 m
Java學習筆記--JDBC資料庫的使用