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
从这三段代码,我们可以看出,不管需要被分割的字符串是否包含被分隔符,以及被一否以被分隔符结尾,都不影响我们预期的“分割”结果。