oraclejdbc(oracle jdbc驱动)

本篇文章给大家谈谈oraclejdbc,以及oracle jdbc驱动对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

JDBC连接Oracle数据库之十大技巧

;     java数据库连接(jdbc)api是一系列能够让java编程人员访问数据库的接口,各个开发商的接口并不完全相同。在使用多年的oracle公司的jdbc后,我积累了许多技巧,这些技巧能够配蚂使我们更好地发挥系统的性能和实现更多的功能。

1、在客户端软件开发中使用thin驱动程序

在开发java软件方面,oracle的数据库提供了四种类型的驱动程序,二种用于应用软件、applets、servlets等客户端软件,另外二种用于数据库中的java存储过程等服务器端软件。在客户机端软件的开发中,我们可以选择oci驱动程序或thin驱动程序。oci驱动程序利用java本地化接口(jni),通过oracle客户端软件与数据库进行通讯。thin驱动程序是纯java驱动程序,它直接与数据库进行通讯。为了获得最高的性能,oracle建议在客户端软件的开发中使用oci驱动程序,这似乎是正确的。但我建议使用thin驱动程序,因为通过多次测试发现,在通常情况下,thin驱动程序的性能都超过了oci驱动程序。

2、关闭自动提交功能,提高系统性能

在第一次建立与数据库的连接时,在缺省情况下,连接是在自动提交模式下的。为了获得更好的性能,可以通过培消埋调用带布尔值false参数的connection类的setautocommit()方法关闭自动提交功能,如下所示:

conn.setautocommit(false);

值得注意的是,一旦关闭了自动提交功能,我们就需要通过调用connection类的commit()和rollback()方法来人工的方式对事务进行管理。

3、在动态sql或有时间限制的命令中使用statement对象

在执行sql命令时,我们有二种选择:可以使用preparedstatement对象,也可以使用statement对象。无论多少次地使用同一个sql命令,preparedstatement都只对它解析和编译一次。当使用statement对象时,每次执行一个sql命令时,都会对它进行解析和编译。这可能会使你认为,使用preparedstatement对象比使用statement对象的速度更快。然而,我进行的测试表明,在客户端软件中,情况并非如此。因此,在有时间限制的sql操作中,除非成批地处理sql命令,我们应当考虑使用statement对象。

此外,使用statement对象也使得编写动态sql命令更加简单,因为我们可以将字符串连接在一起,建立一个有效的sql命令。因此,我认为,statement对象可以使动态sql命令的创建和执行变得更加简单。

 4、利用helper函数对动态sql命令进行格式化

在创建使用statement对象执行的动态sql命令时,我们需要处理一些格式化方面的问题。例如,如果我们想创建一个将名字o'reilly插入表中的sql命令,则必须使用二个相连的“''”号替换o'reilly中的“'”号。完成这些工作的最好的方法是创建一个完成替换操作的helper方法,然后在连接字符串心服用公式表达一个sql命令时,使用创建的helper方法。与此类似的是,我们可以让helper方法接受一个date型的值,然后让它输出基于oracle的to_date()函数的字符串表达式。

5、利用preparedstatement对象提高数据库的总体效率

在使用preparedstatement对象执行sql命令时,命令被数据库进行解析和编译,然后被放到命令缓冲区。然后,每当执行同一个preparedstatement对象时,它就会被再解析一次,但不会被再次编译。在缓冲区中可以发现预编译的命令,并且可以重新使用。在有大量用户的企业级应用软件中,经常会重复执行相同的sql命令,使用preparedstatement对象带来的编译次数的减少能够提高数据库的总体性能。如果不是在客户端创建、预备、执行preparedstatement任务需要的时间长于statement任务,我会建议在除动态sql命令之外的所有情况下使用preparedstatement对象桥让。

6、在成批处理重复的插入或更新操作中使用preparedstatement对象

如果成批地处理插入和更新操作,就能够显著地减少它们所需要的时间。oracle提供的statement和 callablestatement并不真正地支持批处理,只有preparedstatement对象才真正地支持批处理。我们可以使用addbatch()和executebatch()方法选择标准的jdbc批处理,或者通过利用preparedstatement对象的setexecutebatch()方法和标准的executeupdate()方法选择速度更快的oracle专有的方法。要使用oracle专有的批处理机制,可以以如下所示的方式调用setexecutebatch():

preparedstatement pstmt3d null;try {((oraclepreparedstatement)pstmt).setexecutebatch(30);...pstmt.executeupdate();}

调用setexecutebatch()时指定的值是一个上限,当达到该值时,就会自动地引发sql命令执行,标准的executeupdate()方法就会被作为批处理送到数据库中。我们可以通过调用preparedstatement类的sendbatch()方法随时传输批处理任务。

7、使用oracle locator方法插入、更新大对象(lob)

oracle的preparedstatement类不完全支持blob和clob等大对象的处理,尤其是thin驱动程序不支持利用preparedstatement对象的setobject()和setbinarystream()方法设置blob的值,也不支持利用setcharacterstream()方法设置clob的值。只有locator本身中的方法才能够从数据库中获取lob类型的值。可以使用preparedstatement对象插入或更新lob,但需要使用locator才能获取lob的值。由于存在这二个问题,因此,我建议使用locator的方法来插入、更新或获取lob的值。

8、使用sql92语法调用存储过程

在调用存储过程时,我们可以使用sql92或oracle pl/sql,由于使用oracle pl/sql并没有什么实际的好处,而且会给以后维护你的应用程序的开发人员带来麻烦,因此,我建议在调用存储过程时使用sql92。

9、使用object sql将对象模式转移到数据库中

既然可以将oracle的数据库作为一种面向对象的数据库来使用,就可以考虑将应用程序中的面向对象模式转到数据库中。目前的方法是创建java bean作为伪装的数据库对象,将它们的属性映射到关系表中,然后在这些bean中添加方法。尽管这样作在java中没有什么问题,但由于操作都是在数据库之外进行的,因此其他访问数据库的应用软件无法利用对象模式。如果利用oracle的面向对象的技术,可以通过创建一个新的数据库对象类型在数据库中模仿其数据和操作,然后使用jpublisher等工具生成自己的java bean类。如果使用这种方式,不但java应用程序可以使用应用软件的对象模式,其他需要共享你的应用中的数据和操作的应用软件也可以使用应用软件中的对象模式。

10、利用sql完成数据库内的操作

我要向大家介绍的最重要的经验是充分利用sql的面向集合的方法来解决数据库处理需求,而不是使用java等过程化的编程语言。

如果编程人员要在一个表中查找许多行,结果中的每个行都会查找其他表中的数据,最后,编程人员创建了独立的update命令来成批地更新第一个表中的数据。与此类似的任务可以通过在set子句中使用多列子查询而在一个update命令中完成。当能够在单一的sql命令中完成任务,何必要让数据在网上流来流去的?我建议用户认真学习如何最大限度地发挥sql的功能

[img]

oracle使用jdbc批量插入数据效率不高

从多个方面进行优化,凳手包括连接的开关次数、事务的开启和提交次数、锁的争用和数据库的优化等。

1、数据库事务过多:每次插入数据时,如果都需要开启一个新的数据库事务,会增加数据库的IO负载,也会导致效率低下。可以考虑在批量插入数据时,将多个插入操作放在一个事务中进行,减少事务的开启和提交次数。

2、数据库锁的争用:在批量插入数据时,多个线程同时对同一个表进行辩滚插入操作,就会出现锁的争用,导致效率低下。可以考虑使用分区表技术,将一个表分成多个分区,每个线程插入不同的分区,从而减少锁的争用。

3、数据库的优化不足:可以考虑对数据库进行优化,如增加缓存、增加索引等,从而携粗余提高批量插入数据的效率。

关于JDBC客户端如何连接ORACLE数据库RAC的负载均衡

这篇文章主要介绍如何使链氏碰用jdbc配置连接数据库(oracle的RAC配置的数据库)达到负载均衡的情况 该例子是以 个NODE的情况说明 希望对大家有所帮助

我的问题是我需要设置oracle x的thin客户端连接到oracle的RAC环境上

注:这样连接可以通过RAC自动平衡负载

原文如下:

Hi Tom

I couldn t find this information easily on the net   So I m submitting it hereand hope you make it available for anyone else looking for this information

My problem was I needed to configure the Oracle x thin driver (type IV) toconnect to an Oracle Real Application Cluster (RAC) environment

For example assuming you have a database called RAC_DB with o nodes node and node

You would need to configure your tnsnames ora with the following information inthe following way:

RAC_DB =  (DESCRIPTION =    (ADDRESS_LIST =      (ADDRESS = (PROTOCOL = TCP)(HOST = node )(PORT = ))      (ADDRESS = (PROTOCOL = TCP)(HOST = node )(PORT = ))      (LOAD_BALANCE = yes)      (FAILOVER = on)    )    (CONNECT_DATA =      (SERVICE_NAME = RAC_DB)      (FAILOVER_MODE = (TYPE = SELECT)   核睁                    (METHOD = BASIC)                      棚谈 (RETRIES = )                       (DELAY = )      )    )  )

Now if you start a SQL*PLUS session then you should see a connection on thenode instance   If you start another SQL*PLUS session then Oracle shouldconnect you to the node instance (automatic load balancing)   It s actuallypretty cool to see the first time

To pass this same information to the Oracle s JDBC thin driver you essentiallyconcatenate a shorten version of the tnsnames information above and pass this tothe driver

String userid = scott ;  String password = tiger ;

String tnsnames_info =    (DESCRIPTION=(ADDRESS_LIST= +    (ADDRESS=(PROTOCOL=TCP)(HOST=node )(PORT= )) +    (ADDRESS=(PROTOCOL=TCP)(HOST=node )(PORT= )) +    (LOAD_BALANCE=yes)(FAILOVER=on)) +    (CONNECT_DATA=(SERVICE_NAME=rac_db))) ;

String url = jdbc:oracle:thin:@ + tnsnames_info;

DriverManager registerDriver(new oracle jdbc OracleDriver());  Connection dbConnection = DriverManager getConnection(url userid password);

That s it   If your application creates multiple connection to the database then you should see these connections load balance across the o instances

One last note Oracle only supports connection to a RAC configuration with the i drivers so you should try to get the latest Oracle JDBC thin driver

HTH Peter

and we said

you made it really hard   you just needed the service!  the load balancing andall could be/should be setup on the listener side!

you have one listener both databases register with it as a service

that would be another option

Reviews

I think we tried that and it didn t work   September Reviewer:  Peter Tran  from Houston TX USA

Hi Tom

I m pretty sure we tried that but it didn t work with the thin driver   Thatapproach will work if you use the OCI driver but not with the thin driver

Please send me an example of what you mean or what files I should configure totest it out

I m always opened to easier options

Thanks Peter

Followup:you need to set up mts and a single listener thats it

pmon on each of the rac instances will tell the listener about the load and awayit goes   you might not see the round robin right off (both are not yetloaded ) so it ll be an unbalanced load balance initially but as the systemramps it ll balance out

Unknown territory   September Reviewer:  Peter Tran  from Houston TX USA

I m sorry but I really lost you with that last remendation   Rather thanfrustrate you with my ignorance can you remend the Oracle documentation thatI should read to brush up on this information?

I ll read this first and e back with questions if I m still lost

For example I don t understand why you want me to setup the database as MTS Why can t I use dedicated server mode?

Thanks for the quick response

Peter

Followup:in order for a single listener to service many instances on differentmachines the listener must be servicing shared server connections thelistener cannot fork/exec a dedicated server since the listener may well notbe running on the machine the instance is on   it needs to know dispatcheraddresses to redirect the client request to

lishixinzhi/Article/program/Oracle/201311/17131

怎样利用JDBC连接并操作Oracle数据库

文件用:ojdbc6.jar

/**

* 一个非常标准的连接Oracle数据库的示例代码

*/

public void testOracle()

{

    Connection con = null;// 创建一个数据库连接

    PreparedStatement pre = null;// 创建预编译语句对象,一般都是用这个而不用Statement

    ResultSet result = null;// 创建一个结果集对象

    try

    {

        Class.forName("oracle.jdbc.driver.OracleDriver");// 加载Oracle驱动程序

        System.out.println("开始尝试连接数据库!");

        String url = "jdbc:oracle:thin:@127.0.0.1:1521:XE";// 127.0.0.1是本机地址,XE是精简版Oracle的默认数据库的SID

  袭升    拍渗老  // 如果是服务名,则用String url = "jdbc:oracle:thin:@127.0.0.1:1521/ORCL

        String user = "system";// 用户名,系统默认的账户名

        String password = "147";// 你安装时选设置的密码

        con = DriverManager.getConnection(url, user, password);// 获取连接

        System.out.println("连接成功!");

        String sql = "select * from student where name=?";// 预编译语句,“?”代表参数

        pre = con.prepareStatement(sql);// 实例化预编译语句

        pre.setString(1, "刘显安");// 设置参数,前面的1表示参数的索引,而不是表中列名的索引

        result = pre.executeQuery();// 执行查询,注意括号中不需要再加参数

        while (result.next())

            // 当结果集不为空时

            System.out.println("学号:" + result.getInt("id") + "姓名:"

                    + result.getString("name"));

    喊棚}

    catch (Exception e)

    {

        e.printStackTrace();

    }

    finally

    {

        try

        {

            // 逐一将上面的几个对象关闭,因为不关闭的话会影响性能、并且占用资源

            // 注意关闭的顺序,最后使用的最先关闭

            if (result != null)

                result.close();

            if (pre != null)

                pre.close();

            if (con != null)

                con.close();

            System.out.println("数据库连接已关闭!");

        }

        catch (Exception e)

        {

            e.printStackTrace();

        }

    }

}

oracle.jdbc.Oracletypes是哪个jar包?

经查看,不管是ojdbc6还是ojdbc7,oracle.jdbc.OracleTypes类都位于ojdbc驱动包的oracle.jdbc目录下态没,以ojdbc7为例:

所以你只需要在项目中引入你需要的ojdbc驱动包即可。

至于驱动版本我们这边一般使用的oracle客户端版绝闭局本为oracle 12c,jdbc驱动包一般使用ojdbc6或者ojdbc7,你想用其他版本也行,这个类的位置应该是不会变的。

我们这边使用的ojdbc6的驱动包为:并让ojdbc6-11.2.0.3.jar;ojdbc7的驱动包为:ojdbc7-12.2.0.1.jar

如何使用JDBC连接oracle数据库

楼主您好

1.在动手先代码之前,我们先把环境配置妥善。先从安装了Oracle的数颤兄据库服务器中,找到

Oracle安装目录,然后将该目录下的jdbc\lib\classes12.jar文件拷贝到WEB发布服务器的某个目录。假设就直接放在C:\根目录下吧,然后把该路径添加到„系统--高级--环境变量‟

中变量名为„CLASSPATH‟的值中,如:

D:\Program Files\SQLLIB\java\db2java.zip;D:\Program

Files\SQLLIB\java\runtime.zip;c:classes12.jar;

也茄丛袭郑碰就是让java能够找到这个包。

2

1.注册加载驱动

驱动名:DRIVER="oracle.jdbc.driver.OracleDriver";

Class.forName("驱动类名");

3

2.获得连接

数据库地址: URL="jdbc:oracle:thin:@127.0.0.1:1521:ORCL";

Connection conn = DriverManager.getConnection(数据库地址,用户名,密码);

System.out.println("连接成功");

4

3.创建Statement对象

Statement

类的主要是用于执行静态 SQL 语句并返回它所生成结果的对象。通过Connection 对象的

createStatement()方法可以创建一个Statement对象。例如:Statement statament =

connection.createStatement(); 具体示例创建Statement对象

Statement statamentMySQL =connectMySQL.createStatement();

关于oraclejdbc和oracle jdbc驱动的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

标签列表