oraclejdbc源碼
Ⅰ oracle jdbc驅動源代碼
可以用JD-GUI反編譯jar
資料庫連接(Connection)
資料庫連接
獲取資料庫連接有兩種方法,一種是通過驅動程序管理器DriverManager類,另一種則是使用DataSource介面。這兩種方法都提供了了一個getConnection方法,用戶可以在程序中對它們進行相應處理後調用這個方法來返回資料庫連接。
• DriverManager類
• DataSource介面
• Connection介面
• JDBC URL
jdbc:<subprotocol>:<subname>
• 驅動程序注冊方法
(1)調用Class.forName方法
(2)設置jdbc.drivers系統屬性
• DriverManager方法
DriverManager類中的所有方法都是靜態方法,所以使用DriverManager類的方法時,不必生成實例。
DriverManager
• getConnection方法
作用是用於獲取資料庫連接,原型如下:
public static Connection getConnection(String url)
throws sqlException;
public static Connection getConnection(String url, String user, String password)
throws SQLException;
public static Connection getConnection(String url, Properties info)
throws SQLException;
• 使用DriverManager的getConnetion方法
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn = DriverManager.getConnection
("jdbc:odbc:sqlserver", "sa", "sa");
• 使用設置jdbc.drivers系統屬性的方法
java -Djdbc.drivers=sun.jdbc.odbc.JdbcOdbcDriver test.java
DataSource 介面
……
//從上下文中查找數據源,並獲取資料庫連接
Context ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("sqlserver");
Connection conn = ds.getConnection();
//查詢資料庫中所有記錄
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM student");
……
Connection 介面
Connection介面代表了已經建立的資料庫連接,它是整個JDBC的核心內容。Connnection介面中的方法按照它們所實現的功能,可以分為三類:
• 生成資料庫語句
• 管理資料庫事務
• 獲取資料庫信息
生成資料庫語句
JDBC將資料庫語句分成三種類型 :
• 生成Statement 語句 :
Connection.createStatement()
• 生成PreparedStatement 語句 :
Connection. prepareStatement()
• 生成CallableStatement 語句 :
Connection. prepareCall ()
管理資料庫事務
• 默認情況下,JDBC將一條資料庫語句視為一個完整的事務。可以關掉默認事務管理:
public void setAutoCommit(Boolean autoCommit) throws SQLException;
將autoCommit的值設置為false,就關掉了自動事務管理模式
• 在執行完事務後,應提交事務:
public void commit() throws SQLException;
• 可以取消事務:
public void rollback() throws SQLException;
第二講 第四部分
資料庫語句
資料庫語句
JDBC資料庫語句共有三種類型:
• Statement:
Statement語句主要用於嵌入一般的SQL語句,包括查詢、更新、插入和刪除等等。
• PreparedStatement:
PreparedStatement語句稱為准備語句,它是將SQL語句中的某些參數暫不指定,而等到執行時在統一指定。
• CallableStatement:
CallableStatement用於執行資料庫的存儲過程。
Statement 語句
• executeQuery方法
• executeUpdate方法
• execute方法
• close方法
executeQuery方法
• executeQuery方法主要用於執行產生單個結果集的SQL查詢語句(QL),即SELECT語句。executeQuery方法的原型如下所示:
• public ResultSet executeQuery(String sql) throws SQLException;
executeUpdate方法
• executeUpdate方法主要用於執行 INSERT、UPDATE、DELETE語句,即SQL的數據操作語句(DML)
• executeUpdate方法也可以執行類似於CREATE TABLE和DROP TABLE語句的SQL數據定義語言(DDL)語句
• executeUpdate方法的返回值是一個整數,指示受影響的行數(即更新計數)。而對於CREATE TABLE 或 DROP TABLE等並不操作特定行的語句,executeUpdate的返回值總為零。
execute方法
execute方法用於執行:
• 返回多個結果集
• 多個更新計數
• 或二者組合的語句
execute方法
• 返回多個結果集:首先要調用getResultSet方法獲得第一個結果集,然後調用適當的getter方法獲取其中的值。要獲得第二個結果集,需要先調用getMoreResults方法,然後再調用getResultSet方法。
• 返回多個更新計數:首先要調用getUpdateCount方法獲得第一更新計數。然後調用getMoreResults,並再次調用getUpdateCount獲得後面的更新計數。
• 不知道返回內容:如果結果是ResultSet對象,則execute方法返回true;如果結果是int類型,則意味著結果是更新計數或執行的語句是DDL命令。
execute方法
為了說明如果處理execute方法返回的結果,下面舉一個代碼例子:
stmt.execute(query);
while (true) {
int row = stmt.getUpdateCount();
//如果是更新計數
if (row > 0) {
System.out.println("更新的行數是:" + row);
stmt.getMoreResults();
continue;
}
execute方法
//如果是DDL命令或0個更新
if (row == 0) {
System.out.println("沒有更新,或SQL語句是一條DDL語句!");
stmt.getMoreResults();
continue;
}
//如果是一個結果集
ResultSet rs = stmt.getResultSet;
if (rs != null) {
while (rs.next()) {
// 處理結果集
. . .
}
stmt.getMoreResults();
continue;
}
break;
}
PreparedStatement 語句
登錄一個網站或BBS時 :
• 使用Statement語句
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery
(「SELECT password FROM userinfo
WHERE id=userId");
• 使用PreparedStatement語句
PreparedStatement pstmt=conn.prepareStatement
(「SELECT password FROM userinfo
WHERE id=?");
pstmt.setString(1, userId);
PreparedStatement語句
• 常用的setter方法
public void setBoolean(int parameterIndex, boolean x) throws SQLException;
public void setByte(int parameterIndex, byte x) throws SQLException;
public void setShort(int parameterIndex, short x) throws SQLException;
public void setInt(int parameterIndex,int x) throws SQLException;
public void setLong(int parameterIndex, long x) throws SQLException;
public void setFloat(int parameterIndex, float x) throws SQLException;
public void setDouble(int parameterIndex, double x) throws SQLException;
public void setBigDecimal(int parameterIndex, BigDecimal x) throws SQLException;
public void setString(int parameterIndex, String x) throws SQLException;
public void setBytes(int parameterIndex, byte[] x) throws SQLException;
public void setDate(int parameterIndex, Date x) throws SQLException;
public void setTime(int parameterIndex, Time x) hrows SQLException;
public void setTimestamp(int parameterIndex, Timestamp x) throws SQLException;
PreparedStatement語句
• PreparedStatement介面是由Statement介面擴展而來的,重寫了executeQuery方法、executeUpdate方法和execute 方法
• public ResultSet executeQuery() throws SQLException
• public int executeUpdate() throws SQLException
• public boolean execute() throws SQLException
CallableStatement語句
• CallableStatement語句是由Connection介面的prepareCall方法創建的,創建時需要傳入字元串參數,參數的形式為:
• {call procere_name[(?, ?, ...)]}
• {? = call procere_name[(?, ?, ...)]}
• {call procere_name}
CallableStatement語句
• 其中的問號是參數佔位符,參數共有兩種:
• IN參數
• OUT參數
• IN參數使用setter方法來設置
• OUT參數則使用registerOutParameter方法來設置
CallableStatement 語句
CallableStatement cstmt = con.prepareCall
("{call getTestData(?, ?)}");
cstmt.registerOutParameter
(1, java.sql.Types.TINYINT);
cstmt.registerOutParameter
(2, java.sql.Types.DECIMAL, 3);
cstmt.executeQuery();
byte x = cstmt.getByte(1);
java.math.BigDecimal n =
cstmt.getBigDecimal(2, 3);
第二講 第五部分
結 果 集
結果集
• JDBC為了方便處理查詢結果,又專門定義了一個介面,這個介面就是ResultSet介面。ResultSet介面提供了可以訪問資料庫查詢結果的方法,通常稱這個介面所指向的對象為結果集。
• 有兩種方法得到結果集,一種是直接執行查詢語句,將結果存儲在結果集對象上;另一種是不存儲返回結果,而在需要時調用資料庫語句的getResultSet方法來返回結果集
結果集
• 結果集指針
由於返回的結果集可能包含多條數據記錄,因此ResultSet 介面提供了對結果集的所有數據記錄輪詢的方法。結果集自動維護了一個指向當前數據記錄的指針,初始時這個指針是指向第一行的前一個位置。 next 方法就是用於向前移動指針的
結果集
• 結果集屬性
默認情況下,結果集是一個不可更新集,並且結果集的指針也只能向前移動。也就是說,在得到了一個結果集之後,用戶只能按照從第一條記錄到最後一條記錄的順序依次向後讀取,而不能跳到任意條記錄上,也不能返回到前面的記錄。不僅如此,結果集的這種輪詢只能進行一次,而不能再將指針重置到初始位置進行多次輪詢
結果集
• 結果集屬性
類型
並發性
有效性
• 屬性的設置是在生成資料庫語句時通過向生成方法傳入相應的參數設定的,而當結果集已經返回時就不能夠再改變它的屬性了。
結果集生成Statement語句共有三種方法
public Statement createStatement() throws SQLException;
public Statement createStatement
(int resultSetType, int resultSetConcurrency)
throws SQLException;
public Statement createStatement
(int resultSetType, int resultSetConcurrency,
int resultSetHoldability)
throws SQLException;
結果集
• 生成PreparedStatement語句共有六種方法
public PreparedStatement prepareStatement(String sql) throws SQLException;
public PreparedStatement prepareStatement(String sql, int autoGeneratedKeys)
throws SQLException;
public PreparedStatement prepareStatement(String sql, int[] columnIndexes)
throws SQLException;
public PreparedStatement prepareStatement(String sql, int resultSetType,
int resultSetConcurrency)
throws SQLException;
public PreparedStatement prepareStatement(String sql, int resultSetType,
int resultSetConcurrency,
int resultSetHoldability)
throws SQLException;
public PreparedStatement prepareStatement(String sql. String[] columnNames)
throws SQLException;
結果集
• 生成CallableStatement語句共有三種方法
public CallableStatement prepareCall(String sql)
throws SQLException;
public CallableStatement prepareCall
(String sql, int resultSetType,
int resultSetConcurrency)
throws SQLException;
public CallableStatement prepareCall
(String sql, int resultSetType,
int resultSetConcurrency,
int resultSetHoldability)
throws SQLException;
結果集
結果集類型
• 結果集的類型共有三種,TYPE_FORWARD_ONLY類型的結果集只能向前移動指針,而TYPE_SCROLL_INSENSITIVE類型和TYPE_SCROLL_SENSITIVE類型的結果集則可以任意移動指針。後兩種類型的區別在於,前者對來自其它處的修改不敏感(靜態),而後者則對於別人的修改敏感(動態視圖)。
結果集
結果集類型
• 對於可以任意移動指針的結果集,可以用來移動指針的方法包括:
• next 和previous :
• absolute 和relative :參數可正可負
• afterLast 、beforeFirst 、last 和first :
結果集
結果集並發性
• 結果集的並發性共有兩種,CONCUR_READ_ONLY的結果集是只讀而不可更新的;而CONCUR_UPDATABLE的結果集則是可以通過update方法進行更新的。
• ResultSet介面提供了一組update方法,用於更新結果集中的數據。這些方法與PreparedStatement介面中定義的setter方法一樣,也是與類型相對應的。所有的update方法都以update開頭 。
• 所有的update方法都有兩個參數,第一個參數用於指定更新的列,它可以是列名稱也可以是列的序號;第二個參數則表示將要更新列的值。
結果集
結果集並發性
• Statement stmt = conn.createStatement
• (ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
• ResultSet rs = stmt.executeQuery("SELECT * FROM student " +
• "WHERE grade=2 AND math>60 AND physics>60 AND " +
• "chemistry>60 AND english>60 AND chinese>60");
• while(rs.next()){
• rs.updateString("grade", "3");
• rs.updateRow();
• }
結果集
結果集有效性
• 結果集的有效性是指在調用了Connection 介面的commit 方法後,結果集是否自動關閉。所以它只有兩個可選值,即HOLD_CURSORS_OVER_COMMIT 和CLOSE_CURSORS_AT_COMMIT 。前者表示調用commit 方法之後,結果集不關閉;而後者則表示關閉結果集。
結果結果集
• 結果集的getter方法
ResultSet介面還提供了一組getter方法,用於返回當前記錄的屬性值。它們都是以get開頭的,後接數據類型。比如,如果要返回一個float類型的列值,則應調用getFloat方法。每一種類型的getter方法都有兩種形式,它們的名稱相同而參數不同。這兩種形式的getter方法都只有一個參數,第一種形式的getter方法參數是String類型的,用於指定列的名稱;另外一種形式的getter方法參數則是int類型的,用於指定列的序號。
Ⅲ 怎麼實現用java訪問oracle資料庫
用JDBC啊,
首先去oracle網站下個java連接oracle的驅動,www.oracle.com/technology/software/tech/java/sqlj_jdbc/htdocs/jdbc9201.html
代碼列子:
import java.sql.*;
public class TestDBOracle {
public static void main(String[] args)
throws ClassNotFoundException, SQLException
{
Class.forName("oracle.jdbc.driver.OracleDriver");
//
// or
// DriverManager.registerDriver
// (new oracle.jdbc.driver.OracleDriver());
String url = "jdbc:oracle:thin:@//server.local:1521/prod";
// jdbc:oracle:thin:@//host:port/service
// or
// String url = "jdbc:oracle:thin:@server.local:1521:prodsid";
// jdbc:oracle:thin:@host:port:SID
Connection conn =
DriverManager.getConnection(url,"scott", "tiger");
conn.setAutoCommit(false);
Statement stmt = conn.createStatement();
ResultSet rset =
stmt.executeQuery("select BANNER from SYS.V_$VERSION");
while (rset.next()) {
System.out.println (rset.getString(1));
}
stmt.close();
System.out.println ("Ok.");
}
}
Ⅳ 求救:jdbc_odbc鏈接oracle資料庫失敗,代碼如下,運行後,顯示:常連接到資料庫。 但沒有抓到資料。
得用ORACLE的JDBC驅動,轉幾篇文章給你,估計能解決問題:
1.新建一個JAVA程序
2.導入要用到的ORACLE JDBC包..(在新建項目的時候,選擇"庫"選項卡-->添加外部JAR..)當然在建立好項目以後點屬性也可以....在你的ORACLE的安裝目錄下找到\jdbc\lib\classes12.zip,引入進來
3.其他的就是編碼.
給你一個例子
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:資料庫名","用戶名","密碼");
15.3 Oracle JDBC驅動程序
本節介紹各種Oracle JDBC驅動程序,它們允許Java程序中的JDBC語句訪問Oracle資料庫。Oracle JDBC驅動程序有4種:
● Thin驅動程序
● OCI驅動程序
● 伺服器端內部驅動程序
● 伺服器端Thin驅動程序
下面各小節分別介紹這些驅動程序。
15.3.1 Thin驅動程序
Thin驅動程序是佔用內存最小的驅動程序,也就是說運行它所需的系統資源最少,它全部是用Java編寫的。如果編寫一個Java applet,應該使用Thin驅動程序。Thin驅動程序還可以用於獨立Java應用程序,並用於訪問所有版本的Oracle資料庫。Thin驅動程序只支持TCP/IP,並要求啟動和運行Oracle Net。關於Oracle Net的詳細信息,可以參閱由Oracle公司出版的Oracle Database Net Services Administrator』s Guide。
注意:
使用Thin驅動程序不需要在客戶計算機上安裝任何軟體,因此它可以用於applet。
15.3.2 OCI驅動程序
OCI驅動程序需要的資源比Thin驅動程序的要多,但是通常具有更好的性能。OCI驅動程序適合部署在中間層(例如,Web伺服器)上的程序。
注意:
OCI驅動程序需要安裝在客戶計算機上,所以不適用於applet。
OCI驅動程序具有許多性能增強的特性,包括資料庫連接池、從資料庫中預取行。OCI驅動程序支持所有版本的資料庫和所有支持的Oracle Net協議。
15.3.3 伺服器端內部驅動程序
伺服器端內部驅動程序提供對資料庫的直接訪問,Oracle JVM使用該驅動程序與資料庫通信。Oracle JVM是一個Java虛擬機(Java Virtual Machine),它與資料庫集成。可以將Java類載入到資料庫中,然後使用Oracle JVM發布並運行該類包含的方法。Java代碼運行在資料庫伺服器上,並可以從單一的Oracle會話訪問數據。
15.3.4 伺服器端Thin驅動程序
伺服器端Thin驅動程序也用於Oracle JVM,提供對遠程資料庫的訪問。和Thin驅動程序一樣,伺服器端Thin驅動程序也完全用Java編寫。使用伺服器端Thin驅動程序的Java代碼可以訪問相同的資料庫伺服器或某個遠程伺服器上的另一個會話。
JDBC Oracle驅動SQL 2009-10-22 20:07:53 閱讀43 評論0 字型大小:大中小 訂閱 .
public static Connection Oracl(){
String sUsr="taotao";
String sPwd="tao5201920";
Connection conn=null;
//載入jdbc-odbc 橋驅動程序
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn=DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.3:1521:orcl",sUsr,sPwd);
conn.setAutoCommit(false);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("連接成功!");
return conn;
}
Oracle與JDBC資料庫 2007-12-08 22:14:23 閱讀22 評論0 字型大小:大中小 訂閱 .
【用JDBC連接Oracle資料庫】
一、軟體需求:
JDK、Orcale Client軟體(帶有Oracle JDBC驅動程序)、Oracle資料庫伺服器、Oracle Net、Oracle9iAS Containers for J2EE(簡稱OC4J)。
只要在一台電腦上安裝了Oracle資料庫伺服器,就一般同時擁有了Orcale Client軟體(帶有Oracle JDBC驅動程序)、Oracle Net、OC4J,資料庫
伺服器、Oracle Net和OC4J可以運行在網路上的任意一台電腦上,而通過JDBC連接資料庫的客戶端程序可以在另外的電腦(安裝了Orcale Client軟
件)上運行。
Orcale Client軟體的安裝目錄下有一個jdbc子目錄,它的內容如下:
·readme.txt,包含Oracle JDBC驅動程序的重要信息。
·doc子目錄中有一個ZIP文件,它包含了Oracle JDBC API參考文檔。
·demo子目錄中有一個ZIP文件,它包含了Oracle提供的示例java程序。
·lib子目錄,有多個ZIP文件和JAR(Java Achive,java歸檔文件),這是Oracle JDBC驅動程序所在的目錄。
二、配置環境變數:
·JAVA_HOME = F:\WebServers\Java\jdk1.5.0 (JDK的安裝目錄,如果要使用Java 2 Enterprise Edition,那麼還要設置J2EE_HOME)。
·ORACLE_HOME = F:\Win2K\Oracle\Ora90 (Oracle的安裝目錄)。
·classpath = .;%JAVA_HOME%\LIB\dt.jar;%JAVA_HOME%\LIB\tools.jar;%ORACLE_HOME%\JDBC\LIB\classes12.zip;%ORACLE_HOME%\JDBC\LIB\nls_charset12.zip;%ORACLE_HOME%\JDBC\LIB\jta.zip;%ORACLE_HOME%\JDBC\LIB\jndi.zip;%ORACLE_HOME%\SQLJ\LIB\translator.zip;%ORACLE_HOME%\SQLJ\LIB\runtime.zip
(如果要使用ava 2 Enterprise Edition,那麼還要設置J2EE_CLASSPATH)。
·path = %path%;%JAVA_HOME%\BIN;%ORACLE_HOME%\BIN
說明:
1、JDK的版本要與Oracle JDBC驅動程序的版本相兼容,一般採用最新版本就沒有問題。
2、環境變數classpath包含的是java類包的位置列表,可以是目錄名,也可以是包含類的ZIP文件或JAR文件。
·如果使用JDK1.2.x或更高版本,則要在classpath中加入classes12.zip(或classes12.jar)。
·如果需要National Language支持,則要在classpath中加入nls_charset12.zip(或nls_charset12.jar)。
·如果需要使用Java Transaction API(JTA),則要在classpath中加入jta.zip(或jta.jar)。
·如果需要使用Java Naming and Directory Interface(JNDI),則要在classpath中加入jndi.zip(或jndi.jar)。
以上的ZIP文件和JAR文件都在%ORACLE_HOME%\JDBC\LIB目錄中,該目錄中還有一些名字與上面的ZIP或JAR文件相似但以11結束的文件,這些是
與java1.1.x相兼容的文件,當系統中使用的JDK是java1.1.x時,就要使用這些文件來代替上面的文件。
3、classpath中一般都加入「.;」,它表示當前程序運行的目錄,也就是指示程序在當前運行目錄中找java類包。
三、一個連接Oracle的示常式序test.java:
import java.sql.*; //這是JDK提供的標准JDBC驅動程序包。但如果要使用Oracle的特性,就需要Oracle的JDBC擴展。
public class test{
public static void main(String args[])
{
Connection conn=null;
Statement sql=null;
/*這一段代碼與下面的一句DriverManager.registerDriver()完成相同的功能,所以推薦下面的一句
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
}catch(ClassNotFoundException e){
//System.out.println("Error code="+e.getErrorCode()); //ClassNotFoundException類沒有這個方法
System.out.println("Error message="+e.getMessage());
}
*/
try{
DriverManager.registerDriver(new oracle.jdbc.OracleDriver());//與上面的代碼段完成相同功能
conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:OEMREP","system","manager"); //連接字元串中的OEMREP是Oracle資料庫常式的SID
sql=conn.createStatement();
ResultSet rs=sql.executeQuery("select user,sysdate from al"); //al表是每一個Oracle資料庫都會有的表,它存儲了Oracle資料庫的內置變數,如user、sysdate等。
if(rs.next())
System.out.println("Hello,"+rs.getString("user")+",the current date and time is "+rs.getTimestamp("sysdate"));
rs.close();
}catch(SQLException E){
System.out.println("Error code = "+E.getErrorCode());
System.out.println("Error message = "+E.getMessage());
}finally{
try{
if(sql!=null) sql.close();
if(conn!=null) conn.close();
}catch(SQLException E){
System.out.println("Error code = "+E.getErrorCode());
System.out.println("Error message = "+E.getMessage());
}
}
}
Ⅳ 怎樣利用JDBC連接並操作Oracle資料庫
文件用:ojdbc6.jar
/**
*一個非常標準的連接Oracle資料庫的示例代碼
*/
publicvoidtestOracle()
{
Connectioncon=null;//創建一個資料庫連接
PreparedStatementpre=null;//創建預編譯語句對象,一般都是用這個而不用Statement
ResultSetresult=null;//創建一個結果集對象
try
{
Class.forName("oracle.jdbc.driver.OracleDriver");//載入Oracle驅動程序
System.out.println("開始嘗試連接資料庫!");
Stringurl="jdbc:oracle:thin:@127.0.0.1:1521:XE";//127.0.0.1是本機地址,XE是精簡版Oracle的默認資料庫的SID
//如果是服務名,則用Stringurl="jdbc:oracle:thin:@127.0.0.1:1521/ORCL
Stringuser="system";//用戶名,系統默認的賬戶名
Stringpassword="147";//你安裝時選設置的密碼
con=DriverManager.getConnection(url,user,password);//獲取連接
System.out.println("連接成功!");
Stringsql="select*fromstudentwherename=?";//預編譯語句,「?」代表參數
pre=con.prepareStatement(sql);//實例化預編譯語句
pre.setString(1,"劉顯安");//設置參數,前面的1表示參數的索引,而不是表中列名的索引
result=pre.executeQuery();//執行查詢,注意括弧中不需要再加參數
while(result.next())
//當結果集不為空時
System.out.println("學號:"+result.getInt("id")+"姓名:"
+result.getString("name"));
}
catch(Exceptione)
{
e.printStackTrace();
}
finally
{
try
{
//逐一將上面的幾個對象關閉,因為不關閉的話會影響性能、並且佔用資源
//注意關閉的順序,最後使用的最先關閉
if(result!=null)
result.close();
if(pre!=null)
pre.close();
if(con!=null)
con.close();
System.out.println("資料庫連接已關閉!");
}
catch(Exceptione)
{
e.printStackTrace();
}
}
}
Ⅵ 如何用Java實現連接Oracle
一個最簡單連接oracle的例子
package oracletest;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class OracleTest {
public static void main(String[] args) {
//String serverName = "localhost";
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
System.out.println("1");
String url = "jdbc:oracle:thin:@localhost:1521:ORA9I";
Connection conn = DriverManager.getConnection(url, "scott", "tiger");
System.out.println("2");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from test1");
while (rs.next()) {
System.out.println(rs.getString("id"));
System.out.println(rs.getString("name"));
}
} catch (SQLException e) {
// TODO 自動生成 catch 塊
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO 自動生成 catch 塊
e.printStackTrace();
}
}
}