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