access 数据库有一个表 data(id 数值, city 文本, title 文本, ......, success 是/否)在程序中读取数据,分析数据,根据分析结果修改当前行的 success 值。但是我发现如果在 Connection.createStatement 中传入了参数 ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE,Statement 就读不到数据了。而如果不带这些参数,则在调用 ResultSet.updateBoolean 会抛出异常。代码如下:
package com.csjl.infopub.gather;import java.sql.*;public class Test { public static void main(String[] args) throws Exception {

String url = 
"jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=E:/Temp/data.mdb;characterEncoding=GBK";
String sql = 
" select id, username, password, success from student";

Connection conn = null;
Statement cmd = null;
ResultSet rs = null;
System.out.println("begin");
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

java.util.Properties p = new java.util.Properties();
p.put("charSet", "GBK");
conn = DriverManager.getConnection(url, p);
conn.setAutoCommit(true);
// 这样读不到数据
cmd = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
                    ResultSet.CONCUR_UPDATABLE);
// cmd = conn.createStatement(); 这种写法可以读到数据
rs = cmd.executeQuery(sql);
System.out.println("row count = " + rs.getRow());
while(rs.next()){
System.out.println("id = " + rs.getInt("id"));
rs.updateBoolean("Success", true);
rs.updateRow();
}

}catch(Exception ex){
ex.printStackTrace();
}finally{
if(rs != null){
try{rs.close();}catch(Exception ex){}
}
if(cmd != null){
try{cmd.close();}catch(Exception ex){}
}
if(conn != null){
try{conn.close();}catch(Exception ex){}
}
}
}
}

解决方案 »

  1.   

    access只是个很简单的数据库,有很多jdbc的功能没有对应的实现.............
      

  2.   

    一般是不会使用access 的 除非特殊要求 mysql用起来比较好
      

  3.   

    尝试用 TYPE_SCROLL_SENSITIVE 试试看。
      

  4.   


    用什么不是我能决定得了的事情
    写这个程序是要从别的地方把数据导到我的系统里来,我的系统是oracle。对方提供的是 access,并且数据格式和我的差别太大。比如我们的系统中有“价格”字段,类型是number(10,2),而数据源则五花八门,并且都是汉字,可能有10万,一十万,壹拾万,100000,100,000,……。我要做的就是把 access 中的原始数据分析,并且保存到我们规范化的oracle中去。我的做法是依次分析“10万”、“一十万”、……的这种格式,如果成功了,则将源access的success字段设置为true,以免下次重新分析。
      

  5.   


    10年前曾经用Access帮某大学开发其论坛,当年还是古老的Access2000,想来想去没印象碰到过这种问题。不过当年用的是ASP+ODBC。
    但楼主用的也是ODBC,要不试试看能否换个ODBC驱动看看吧。
      

  6.   


    access 还有别的ODBC驱动?
      

  7.   

    记得另一个的名字应该带着 OLE DB 字样。
      

  8.   

    oledb 在C#里访问ACCESS数据库时倒是经常用到,但在java里不知道如何何用了