java连接oracle数据库的各种方法及java在数据库中的含义文档格式.docx
《java连接oracle数据库的各种方法及java在数据库中的含义文档格式.docx》由会员分享,可在线阅读,更多相关《java连接oracle数据库的各种方法及java在数据库中的含义文档格式.docx(7页珍藏版)》请在冰豆网上搜索。
=================================
在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:
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:
oci8[9]:
@RAC"
|
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
@dbhost:
ORA1"
"
//@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.*;
try{
Class.forName("
oracle.jdbc.driver.OracleDriver"
}catch(ClassNotFoundExceptione){
e.printStackTrace();
oci8:
@ORA1"
//oroci9@Service,userid,password
HowdoesoneconnectwiththeJDBCKPRBDriver?
Onecanobtainahandletothedefaultorcurrentconnection(KPRBdriver)bycallingtheOracleDriver.defaultConenction()method.PleasenotethatyoudonotneedtospecifyadatabaseURL,usernameorpasswordasyouarealreadyconnectedtoadatabasesession.Remembernottoclosethedefaultconnection.ClosingthedefaultconnectionmightthrowanexceptioninfuturereleasesofOracle.
Connectionconn=(new
oracle.jdbc.driver.OracleDriver()).defaultConnection();
与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
createorreplacejavasourcenamed"
Hello"
as
publicclassHello{
staticpublicStringMessage(Stringname){
return"
Hello,"
+name;
/
Javacreated.
(2)发布java程序
--Now,publishittoSQL
createorreplacefunctionhello(nameVARCHAR2)returnVARCHAR2
aslanguagejavaname
'
Hello.Message(java.lang.String)returnjava.lang.String'
;
Functioncreated.
(3)使用发布的JAVA程序
--Now,youcanusetheJavaprocedurefromaSQLstatement
selecthello('
world!
)fromdual;
HELLO('
)
---------------
Helloworld!
---hello函数在8i中不支持中文,9i中支持。
如:
你好!
------------------
Hello,你好!
至于其它的例子,大家可以看$ORACLE_HOME/jdbc/demo.zip文件,该文件中有利用JDBCOCI与JDBCTHIN接口的各种例子。