当前位置: 首页 > 知识库问答 >
问题:

无法使用ucanaccess创建可更新的resultset

盖嘉珍
2023-03-14

我已经尝试了这里和web上找到的大多数示例,但我无法打开MS access数据库(2002或2013)并使用UCANAccess获得可更新的结果集。同样的代码使用jdbc:odbc驱动程序/connection/works。我编写了简短的测试代码来检查concur_updatable来检查这一点,所以我一定遗漏了什么。我在Win7机器上使用JDK1.7。我还有另一台机器也有同样的结果。这是有效的:

/*
class jdbc, for testing jdbc:odbc CONCUR_UPDATABLE.
*/

import java.sql.*;

public class jdbc {

private static String dbFQN;

public static void main(String[] args) {

try {
dbFQN = ("C:\\phil\\programming\\kpjl2002.mdb");
String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=" + dbFQN;
System.out.println("Loading database: " + database);
Connection conn = DriverManager.getConnection(database, "", "");
Statement s = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
// Fetch records from table
String selTable = "SELECT * FROM " + "tblLibrary" + " ORDER BY Artist, Cat, Cart";
s.execute(selTable);
ResultSet rs = s.getResultSet();

int concurrency = rs.getConcurrency();
if(concurrency == ResultSet.CONCUR_UPDATABLE)
{
System.out.println("rs is updatable");
} else {
System.out.println("rs Not updatable");
}

s.close();
conn.close();
} //close try
catch (Exception ex) {
ex.printStackTrace();
}   //close catch
}   //close main method

}   //close dbAccess class

输出是rs是可更新的。

这不起作用:

/*
class ucan, for testing ucanaccess CONCUR_UPDATABLE.
C:\jdk1.7.0_79\jre\lib\ext\ucanaccess-2.0.9.5.jar
C:\jdk1.7.0_79\jre\lib\ext\hsqldb.jar
C:\jdk1.7.0_79\jre\lib\ext\jackcess-2.1.0.jar
C:\jdk1.7.0_79\jre\lib\ext\commons-lang-2.6.jar
C:\jdk1.7.0_79\jre\lib\ext\commons-logging-1.1.1.jar

also present:
C:\jdk1.7.0_79\jre\lib\ext\commons-logging-1.2.jar
C:\jdk1.7.0_79\jre\lib\ext\commons-lang3-3.4.jar
*/

import java.sql.*;

public class ucan {

private static String dbFQN;

public static void main(String[] args) {

try {
dbFQN = ("C:\\phil\\programming\\kpjl2002.mdb");
String database = "jdbc:ucanaccess://" + dbFQN;
System.out.println("Loading database: " + database);
Connection conn = DriverManager.getConnection(database, "", "");
Statement s = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
// Fetch records from table
String selTable = "SELECT * FROM " + "tblLibrary" + " ORDER BY Artist, Cat, Cart";
s.execute(selTable);
ResultSet rs = s.getResultSet();

int concurrency = rs.getConcurrency();
if(concurrency == ResultSet.CONCUR_UPDATABLE)
{
System.out.println("rs is updatable");
} else {
System.out.println("rs Not updatable");
}

s.close();
conn.close();
} //close try
catch (Exception ex) {
ex.printStackTrace();
}   //close catch
}   //close main method

}   //close dbAccess class

共有1个答案

钮博裕
2023-03-14

我用2013年的修理和紧凑制作了2002年和2013年的“新”数据库。Access必须保留'97类型,即使做我所做的。因此,我创建了一个新的2013年虚拟数据库进行测试,UCanAccess将报告resultset为可更新的。

Access中的“压缩和修复数据库”功能不会更改数据库文件版本。如果您有(您怀疑是)旧版本的数据库文件,那么您应该使用“file>Save&Publish”*下的“Save database as”功能将数据库文件转换为新版本。

*(...至少在Access 2010中就是这样。)

 类似资料:
  • 问题内容: 我正在辩论应该如何学习。主要是,如果我从数据库中获取大量信息以将其加载到页面上,那么最好的方式是操纵页面而不需要重新加载。使用XML之类的东西是最好的选择,还是我应该使用的其他东西。我知道其中很多使用HTML Dom和XML Dom,但是我不想开始学习我不需要的东西。 问题答案: 您正在寻找的技术名称是AJAX,它代表异步Javascript和XML(尽管目前大多数AJAX使用JSON

  • 问题内容: 我的程序包含以下行,并且此时就挂起了,我不太确定为什么。 在Eclipse中进行调试时,如果我尝试在“显示”视图中评估“ new PoolingHttpClientConnectionManager()”,则会出现以下错误: 我正在使用org.apache.httpcomponents中的httpclient.jar版本4.3.1。 还有其他人遇到这个问题吗?有什么办法吗?还是我在做傻

  • 我想使用PHP OOP创建一个简单的CRUD而不需要任何框架 下面是我编写的执行简单SQL更新查询的代码 呼叫更新功能 但是你知道如何在oop更新查询中处理吗? 如 还是多个添加? 请看一下我的代码注释,了解一下我的头绪在哪里。 如果有人能用简单的术语解释这一点,我需要做什么来改变它?? 这会帮我的忙。 非常感谢

  • 我正在使用Eloquent和SlimPHP以及Capsule作为DB“Facade”。 现在我只是支持MySql,因为我需要动态创建表,所以我试图构建两个查询并运行它们。 做的时候 要查看查询是如何生成的,它们如下所示: 字符串(351)“如果不存在,则创建表`responses\\u 44`(`id`int(11)NOT NULL AUTO\\u INCREMENT,`field\\u 20`v

  • ~$npm create-react-app my-app 安装软件包。这可能需要几分钟。使用cra-template安装react、react-dom和react-scripts... core-js@2.6.11 postinstall/home/ubuntu/my-app/node_modules/babel-runtime/node_modules/core-js node-e“try{r

  • 我正在努力实现的目标: 创建一个新的Laravel项目 我正在尝试的是: 我一直在尝试按照安装说明进行操作 当我尝试运行以下命令时: 它返回以下错误: 您可以查看我的图片了解详细信息:终端 我在ubuntu 18.04上。 非常感谢你的帮助。。