資料庫連接可以說是學習web最基礎的部分,也是非常重要的一部分,今天我們就來介紹下資料庫的串連為下面學習真正的web打下基礎
java中串連資料庫一般有兩種方式:
1.ODBC——Open Database Connectivity(開放資料庫連接性):基於C語言的一套資料庫編程介面,主要功能是提供資料庫的訪問和操作
所有的資料庫廠商對這套介面進行實現,不同資料庫廠商提供的實現是不一樣的,也就是通常所說的第三方支援,而這套編程介面就是我們的標準
2.JDBC——Java Database Connectivity(java版的ODBC)
專門為java語言提供的一套訪問操作資料庫的編程標準,由sun公司提供,所有可以被java語言操作的資料庫廠商都對其進行了實現
我們一般都是採用JDBC,優勢:
1.效率上jdbc會相對的高一些
2.安全形度來考慮,jdbc比odbc高
3.jdbc使用非常方便,只要加入相應的驅動包就可以了,而不像odbc還需要Jdbc-odbc橋驅動
4.使用jdbc可以很方便在各類資料庫間進行更換,只要更改相應的驅動就可以了
下面列舉用jdbc串連各類資料庫的方式:
常用JDBC串連資料庫方法總結如下:一、JDBC串連DB2Class.forName("Com.ibm.db2.jdbc.net.DB2Driver"); String url="jdbc:db2://dburl:port/DBname" cn = DriverManager.getConnection( url, sUsr, sPwd );二、JDBC串連Microsoft SQLServer(microsoft)Class.forName( "com.microsoft.jdbc.sqlserver.SQLServerDriver" ); cn = DriverManager.getConnection( "jdbc:microsoft:sqlserver://DBServerIP:1433;databaseName=master", sUsr, sPwd ); 三、JDBC串連Sybase(jconn2.jar)Class.forName( "com.sybase.jdbc2.jdbc.SybDriver" ); cn = DriverManager.getConnection( "jdbc:sybase:Tds:DBServerIP:2638", sUsr, sPwd ); 四、JDBC串連MySQL(mm.mysql-3.0.2-bin.jar)Class.forName( "org.gjt.mm.mysql.Driver" ); cn = DriverManager.getConnection( "jdbc:mysql://DBServerIP:3306/myDatabaseName", sUsr, sPwd ); 五、JDBC串連PostgreSQL(pgjdbc2.jar)Class.forName( "org.postgresql.Driver" ); cn = DriverManager.getConnection( "jdbc:postgresql://DBServerIP/myDatabaseName", sUsr, sPwd ); 六、JDBC串連Oracle(classes12.jar)Class.forName( "oracle.jdbc.driver.OracleDriver" ); cn = DriverManager.getConnection( "jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL", sUsr, sPwd ); 七、JDBC串連ODBC Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" ); Connection cn = DriverManager.getConnection( "jdbc:odbc:" + sDsn, sUsr, sPwd );
下面我以Microsoft SQLServer 2000為例進行資料庫連接的講解,我們在串連前先將jar包放到項目的lib目錄下,這裡我們只需jtds-1.2.5.jar
下面我們先來看一段完整串連資料庫代碼:
import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;public class JdbcTest { //資料庫的串連驅動,一般是不需要變的 private static final String DRIVER="com.microsoft.jdbc.sqlserver.SQLServerDriver"; //資料庫連接的URL,1433為預設的資料庫連接埠號碼,test為當前你要操作的資料庫名 private static final String URL="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=test"; //登入賬戶 private static final String DBNAME="sa"; //登入的密碼 private static final String DBPASS="123"; public void test(){ Connection con=null; PreparedStatement psm=null; ResultSet rs=null; try{ Class.forName(DRIVER); con = DriverManager.getConnection(URL,DBNAME,DBPASS); String sql="select* from admin where id=1"; psm=con.prepareStatement(sql); rs=psm.executeQuery(); while(rs.next()){ System.out.println(rs.getString("aPassword")); } }catch(Exception e){ con.close(); rs.close(); psm.close(); e.printStackTrace(); }finally{ if(rs!=null){ rs.close(); } if(psm==null){ psm.close(); } if(con!=null){ con.close(); } } }}
對於上面的資料庫連接查詢,我們分6步來進行分析:
a.載入JDBC驅動程式:
在串連資料庫之前,首先要載入想要串連的資料庫的驅動到JVM(Java虛擬機器),這通過java.lang.Class類的靜態方法forName(String className)實現。
如上面代碼:Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); 我們在單獨進行串連時一般要在進行異常的捕獲,即加上try..catch
try{
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
}catch(ClassNotFoundException e){
System.out.println("找不到驅動程式類 ,載入驅動失敗!");
e.printStackTrace() ;
}
成功載入後,會將Driver類的執行個體註冊到DriverManager類中。
b.提供JDBC串連的URL並進行串連 :
如上面的代碼:(也進行異常的捕獲)
private static final String URL="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=test";
private static final String DBNAME="sa";
private static final String DBPASS="123";
try{
con = DriverManager.getConnection(URL,DBNAME,DBPASS);
}catch{
System.out.println("資料庫連接失敗");
e.printStackTrace() ;
}
c.建立一個Statement
•要執行SQL語句,必須獲得java.sql.Statement執行個體,Statement執行個體分為以下3種類型:
1.執行靜態SQL語句。通常通過Statement執行個體實現。
2.執行動態SQL語句。通常通過PreparedStatement執行個體實現。
3.執行資料庫預存程序。通常通過CallableStatement執行個體實現。
具體的實現方式:
1.Statement stmt = con.createStatement() ;
2.如上代碼:PreparedStatement psm = con.prepareStatement(sql) ;
3.CallableStatement cstmt = con.prepareCall("{CALL demoSp(? , ?)}") ;
d.執行SQL語句
Statement介面提供了三種執行SQL語句的方法:executeQuery 、executeUpdate 和execute
1.ResultSet executeQuery(String sqlString):執行查詢資料庫的SQL語句 ,返回一個結果集(ResultSet)對象。
2.int executeUpdate(String sqlString):用於執行INSERT、UPDATE或DELETE語句以及SQL DDL語句,如:CREATE TABLE和DROP TABLE等
3.execute(sqlString):用於執行返回多個結果集、多個更新計數或二者組合的語句。
具體實現的代碼:
ResultSet rs = stmt.executeQuery("SELECT * FROM ...") ;
int rows = stmt.executeUpdate("INSERT INTO ...") ;
boolean flag = stmt.execute(String sql) ;
e.處理結果
兩種情況:
1.執行更新返回的是本次操作影響到的記錄數。
2.執行查詢返回的結果是一個ResultSet對象。
• ResultSet包含符合SQL語句中條件的所有行,並且它通過一套get方法提供了對這些行中資料的訪問。
• 使用結果集(ResultSet)對象的存取方法擷取資料:
如上例:
while(rs.next()){
System.out.println(rs.getString("aPassword"));
}
處理結果集還有種方式就是:根據資料庫表列的編號(從左至右,第一列為1)如rs.getString(1)表示擷取對應表中第一列的資料
f.關閉JDBC對象
操作完成以後要把所有使用的JDBC對象全都關閉,以釋放JDBC資源,關閉順序和聲明順序相反:
1.關閉記錄集
if(rs!=null){
rs.close();
}
2.關閉聲明
if(psm==null){
psm.close();
}
3.關閉連線物件
if(con!=null){
con.close();
}
串連資料庫基本結束,裡麵包含的有些基礎方面的知識大家自己回去看看書吧,我這裡還提供一個封裝好了的資料庫連接操作,只需要調用即可
http://www.cnblogs.com/shenliang123/archive/2012/04/19/2456665.html
下次我們將進行資料庫操作的實戰