摘要:Oracle數據庫對Java提供了很好的支持,詳細介紹了在Windows系統環境下如何配置Oracle自帶的Java開發環境,以及如何通過Java實現對Oracle數據庫進行簡單的查詢和插入操作的方法。
關鍵詞:Oracle;Java;查詢;插入
中圖分類號:TP311文獻標識碼:A 文章編號:1009-3044(2008)25-1373-02
The Simple Apply Of Java in Oracle Database
WANG Fei, BAI Gai-chao
(63655 Unit, Wulumuqi 841700, China)
Abstract: Oracle database provided a good support on Java, described in detail in the Windows operating system environment how to configure Oracle's own Java development environment, and how to use the Java to query and insert in Oracle database.
Key words: Oracle; Java; select; insert
1 引言
自1995年Java 面世以來,Oracle就一直對Java給予了積極的支持。從Oracle8i開始Oracle就將JVM常駐在服務器上,通過使用Java可以完成許多PL/SQL無法完成的任務。下面將詳細介紹在Windows環境下Oracle11g版本中Java的簡單應用。
2 環境配置
要使用Java進行Oracle數據庫的開發需要設置兩個環境變量:PATH和CLASSPATH。
首先,需要將java.exe和javac.exe等可執行文件的路徑加入到PATH環境變量中。此路徑為Oracle主目錄下的\\jdk\\bin,本機Oracle 11g的此路徑為:“D:\\app\\Administrator\\product\\11.1.0\\db_1\\jdk\\bin”(注意環境變量中的各個路徑以分號分開)。添加方法:桌面->我的電腦->右鍵->屬性->高級->環境變量,編輯“系統變量”里面的PATH,添加“D:\\app\\Administrator\\product\\11.1.0\\db_1\\jdk\\bin”到PATH中。
其次,需要將編譯Java代碼時需要應用的類的路徑加入到CLASSPATH環境變量中。為了使用Java對Oracle數據庫進行操作,必須添加進行數據庫連接的Oracle JDBC類到CLASSPATH環境變量中。在Oracle11以前的版本中,此類路徑為Oracle主目錄下的\\jdbc\\lib\\classes12.jar,本機Oracle 11g的路徑為:“D:\\app\\Administrator\\product\\11.1.0\\db_1\\jdbc\\lib\\ojdbc5.jar”。添加方法:我的電腦->右鍵->屬性->高級->環境變量->系統變量,編輯“系統變量”里面的CLASSPATH,添加“D:\\app\\Administrator\\product\\11.1.0\\db_1\\jdbc\\lib\\ojdbc5.jar”到CLASSPATH中。同時還需要將當前的工作路徑加入到CLASSPATH變量中,需要在CLASSPATH后添加“.”,一個點代表當前所在目錄。此處僅添加了必須的路徑,今后可以根據開發的需要將Java的類路徑添加到CLASSPATH路徑中。
3 查詢操作
下面對Oracle數據庫提供的示列模式SCOTT下的EMP表進行查詢操作,詳細代碼如下:
import java.sql.*;
import oracle.jdbc.*;
import oracle.jdbc.driver.*;
public class select{
public static void main(String args[]) throws Exception{
Connection conn=1;
try{
Class.forName(\"oracle.jdbc.driver.OracleDriver\");
conn=DriverManager.getConnection( \"jdbc:oracle:thin:@localhost:1521:ora11\", \"scott\", \"tiger\");//連接Oracle數據庫
Statement stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery(\"select empno,ename,job,hiredate,sal from emp\");
System.out.println(\"empnoenamejobhiredate sal\");
System.out.println(\"---------------------------\");
while(rs.next()){
System.out.println(rs.getInt(\"empno\")+\"\"+rs.getString(\"ename\")+\"\"+rs.getString(3)+\"\"+rs.getString(4)+\"\"+rs.getString(5));}
rs.close();
stmt.close();
}catch(SQLException sqle){
sqle.printStackTrace();
}catch(Exception e){
e.printStackTrace();
}finally{
conn.close();}}}
以上代碼在本機保存為“C:\\Documents and Settings\\Administrator\\java\\select.java”。對以上代碼通過在命令行執行javac命令進行編譯,具體命令如下:
C:\\Documents and Settings\\Administrator\\java>javac select.java
通過編譯后就會在當前工作目錄下產生select.class類文件,在命令行中使用java命令可以執行此類文件,執行情況如下:
C:\\Documents and Settings\\Administrator\\java>java select
empnoenamejobhiredate sal
---------------------------
7369SMITHCLERK1980-12-17 00:00:00.0800
7499ALLENSALESMAN1981-02-20 00:00:00.01600
7521WARDSALESMAN1981-02-22 00:00:00.01250
7566JONESMANAGER1981-04-02 00:00:00.02975
7654MARTINSALESMAN1981-09-28 00:00:00.01250
7698BLAKEMANAGER1981-05-01 00:00:00.02850
7782CLARKMANAGER1981-06-09 00:00:00.02450
7788SCOTTANALYST1987-04-19 00:00:00.03000
7839KINGPRESIDENT1981-11-17 00:00:00.05000
7844TURNERSALESMAN1981-09-08 00:00:00.01500
7876ADAMSCLERK1987-05-23 00:00:00.01100
7900JAMESCLERK1981-12-03 00:00:00.0950
7902FORDANALYST1981-12-03 00:00:00.03000
7934MILLERCLERK1982-01-23 00:00:00.01300
4 插入操作
在執行插入操作前,先在數據庫中建立一個簡單的表,表中只包含一列,列類型為日期類型,數據庫中建表命令如下:
create table t(x date);
然后建立對該表進行插入操作的java代碼,具體代碼如下:
import java.sql.*;
import oracle.jdbc.*;
import oracle.jdbc.pool.OracleDataSource;
public class insert{
public static void main(String args[]) {
Connection conn=1;
try{
OracleDataSource ods = new OracleDataSource();
ods.setURL(\"jdbc:oracle:thin:scott/tiger@localhost:1521:ora11\");/*另一種連接數據庫的方法*/
conn=ods.getConnection();
Statement stmt=conn.createStatement();
int res=stmt.executeUpdate(\"insert into t values(to_date('2008-09-23 13:33:22', 'yyyy-mm-dd hh24:mi:ss'))\");
System.out.println(\"成功完成插入操作!\");
conn.close();
}catch(SQLException sqle){
sqle.printStackTrace();
}catch(Exception e){
e.printStackTrace();}}}
以上代碼在本機保存為“C:\\Documents and Settings\\Administrator\\java\\insert.java”。對以上代碼通過在命令行執行javac命令進行編譯,具體命令如下:
C:\\Documents and Settings\\Administrator\\java>javac insert.java
通過編譯后就會在當前工作目錄下產生insert.class類文件,在命令行中使用java命令可以執行此類文件,執行情況如下:
C:\\Documents and Settings\\Administrator\\java>java insert
成功完成插入操作!
完成以上操作后可以在數據庫中驗證數據是否插入到表中,數據庫中查詢驗證情況如下:
SQL> select * from t;
X
--------------
23-9月-08
5 結束語
以上的Java代碼只是使用了Oracle數據庫提供的JDK,編譯和運行都是在Oracle數據庫的外部進行,除此之外在Oracle數據庫中可以直接進行Java存儲過程的編寫,也可以在外部編寫Java代碼,通過loadjava命令加載到數據庫中在數據庫內部運行。
總之,Oracle數據庫對Java提供了很好的支持。在Java中使用SQLJ進行開發更加方便簡潔,通過使用Java可以很方便完成電子郵件的發送、運行操作系統命令或程序、連接其他非Oracle數據庫運行操作,為Oracle數據庫應用提供了一種很好的方法。
參考文獻:
[1] Bjarki Holm, John Carnell. Oracle 9i Java程序設計[M].北京:清華大學出版社,2002.
[2] Thomas Kyte. Oracle專家高級編程[M].北京:清華大學出版社,2002.
[3] 張孝祥. Java就業培訓教程[M].北京:清華大學出版社,2007.