Java JDBC for Oracle注意事项两三点

  Java JDBC for Oracle注意事项两三点

        近日在进行数据库数据的导入工作,由于导入逻辑相对复杂,最后还是决定放弃SQL/Procedure,改用程序完成。其实,相信大家对Java JDBC连接已经非常熟悉了,只需要几行语句就可以完成连接,代码如下:

       Class.forName("oracle.jdbc.driver.OracleDriver");
       String url = "jdbc:oracle:thin:@连接地址";
       String userName = "用户名";
       String password = "密码";
       Connection conn = DriverManager.getConnection(url, userName, password);
       Statement smt = conn.createStatement();
       Statement smta = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, 
                            ResultSet.CONCUR_READ_ONLY);
        查看Statement  createStatement(int resultSetType,   int resultSetConcurrency)中有两个参数,我们第一个要注意的是Statement中的连接方式,也就是resultSetType参数的作用。默认的连接方式是ResultSet.TYPE_FORWARD_ONLY方式,也就是说这种方式仅仅允许结果集的游标向下滚动,查询结果集中数据。如果我们需要重复遍历结果集,这种方式就不行了。另外两种模式:

        1)ResultSet.TYPE_SCROLL_INSENSITIVE 结果集游标可上下移动,当数据库变化,当前结果集不变。
        2)ResultSet.TYPE_SCROLL_SENSITIVE返回可滚动的结果集,当数据库变化时,当前结果集同步改变。

        createStatement方法的另一个参数,resultSetConcurrency则规定了Statement的同步方式,ResultSet.CONCUR_READ_ONLY 不能用结果集更新数据库中的表。ResultSet.CONCUR_UPDATETABLE能用结果集更新数据库中的表。
        第二个我们需要注意的地方,当我们进行数据的操作时(增删改查),开发人员往往习惯于写这样的SQL语句:select *from TableA; 注意这个“;”,在Statement语句中不应该出现,否则会抛出异常:java.sql.SQLException:ORA-00911: invalid character。
        第三个,是一个标准Java的小地方,在数据导入中,我们常常将一个字段的字符串用分隔符连接起来,但是导入时需要拆分。例如:A/B/C/。大家可以看看如下三段代码,结果已经用注释标注了:

       String a = " A/B/C/";  
       String[] arr = null;
       arr = a.split("/");
       System.out.println("arr lenght = "+arr.length);  //3
       a = " A/B/C"; 
       arr = a.split("/");
       System.out.println("arr lenght = "+arr.length);  //3
       a = " A"; 
       arr = a.split("/");
       System.out.println("arr lenght = "+arr.length);  //1
        从这三段代码,我们可以看出,不管需要被分割的字符串是否包含被分隔符,以及被一否以被分隔符结尾,都不影响我们预期的“分割”结果。

Oracle官方11g 最新版jdbc驱动。 新特性:   1、支持JDK6,支持JDBC 4.0,新的java.sql.SQLXML类型没有被支持,是使用ojdbc6.jar来支持。J2SE 5.0 和 JDBC 3.0 全面支持使用ojdbc5.jar。   2.不再支持oracle.jdbc.driver。从9.0.1开始的每个release都推荐使用oracle.jdbc。这一天终于到来,在11g中,引用oracle.jdbc.driver不再通过编译。   3.j2se 1.2,1.3,1.4不再支持。11R1不再包括这些版本的jar和zip,如果仍然使用这些版本,可以继续使用10gR2的jdbc。   4.11gR1 Thin driver支持AES加密算法,SHA1 hash算法,RADIUS, KERBEROS,SSL认证机制.   5.支持ANYDATE和ANYTYPE类型。这两种类型自9i引入,11R1前,程序员只能通过PL/SQL操作。   6.高级队列支持。11R1提供了访问AQ的高性能接口。   7.支持数据库变更通知。   8.Thin和OCI的数据库启动和关闭。11R1提供了这样的方法来启动和关闭数据库。   9.新的工厂方法。Oracle JDBC 11R1 oracle.jdbc.OracleConnection提供了创建Oracle对象的工厂方法。   包括ARRAY, BFILE, DATE, INTERVALDS, NUMBER, STRUCT, TIME,TIMESTAMP,TIMESTAMP等。   ojdbc5.jar: 适用于jdk5   ojdbc6.jar: 适用于jdk6   ***_g.jar 只是用javac -g编译,生成所有调试信息,其它全一样   ---------------------------------------------------   总体讲新版本的JDBC驱动 性能强、很多bug被发现并已解决。   我遇到的,之前使用ojdbc14.jar(不记得哪个版本了)批量插入10万条,实际只插入了3万多条,其它的丢失了,换ojdbc6.jar后,一次commit批量插入100万条也OK了。   尽量使用和数据库版本一致的驱动,有bug时,换高版本的JDBC驱动试试 。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值