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

无法使用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

  • 互联网上充斥着处理数组的资源,但对象通常更适合数据,而且似乎更高效。 我想在动态字段名下存储键值对象,如下所示: 这样做似乎比保留一个包含所有语言的数组并对其进行过滤以获取给定语言的所有语言条目更有效。 我的问题是:如何使用猫鼬将键值对插入到具有动态名称的对象中?对象是否需要存在,或者如果在一个操作中不存在,我可以创建它吗? 我试过这个: 但不管我是否有一个空对象开始,都没有运气:。 奖励:我应该