java连接oracle数据库的各种方法及java在数据库中的含义1.docx
《java连接oracle数据库的各种方法及java在数据库中的含义1.docx》由会员分享,可在线阅读,更多相关《java连接oracle数据库的各种方法及java在数据库中的含义1.docx(7页珍藏版)》请在冰豆网上搜索。
java连接oracle数据库的各种方法及java在数据库中的含义1
java连接oracle数据库的各种方法及java在数据库中的含义
java与oracle的接口:
在数据库中运行JAVA可以说是ORACLE8i的最令人激动的新特性。
在你创建的使用ORACLE8i数据库的应用程序中,你可以使用与JAVA有关的新特征,轻松的将程序发布到INTERNET或INTRANET上。
MethodsforUsingJavainORACLE==================================
大家都知道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程序。
FeaturesofORACLEJDBCDrivers
=================================
在ORACLE8i中有三种类型的JDBC驱动,他们都使用相同的syntax,APIs,andOracleextensions,以使JAVA代码在robustclients、Web-basedJavaapplets,andJavastoredprocedures之间保持轻便灵活:
三种类型如下:
1.JDBC OCI:
此驱动类似于传统的ODBC驱动。
因为它需要OracleCallInterfaceandNet8,所以它需要在运行使用此驱动的JAVA程序的机器上安装客户端软件
2.JDBCThin:
这种驱动一般用在运行在WEB浏览器中的JAVA程序。
它不是通过OCIorNet8,而是通过Javasockets进行通信,因此不需要在使用JDBCThin的客户端机器上安装客户端软件。
3.JDBCKPRB:
这种驱动由直接存储在数据库中的JAVA程序使用,如JavaStoredProcedures、triggers、DatabaseJSP's。
Itusesthedefault/currentdatabasesessionandthusrequiresnoadditionaldatabaseusername,passwordorURL.
如何配置使JAVA可以通过OracleJDBCDrivers连接到数据库:
1.安装SunJDK.
2.修改PATH环境变量,使其指向JDK的bin目录
3.设置CLASSPATH环境变量,使其指向正确的JDK的lib及oracle的JDBC接口。
CLASSPATH=".;?
?
?
?
"
3.运行"java–version",验证java的版本。
如何在不同的操作系统上根据接口类型设置客户端:
对JDBCTHIN接口:
在windows与unix下的设置方法一样:
1.根据jdk的版本,只需要将classesxx.zip拷贝到指定的目录,不需要安装OracleClient。
在装完数据库后,该文件会在$ORACLE_HOME/jdbc/lib目录下。
2.设置CLASSPATH,使其包含上面的classesxx.zip
3.根据需要,拷贝oracle的其它zip文件并设置CLASSPATH
对JDBCOCI接口:
FowWindows:
1.安装OracleClient.
2.根据jdk的版本,设置CLASSPATH,使其包含正确的classesxx.zip
3.根据需要设置CLASSPATH,使其指向Oracle的其它zip文件
4.设置PATH,使其包含$ORACLE_HOME\bin目录
Forunix:
1.安装OracleClient.
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目录下的与OracleJDBCDrives驱动有关的文件的解释:
-classes12.zip
ClassesforusewithJDK1.2.x. ItcontainstheJDBCdriver
classesexceptclassesnecessaryforNLSsupportinObjectand
Collectiontypes.
-nls_charset12.zip
NLSclassesforusewithJDK1.2.x. Itcontainsclassesnecessary
forNLSsupportinObjectandCollectiontypes.
-classes12_g.zip
Sameasclasses12.zip,exceptthatclasseswerecompiledwith
"javac-g".
JDBC连接数据库的语法:
JDBCTHIN:
Connectionconn=
DriverManager.getConnection
("jdbc:
oracle:
thin:
@dlsun511:
1521:
ora1","scott","tiger");
|||
machine(ip@):
port#:
sid
JDBCOCI:
Connectionconn=
DriverManager.getConnection
("jdbc:
oracle:
oci8[9]:
@RAC","scott","tiger");
|
NetService
JDBCTHIN与JDBCTHIN对比:
相同之处:
TheJDBCThin,JDBCOCI,andJDBCServerdriversallprovidethesamefunctionality. Theyallsupportthefollowingstandardsandfeatures:
*JDBC2.0
*PartialJDBC3.0(inJDBCdriverversion9.2)
*thesamesyntaxandAPIs
*thesameOracleextensions
至于不同之处是一个表格,不好上传,大家自己总结吧!
!
主要是JDBCOCI接口比JDBCTHIN接口效率高!
HowdoesoneconnectwiththeJDBCThinDriver?
ThetheJDBCthindriverprovidestheonlywaytoaccessOraclefromtheWeb(applets).ItissmallerandslowerthantheOCIdrivers.importjava.sql.*;
classdbAccess{
publicstaticvoidmain(Stringargs[])throwsSQLException
{
DriverManager.registerDriver(
neworacle.jdbc.driver.OracleDriver()
);
Connectionconn=DriverManager.getConnection
("jdbc:
oracle:
thin:
@dbhost:
1521:
ORA1","scott","tiger");
//@machine:
port:
SID,userid,password
Statementstmt=conn.createStatement();
ResultSetrset=stmt.executeQuery(
"selectBANNERfromSYS.V_$VERSION"
);
while(rset.next())
System.out.println(rset.getString
(1));//Printcol1
stmt.close();
}
}
HowdoesoneconnectwiththeJDBCOCIDriver?
OnemusthaveNet8(SQL*Net)installedandworkingbeforeattemptingtouseoneoftheOCIdrivers.
importjava.sql.*;
classdbAccess{
publicstaticvoidmain(Stringargs[])throwsSQLException
{
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
}catch(ClassNotFoundExceptione){
e.printStackTrace();
}
Connectionconn=DriverManager.getConnection
("jdbc:
oracle:
oci8:
@ORA1","scott","tiger");
//oroci9@Service,userid,password
Statementstmt=conn.createStatement();
ResultSetrset=stmt.executeQuery(
"selectBANNERfromSYS.V_$VERSION"
);
while(rset.next())
System.out.println(rset.getString
(1));//Printcol1
stmt.close();
}
}
HowdoesoneconnectwiththeJDBCKPRBDriver?
Onecanobtainahandletothedefaultorcurrentconnection(KPRBdriver)bycallingtheOracleDriver.defaultConenction()method.PleasenotethatyoudonotneedtospecifyadatabaseURL,usernameorpasswordasyouarealreadyconnectedtoadatabasesession.Remembernottoclosethedefaultconnection.ClosingthedefaultconnectionmightthrowanexceptioninfuturereleasesofOracle.
importjava.sql.*;
classdbAccess{
publicstaticvoidmain(Stringargs[])throwsSQLException
{
Connectionconn=(new
oracle.jdbc.driver.OracleDriver()).defaultConnection();
Statementstmt=conn.createStatement();
ResultSetrset=stmt.executeQuery(
"selectBANNERfromSYS.V_$VERSION"
);
while(rset.next())
System.out.println(rset.getString
(1));//Printcol1
stmt.close();
}
}
与JAVA有关的初始化参数:
======================================
Executinginitjvm.sqlalsohighlightssomenewinitsid.oraparametersthatareusedtosupportJavainyourOracle8idatabase.Theseparameters,theirdescriptions,andthesettingsrequiredforrunninginitjvm.sql,areallshowninthefollowinglist:
?
SHARED_POOL_SIZE?
Definesthesizeofyoursharedpoolinbytes.Thisshouldbesettoatleast50MBtoruninitjvm.sql.
?
JAVA_POOL_SIZE?
DefinesthesizeoftheJavapool,anewareaoftheSGA inOracle8iusedtostoresharedJavaobjects.Thisshouldbesetto50MBwhenrunninginitjvm.sql,butcanbeaslowas20MBfornormaluse
ofJavastoredprocedures.
?
JAVA_SOFT_SESSIONSPACE_LIMIT?
IdentifiesasoftlimitonmemoryusedbyJavainasession.Thedefaultis1MB.Ifthislimitisexceeded,awarningiswrittentotheALERTlog.
?
JAVA_MAX_SESSIONSPACE_SIZE?
IdentifiesthemaximumamountofmemorythatcanbeusedbyaJavaprocedure;thedefaultis4GB.Whenthelimitsetbythisparameterisexceeded,theexecutingJavaprocedureiskilledbyOracle8iautomatically.
如果将JAVA程序存放在数据库中,并运行存储在数据库中的JAVA程序,则数据库中会启用JAVA的虚拟机,为了保证JAVA虚拟机有效的运行,你需要设置上面介绍的参数。
如何将一个JAVA程序装载到数据库并且发布出去?
===================================
就像前面说得,java程序或类可以被存储到数据库中,作为PL/SQL的替换或补充。
Java可以被用来作为数据库的触发器、存储过程、函数、对象的成员函数。
在按照下面的过程开发完java存储过程后,就可以从SQL或PL/SQL中调用JAVA存储过程,就像调用普通的PL/SQL过程一样。
下面的代码描述了如何在SQL*PLUS中开发和使用一个输出"Hello,World"的JAVA程序的例子:
1.WritetheJavaprogramusingaJavadevelopmentenvironmentlikeJdeveloperorJBuilder.
2.LoadtheJavaprogramintoOracle8iusingeitherthecreateorreplace
javasourcecommand,orwiththeLOADJAVAutility.
3.PublishyourJavaproceduretoSQL.ThisstepidentifiesyourJava
proceduretoSQLandPL/SQLbyexposingtheprocedureentrypoint,
mappingdatatypesinJavatoPL/SQLorSQL,andindicating
parameter-passingbetweenJavaandPL/SQLorSQL.
(1)编写java程序
---可以直接在SQL*PLUS中创建JAVA的源文件,当然如果有已经编译好的javaclass,则可以直接跳过这一步,直接到将java程序发布出去这一步
SQL>--first,createtheJavasourcecode
SQL>createorreplacejavasourcenamed"Hello"as
publicclassHello{
staticpublicStringMessage(Stringname){
return"Hello,"+name;
}
}
/
Javacreated.
(2)发布java程序
SQL>--Now,publishittoSQL
SQL>createorreplacefunctionhello(nameVARCHAR2)returnVARCHAR2
aslanguagejavaname
'Hello.Message(java.lang.String)returnjava.lang.String';
Functioncreated.
(3)使用发布的JAVA程序
SQL>--Now,youcanusetheJavaprocedurefromaSQLstatement
SQL>selecthello('world!
')fromdual;
HELLO('world!
')
---------------
Helloworld!
---hello函数在8i中不支持中文,9i中支持。
如:
SQL>selecthello('你好!
')fromdual;
HELLO('你好!
')
------------------
Hello,你好!
至于其它的例子,大家可以看$ORACLE_HOME/jdbc/demo.zip文件,该文件中有利用JDBCOCI与JDBCTHIN接口的各种例子。