java和oracle的接口:
在数据库中运行JAVA能说是 ORACLE8i的最令人激动的新特性。在你创建的使用ORACLE8i 数据库的应用程式中,你能使用和JAVA有关的新特征,轻松的将程式发布到INTERNET或INTRANET上。
Methods for Using Java in ORACLE
大家都知道JAVA在跨平台研发和INTERNET研发中已比较流 行,ORACLE8i及以后的版本中都包含了对在数据库中运行JAVA的扩展支持,这里有两种方法能使用:
JDBC:和ODBC 类似, JDBC 提供了一个驱动接口使你能在JAVA程式中访问数据库。注:JDBC驱动内嵌在数据库中虚拟机中。
SQLJ: 是个JAVA预编译器,他能将内嵌的SQL语句转化为JAVA语句.SQLJ的使用和运行机理和其他ORACLE的和编译器(如 Pro*C,Pro*COBOL)类似。实际上,为了使我们形象的记住SQLJ提供的功能,我们也能直接将SQLJ改名为Pro*Java。
将JAVA集成到数据库中是双向的。也就是说你能在JAVA中调用SQL和PL/SQL,也能在SQL和PL/SQL中调用JAVA。JAVA程式能直 接通过JDBC驱动调用SQL和PL/SQL,反过来,你也能在SQL和PL/SQL中直接调用JAVA。在数据库中,JAVA命名空间直接映射到数据库 模式的命名空间中,这样能方便JAVA的存取和调用。数据库同时提供扩展的DDL语句,通过这些语句,你能象创建一个存储过程相同在数据中创建内嵌的 JAVA程式。
Features of ORACLE JDBC Drivers
在 ORACLE8i中有三种类型的JDBC驱动,他们都使用相同的 syntax, APIs, and Oracle extensions,以使JAVA代码在robust clients、Web-based Java applets, and Java stored procedures之间保持轻便灵活:三种类型如下:
1.JDBC OCI: 此驱动类似于传统的ODBC 驱动。因为他需要Oracle Call Interface and Net8,所以他需要在运行使用此驱动的JAVA程式的机器上安装客户端软件
2.JDBC Thin: 这种驱动一般用在运行在WEB浏览器中的JAVA程式。他不是通过OCI or Net8,而是通过Java sockets进行通信 ,因此不必在使用JDBC Thin的客户端机器上安装客户端软件。
3.JDBC KPRB: 这种驱动由直接存储在数据库中的JAVA程式使用,如Java Stored Procedures 、triggers、Database JSP’s。It uses the default/ current database session and thus requires no additional database username, password or URL.
怎么设置使JAVA能通过 Oracle JDBC Drivers连接到数据库:1.安装Sun JDK.
2. 修改PATH环境变量,使其指向JDK的bin目录
3. 设置CLASSPATH环境变量,使其指向正确的JDK的lib及oracle的JDBC接口。
CLASSPATH = ".;????"
3. 运行"java ?version" ,验证java的版本。
怎么在不同的操作系统上根据 接口类型设置客户端:
对JDBC THIN接口:
在windows和unix下的设置方法相同:
1.根据jdk的版 本,只需要将classesxx.zip拷贝到指定的目录,不必安装Oracle Client。在装完数据库后,该文件会在$ORACLE_HOME/jdbc/lib目录下。2.设置CLASSPATH,使其包含上面的 classesxx.zip
3.根据需要,拷贝oracle的其他zip文件并设置CLASSPATH
对JDBC OCI接口:
Fow 视窗系统:
1.安装Oracle Client.
2.根据jdk的版本,设置 CLASSPATH,使其包含正确的classesxx.zip
3.根据需要设置CLASSPATH,使其指向Oracle的其他zip文件
4.设置PATH,使其包含$ORACLE_HOME\bin目录
For unix:
1.安装 Oracle Client.
2.根据jdk的版本,设置CLASSPATH,使其包含正确的classesxx.zip
3.根 据需要设置CLASSPATH,使其指向Oracle的其他zip文件
4.设置LD_LIBRARY_PATH,使其包 含$ORACLE_HOME/lib目录
备注:
classesxx.zip一般在 ORACLE_HOME\jdbc\lib目录下。
在ORACLE_HOME\jdbc\lib目录下的和Oracle JDBC Drives驱动有关的文件的解释:
- classes12.zip
Classes for use with JDK 1.2.x. It contains the JDBC driver
classes except classes necessary for NLS support in Object and
Collection types.
- nls_charset12.zip
NLS classes for use with JDK 1.2.x. It contains classes necessary
for NLS support in Object and Collection types.
- classes12_g.zip
Same as classes12.zip, except that classes were compiled with
"javac -g".
JDBC连接数据库的语法:
JDBC THIN:
Connection conn=
DriverManager.getConnection
("jdbc:oracle:thin:@dlsun511:1521:ora1","scott","tiger");
| | |
machine(ip@) : port# : sid
JDBC OCI:
Connection conn=
DriverManager.getConnection
("jdbc:oracle:oci8[9]:@RAC","scott","tiger");
|
Net Service
JDBC THIN和JDBC THIN对比:
相同 之处:
The JDBC Thin, JDBC OCI, and JDBC Server drivers all provide the same functionality. They all support the following standards and features:
* JDBC 2.0
* Partial JDBC 3.0 (in JDBC driver version 9.2)
* the same syntax and APIs
* the same Oracle extensions
主要是JDBC OCI 接口比JDBC THIN接口效率高!
How does one connect with the JDBC Thin Driver?
The the JDBC thin driver provides the only way to access Oracle from the Web (applets). It is smaller and slower than the OCI drivers.
import java.sql.*;
class dbAccess {
public static void main (String args []) throws SQLException
{
DriverManager.registerDriver (
new oracle.jdbc.driver.OracleDriver()
);
Connection conn = DriverManager.getConnection
("jdbc:oracle:thin:@dbhost:1521:ORA1", "scott", "tiger");
// @machine:port:SID, userid, password
Statement stmt = conn.createStatement();
ResultSet rset = stmt.executeQuery (
"select BANNER from SYS.V_$VERSION"
);
while (rset.next())
System.out.println (rset.getString(1)); // Print col 1
stmt.close();
}
}
How does one connect with the JDBC OCI Driver?
One must have Net8 (SQL*Net) installed and working before attempting to use one of the OCI drivers.
import java.sql.*;
class dbAccess {
public static void main (String args []) throws SQLException
{
try {
Class.forName ("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Connection conn = DriverManager.getConnection
("jdbc:oracle:oci8:@ORA1", "scott", "tiger");
// or oci9 @Service, userid, password
Statement stmt = conn.createStatement();
ResultSet rset = stmt.executeQuery (
"select BANNER from SYS.V_$VERSION"
);
while (rset.next())
System.out.println (rset.getString(1)); // Print col 1
stmt.close();
}
}
How does one connect with the JDBC KPRB Driver?
One can obtain a handle to the default or current connection (KPRB driver) by calling the OracleDriver.defaultConenction() method. Please note that you do not need to specify a database URL, username or password as you are already connected to a database session. Remember not to close the default connection. Closing the default connection might throw an exception in future releases of Oracle.
import java.sql.*;
class dbAccess {
public static void main (String args []) throws SQLException
{
Connection conn = (new
oracle.jdbc.driver.OracleDriver()).defaultConnection();
Statement stmt = conn.createStatement();
ResultSet rset = stmt.executeQuery (
"select BANNER from SYS.V_$VERSION"
);
建立和分析java程序和oracle数据库交互的两种方法
第一种应该是比较古老的方法了。
Windows下采用JDBC-ODBC Bridge连接oracle数据库
1、 安装oracle客户端程序,在tnsnames.ora中配置好相应的数据库连接串文件,此处设连接串名为“dbora”。
2、 在windows的控制面板->“数据库源ODBC”中,建立相应的用户或者系统DSN,具体方法:在安装的数据源的驱动程序选择 “Microsoft ODBC for Oracle”。
点击“完成”,在弹出的对话框中,填入如下信息:
数据源名称:dbjdbc
描述:jdbc数据源
用户名称:manager -此为数据库用户名
服务器:dbora -此即为连接串名
其中“dbjdbc”是在java程序中要引用的名字,至此数据源dbjdbc已建立。
3、 建立如下的java程序
// 使用本地的jdbc连接串,查询oracle数据库表
import java.sql.*;
public class lookup {
public static void main(String[] args)
throws SQLException, ClassNotFoundException {
//定义了数据库连接串
String dbUrl = "jdbc:odbc:dbjdbc";
//数据库的用户名
String user = "manager";
//数据库的用户口令
String password = "ora912";
// 加载jdbc-odbc bridge驱动程序
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
// 与url指定的数据源建立连接
Connection c = DriverManager.getConnection(dbUrl, user, password);
//采用Statement进行查询
Statement s = c.createStatement();
ResultSet r = s.executeQuery("SELECT empno,name from emp");
while(r.next()) {
// 打印字段信息
System.out.println(r.getString("empno") + ",
" + r.getString("name ") );
}
// 关闭Statement,其上的ResultSet也将关闭
s.close();
}
}
在jdbc中查询的语句有3类:Statement、PreparedStatement、CallableStatement。
jdbc的thin方式
此种方法不需要安装Oracle的客户端,也不需要配置odbc,故此种方法用得比较普遍。
此方法在使用时需要将oracle的jar包加到classpath变量中,此包可以在oralce客户端程序 的$ORACLE_HOME/jdbc/lib/classes12.jar找到。
import java.sql.*;
public class jdbcthin {
//dbUrl数据库连接串信息,其中“1521”为端口,“ora9”为sid
String dbUrl = "jdbc:oracle:thin:@10.10.20.15:1521:ora9";
//theUser为数据库用户名
String theUser = "sman";
//thePw为数据库密码
String thePw = "sman";
//几个数据库变量
Connection c = null;
Statement conn;
ResultSet rs = null;
//初始化连接
public jdbcthin() {
try {
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
//与url指定的数据源建立连接
c = DriverManager.getConnection(dbUrl, theUser, thePw);
//采用Statement进行查询
conn = c.createStatement();
} catch (Exception e) {
e.printStackTrace();
}
}
//执行查询
public ResultSet executeQuery(String sql) {
rs = null;
try {
rs = conn.executeQuery(sql);
} catch (SQLException e) {
e.printStackTrace();
}
return rs;
}
public void close() {
try {
conn.close();
c.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
ResultSet newrs;
jdbcthin newjdbc = new jdbcthin();
newrs = newjdbc.executeQuery("select * from eventtype");
try {
while (newrs.next()) {
System.out.print(newrs.getString("event_type"));
System.out.println(":"+newrs.getString("content"));
}
} catch (Exception e) {
e.printStackTrace();
}
newjdbc.close();
}
}
在数据库中运行JAVA能说是 ORACLE8i的最令人激动的新特性。在你创建的使用ORACLE8i 数据库的应用程式中,你能使用和JAVA有关的新特征,轻松的将程式发布到INTERNET或INTRANET上。
Methods for Using Java in ORACLE
大家都知道JAVA在跨平台研发和INTERNET研发中已比较流 行,ORACLE8i及以后的版本中都包含了对在数据库中运行JAVA的扩展支持,这里有两种方法能使用:
JDBC:和ODBC 类似, JDBC 提供了一个驱动接口使你能在JAVA程式中访问数据库。注:JDBC驱动内嵌在数据库中虚拟机中。
SQLJ: 是个JAVA预编译器,他能将内嵌的SQL语句转化为JAVA语句.SQLJ的使用和运行机理和其他ORACLE的和编译器(如 Pro*C,Pro*COBOL)类似。实际上,为了使我们形象的记住SQLJ提供的功能,我们也能直接将SQLJ改名为Pro*Java。
将JAVA集成到数据库中是双向的。也就是说你能在JAVA中调用SQL和PL/SQL,也能在SQL和PL/SQL中调用JAVA。JAVA程式能直 接通过JDBC驱动调用SQL和PL/SQL,反过来,你也能在SQL和PL/SQL中直接调用JAVA。在数据库中,JAVA命名空间直接映射到数据库 模式的命名空间中,这样能方便JAVA的存取和调用。数据库同时提供扩展的DDL语句,通过这些语句,你能象创建一个存储过程相同在数据中创建内嵌的 JAVA程式。
Features of ORACLE JDBC Drivers
在 ORACLE8i中有三种类型的JDBC驱动,他们都使用相同的 syntax, APIs, and Oracle extensions,以使JAVA代码在robust clients、Web-based Java applets, and Java stored procedures之间保持轻便灵活:三种类型如下:
1.JDBC OCI: 此驱动类似于传统的ODBC 驱动。因为他需要Oracle Call Interface and Net8,所以他需要在运行使用此驱动的JAVA程式的机器上安装客户端软件
2.JDBC Thin: 这种驱动一般用在运行在WEB浏览器中的JAVA程式。他不是通过OCI or Net8,而是通过Java sockets进行通信 ,因此不必在使用JDBC Thin的客户端机器上安装客户端软件。
3.JDBC KPRB: 这种驱动由直接存储在数据库中的JAVA程式使用,如Java Stored Procedures 、triggers、Database JSP’s。It uses the default/ current database session and thus requires no additional database username, password or URL.
怎么设置使JAVA能通过 Oracle JDBC Drivers连接到数据库:1.安装Sun JDK.
2. 修改PATH环境变量,使其指向JDK的bin目录
3. 设置CLASSPATH环境变量,使其指向正确的JDK的lib及oracle的JDBC接口。
CLASSPATH = ".;????"
3. 运行"java ?version" ,验证java的版本。
怎么在不同的操作系统上根据 接口类型设置客户端:
对JDBC THIN接口:
在windows和unix下的设置方法相同:
1.根据jdk的版 本,只需要将classesxx.zip拷贝到指定的目录,不必安装Oracle Client。在装完数据库后,该文件会在$ORACLE_HOME/jdbc/lib目录下。2.设置CLASSPATH,使其包含上面的 classesxx.zip
3.根据需要,拷贝oracle的其他zip文件并设置CLASSPATH
对JDBC OCI接口:
Fow 视窗系统:
1.安装Oracle Client.
2.根据jdk的版本,设置 CLASSPATH,使其包含正确的classesxx.zip
3.根据需要设置CLASSPATH,使其指向Oracle的其他zip文件
4.设置PATH,使其包含$ORACLE_HOME\bin目录
For unix:
1.安装 Oracle Client.
2.根据jdk的版本,设置CLASSPATH,使其包含正确的classesxx.zip
3.根 据需要设置CLASSPATH,使其指向Oracle的其他zip文件
4.设置LD_LIBRARY_PATH,使其包 含$ORACLE_HOME/lib目录
备注:
classesxx.zip一般在 ORACLE_HOME\jdbc\lib目录下。
在ORACLE_HOME\jdbc\lib目录下的和Oracle JDBC Drives驱动有关的文件的解释:
- classes12.zip
Classes for use with JDK 1.2.x. It contains the JDBC driver
classes except classes necessary for NLS support in Object and
Collection types.
- nls_charset12.zip
NLS classes for use with JDK 1.2.x. It contains classes necessary
for NLS support in Object and Collection types.
- classes12_g.zip
Same as classes12.zip, except that classes were compiled with
"javac -g".
JDBC连接数据库的语法:
JDBC THIN:
Connection conn=
DriverManager.getConnection
("jdbc:oracle:thin:@dlsun511:1521:ora1","scott","tiger");
| | |
machine(ip@) : port# : sid
JDBC OCI:
Connection conn=
DriverManager.getConnection
("jdbc:oracle:oci8[9]:@RAC","scott","tiger");
|
Net Service
JDBC THIN和JDBC THIN对比:
相同 之处:
The JDBC Thin, JDBC OCI, and JDBC Server drivers all provide the same functionality. They all support the following standards and features:
* JDBC 2.0
* Partial JDBC 3.0 (in JDBC driver version 9.2)
* the same syntax and APIs
* the same Oracle extensions
主要是JDBC OCI 接口比JDBC THIN接口效率高!
How does one connect with the JDBC Thin Driver?
The the JDBC thin driver provides the only way to access Oracle from the Web (applets). It is smaller and slower than the OCI drivers.
import java.sql.*;
class dbAccess {
public static void main (String args []) throws SQLException
{
DriverManager.registerDriver (
new oracle.jdbc.driver.OracleDriver()
);
Connection conn = DriverManager.getConnection
("jdbc:oracle:thin:@dbhost:1521:ORA1", "scott", "tiger");
// @machine:port:SID, userid, password
Statement stmt = conn.createStatement();
ResultSet rset = stmt.executeQuery (
"select BANNER from SYS.V_$VERSION"
);
while (rset.next())
System.out.println (rset.getString(1)); // Print col 1
stmt.close();
}
}
How does one connect with the JDBC OCI Driver?
One must have Net8 (SQL*Net) installed and working before attempting to use one of the OCI drivers.
import java.sql.*;
class dbAccess {
public static void main (String args []) throws SQLException
{
try {
Class.forName ("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Connection conn = DriverManager.getConnection
("jdbc:oracle:oci8:@ORA1", "scott", "tiger");
// or oci9 @Service, userid, password
Statement stmt = conn.createStatement();
ResultSet rset = stmt.executeQuery (
"select BANNER from SYS.V_$VERSION"
);
while (rset.next())
System.out.println (rset.getString(1)); // Print col 1
stmt.close();
}
}
How does one connect with the JDBC KPRB Driver?
One can obtain a handle to the default or current connection (KPRB driver) by calling the OracleDriver.defaultConenction() method. Please note that you do not need to specify a database URL, username or password as you are already connected to a database session. Remember not to close the default connection. Closing the default connection might throw an exception in future releases of Oracle.
import java.sql.*;
class dbAccess {
public static void main (String args []) throws SQLException
{
Connection conn = (new
oracle.jdbc.driver.OracleDriver()).defaultConnection();
Statement stmt = conn.createStatement();
ResultSet rset = stmt.executeQuery (
"select BANNER from SYS.V_$VERSION"
);
建立和分析java程序和oracle数据库交互的两种方法
第一种应该是比较古老的方法了。
Windows下采用JDBC-ODBC Bridge连接oracle数据库
1、 安装oracle客户端程序,在tnsnames.ora中配置好相应的数据库连接串文件,此处设连接串名为“dbora”。
2、 在windows的控制面板->“数据库源ODBC”中,建立相应的用户或者系统DSN,具体方法:在安装的数据源的驱动程序选择 “Microsoft ODBC for Oracle”。
点击“完成”,在弹出的对话框中,填入如下信息:
数据源名称:dbjdbc
描述:jdbc数据源
用户名称:manager -此为数据库用户名
服务器:dbora -此即为连接串名
其中“dbjdbc”是在java程序中要引用的名字,至此数据源dbjdbc已建立。
3、 建立如下的java程序
// 使用本地的jdbc连接串,查询oracle数据库表
import java.sql.*;
public class lookup {
public static void main(String[] args)
throws SQLException, ClassNotFoundException {
//定义了数据库连接串
String dbUrl = "jdbc:odbc:dbjdbc";
//数据库的用户名
String user = "manager";
//数据库的用户口令
String password = "ora912";
// 加载jdbc-odbc bridge驱动程序
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
// 与url指定的数据源建立连接
Connection c = DriverManager.getConnection(dbUrl, user, password);
//采用Statement进行查询
Statement s = c.createStatement();
ResultSet r = s.executeQuery("SELECT empno,name from emp");
while(r.next()) {
// 打印字段信息
System.out.println(r.getString("empno") + ",
" + r.getString("name ") );
}
// 关闭Statement,其上的ResultSet也将关闭
s.close();
}
}
在jdbc中查询的语句有3类:Statement、PreparedStatement、CallableStatement。
jdbc的thin方式
此种方法不需要安装Oracle的客户端,也不需要配置odbc,故此种方法用得比较普遍。
此方法在使用时需要将oracle的jar包加到classpath变量中,此包可以在oralce客户端程序 的$ORACLE_HOME/jdbc/lib/classes12.jar找到。
import java.sql.*;
public class jdbcthin {
//dbUrl数据库连接串信息,其中“1521”为端口,“ora9”为sid
String dbUrl = "jdbc:oracle:thin:@10.10.20.15:1521:ora9";
//theUser为数据库用户名
String theUser = "sman";
//thePw为数据库密码
String thePw = "sman";
//几个数据库变量
Connection c = null;
Statement conn;
ResultSet rs = null;
//初始化连接
public jdbcthin() {
try {
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
//与url指定的数据源建立连接
c = DriverManager.getConnection(dbUrl, theUser, thePw);
//采用Statement进行查询
conn = c.createStatement();
} catch (Exception e) {
e.printStackTrace();
}
}
//执行查询
public ResultSet executeQuery(String sql) {
rs = null;
try {
rs = conn.executeQuery(sql);
} catch (SQLException e) {
e.printStackTrace();
}
return rs;
}
public void close() {
try {
conn.close();
c.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
ResultSet newrs;
jdbcthin newjdbc = new jdbcthin();
newrs = newjdbc.executeQuery("select * from eventtype");
try {
while (newrs.next()) {
System.out.print(newrs.getString("event_type"));
System.out.println(":"+newrs.getString("content"));
}
} catch (Exception e) {
e.printStackTrace();
}
newjdbc.close();
}
}