Java編程中應用JDBC API銜接數據庫和創立法式的辦法。本站提示廣大學習愛好者:(Java編程中應用JDBC API銜接數據庫和創立法式的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是Java編程中應用JDBC API銜接數據庫和創立法式的辦法正文
JDBC銜接數據庫
觸及到樹立一個JDBC銜接的編程是相當簡略的。上面是這些簡略的四個步調:
導入JDBC包:
import 語句告知Java編譯器在哪裡可以找到在代碼中援用,並放置在您的源代碼最開端的類。
應用尺度的JDBC包,它許可選擇,拔出,更新和SQL表中刪除數據,添加以下出口到您的源代碼:
import java.sql.* ; // for standard JDBC programs import java.math.* ; // for BigDecimal and BigInteger support
注冊JDBC驅動法式:
應用它之前,必需注冊你的驅動法式在法式。注冊驅動法式是由Oracle驅動法式的類文件被加載到內存中以便它可以被用作JDBC接口的完成進程。
須要做這個注冊只能在你的法式一次。可以經由過程以下兩種方法之一注冊一個驅動法式。
辦法(I)- Class.forName():
注冊一個驅動法式中最經常使用的辦法是應用Java的Class.forName()辦法來靜態加載驅動法式的類文件到內存中,它會主動將其注冊。這類辦法是可取的,由於它許可使驅動注冊設置裝備擺設,便於攜帶。
上面的示例應用Class.forName()來注冊Oracle驅動法式:
try { Class.forName("oracle.jdbc.driver.OracleDriver"); } catch(ClassNotFoundException ex) { System.out.println("Error: unable to load driver class!"); System.exit(1); }
可使用getInstance()辦法來處理不兼容的JVM,但要編寫了兩個額定的破例情形以下:
try { Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); } catch(ClassNotFoundException ex) { System.out.println("Error: unable to load driver class!"); System.exit(1); catch(IllegalAccessException ex) { System.out.println("Error: access problem while loading!"); System.exit(2); catch(InstantiationException ex) { System.out.println("Error: unable to instantiate driver!"); System.exit(3); }
辦法(二) - DriverManager.registerDriver():
可以用它來注冊一個驅動法式的第二種辦法是應用staticDriverManager.registerDriver()辦法。
應當,假如應用的是不兼容的JDK JVM,好比微軟供給一個應用registerDriver()辦法。
上面的示例應用registerDriver()來注冊Oracle驅動法式:
try { Driver myDriver = new oracle.jdbc.driver.OracleDriver(); DriverManager.registerDriver( myDriver ); } catch(ClassNotFoundException ex) { System.out.println("Error: unable to load driver class!"); System.exit(1); }
數據庫URL制訂:
當加載的驅動法式,可以樹立法式中應用DriverManager.getConnection()辦法的銜接。為便利參考,讓列出了三個重載DriverManager.getConnection()辦法:
在這裡,每一個表單須要一個數據庫URL。數據庫的URL是指向數據庫地址。
制訂一個數據庫URL是年夜多半用在樹立銜接相干。
下表列出了上去風行的JDBC驅動法式名和數據庫的URL。
RDBMS JDBC驅動法式的稱號 URL 格局
MySQL com.mysql.jdbc.Driver jdbc:mysql://hostname/ databaseName ORACLE oracle.jdbc.driver.OracleDriver jdbc:oracle:thin:@hostname:port Number:databaseName DB2 COM.ibm.db2.jdbc.net.DB2Driver jdbc:db2:hostname:port Number/databaseName Sybase com.sybase.jdbc.SybDriver jdbc:sybase:Tds:hostname: port Number/databaseName
以URL格局一切高亮的部門是靜態的,須要轉變只殘剩部門依照數據庫設置。
創立銜接對象: 應用數據庫URL的用戶名和暗碼:
上面三種情勢DriverManager.getConnection()辦法來創立一個銜接對象。getConnection()最經常使用情勢請求傳遞一個數據庫URL,用戶名 username和暗碼 password:
對URL數據庫部門databaseName的值:假定應用的是Oracle的瘦驅動法式,須要指定一個主機:端口。
假定有一台主機TCP/IP地址192.0.0.1 和主機名和Oracle監聽器被設置裝備擺設為在端口1521,數據庫稱號是EMP,然後完全的數據庫URL是:
jdbc:oracle:thin:@amrood:1521:EMP
如今,必需挪用恰當的用戶名和暗碼和getConnection()辦法來取得一個Connection對象,以下所示:
String URL = "jdbc:oracle:thin:@amrood:1521:EMP"; String USER = "username"; String PASS = "password" Connection conn = DriverManager.getConnection(URL, USER, PASS);
只應用一個數據庫URL:
第二種情勢 DriverManager.getConnection()辦法只須要一個數據庫URL:
DriverManager.getConnection(String url);
但是,在這類情形下,數據庫的URL,包含用戶名和暗碼,並具有以下的普通情勢:
jdbc:oracle:driver:username/password@database
所以下面的銜接可以創立以下:
String URL = "jdbc:oracle:thin:username/password@amrood:1521:EMP"; Connection conn = DriverManager.getConnection(URL);
應用數據庫的URL和一個Properties對象:
第三種情勢DriverManager.getConnection()辦法須要一個數據庫URL和一個Properties對象:
DriverManager.getConnection(String url, Properties info);
Properties對象,保留一組症結字 - 值對。它被用來挪用getConnection()辦法時驅動法式屬性傳遞給驅動法式。
為了使經由過程後面的例子中所做的雷同的銜接,應用上面的代碼:
import java.util.*; String URL = "jdbc:oracle:thin:@amrood:1521:EMP"; Properties info = new Properties( ); info.put( "user", "username" ); info.put( "password", "password" ); Connection conn = DriverManager.getConnection(URL, info);
封閉JDBC銜接:
在JDBC法式的停止,它明白請求封閉一切的銜接到數據庫,以停止每一個數據庫會話。然則,假如忘了,Java渣滓搜集器會封閉銜接時,它會消除陳腐的對象。
依托渣滓搜集,特殊是在數據庫編程,長短常差的編程習氣。應當老是在封閉與銜接對象聯系關系的close()辦法銜接的習氣。
為了確保銜接被封閉,可以在代碼中的finally塊履行。 finally塊都邑履行,不論能否產生或也不破例。
要封閉下面翻開的銜接,應當挪用close()辦法,以下所示:
conn.close();
顯式地封閉銜接DBMS勤儉資本。
創立JDBC運用法式:
有以下觸及構建JDBC運用法式的六個步調:
示例代碼:
這個典范的例子可以作為一個模板,在須要樹立JDBC運用法式。
基於對情況和數據庫裝置在後面的章節中做此示例代碼已寫入。
復制上面的例子FirstExample.java,編譯並運轉,以下所示:
//STEP 1. Import required packages import java.sql.*; public class FirstExample { // JDBC driver name and database URL static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; static final String DB_URL = "jdbc:mysql://localhost/EMP"; // Database credentials static final String USER = "username"; static final String PASS = "password"; public static void main(String[] args) { Connection conn = null; Statement stmt = null; try{ //STEP 2: Register JDBC driver Class.forName("com.mysql.jdbc.Driver"); //STEP 3: Open a connection System.out.println("Connecting to database..."); conn = DriverManager.getConnection(DB_URL,USER,PASS); //STEP 4: Execute a query System.out.println("Creating statement..."); stmt = conn.createStatement(); String sql; sql = "SELECT id, first, last, age FROM Employees"; ResultSet rs = stmt.executeQuery(sql); //STEP 5: Extract data from result set while(rs.next()){ //Retrieve by column name int id = rs.getInt("id"); int age = rs.getInt("age"); String first = rs.getString("first"); String last = rs.getString("last"); //Display values System.out.print("ID: " + id); System.out.print(", Age: " + age); System.out.print(", First: " + first); System.out.println(", Last: " + last); } //STEP 6: Clean-up environment rs.close(); stmt.close(); conn.close(); }catch(SQLException se){ //Handle errors for JDBC se.printStackTrace(); }catch(Exception e){ //Handle errors for Class.forName e.printStackTrace(); }finally{ //finally block used to close resources try{ if(stmt!=null) stmt.close(); }catch(SQLException se2){ }// nothing we can do try{ if(conn!=null) conn.close(); }catch(SQLException se){ se.printStackTrace(); }//end finally try }//end try System.out.println("Goodbye!"); }//end main }//end FirstExample
如今來編譯下面的例子以下:
C:>javac FirstExample.java
當運轉FirstExample,它會發生以下成果:
C:>java FirstExample
Connecting to database... Creating statement... ID: 100, Age: 18, First: Zara, Last: Ali ID: 101, Age: 25, First: Mahnaz, Last: Fatma ID: 102, Age: 30, First: Zaid, Last: Khan ID: 103, Age: 28, First: Sumit, Last: Mittal