标签: ucanaccess

在没有ODBC的情况下从Java操作Access数据库

我想从我的Java项目中操作Microsoft Access数据库(.accdb或.mdb文件).我不想使用Microsoft的JDBC-ODBC Bridge和Access ODBC驱动程序,因为:

  • JDBC-ODBC Bridge已从Java SE 8中删除,不受支持(参考:此处),
  • 当文本包含代码点高于U + 00FF(ref:here)的Unicode字符时,JDBC-ODBC Bridge无法与Access ODBC驱动程序一起正常工作,因此这样的设置将无法处理希腊语,俄语,中文等字符,阿拉伯语等,
  • Microsoft的Access ODBC驱动程序仅适用于Windows,和
  • 存在独立的32位和64位版本的Access数据库引擎(和ODBC驱动程序),这可能会对部署造成麻烦.

我看到其他答案提到了名为UCanAccess的 Access数据库的JDBC驱动程序.如何设置我的Java项目以使用此方法?

(回答建议使用Java的Access数据库的更好方法也是最受欢迎的.)

java ms-access ucanaccess

112
推荐指数
1
解决办法
16万
查看次数

无法使用applet中的ucanaccess方法连接或插入数据库

使用jdbc:ucanaccess方法将一个applet连接到Access DB时,出现以下错误:

Firstdb.java:44: error: unreported exception SQLException; 
must be caught or declared to be thrown
stmt.executeUpdate(sql);   
                  ^
Run Code Online (Sandbox Code Playgroud)

我用于applet的代码如下(add()setBounds()从中删除init()):

public class Firstdb extends Applet implements ActionListener {
    TextField t1, t2;
    Label l1;
    Button b1, b2;
    Connection con;
    Statement stmt;

    public void init() {
        try {
            con = DriverManager.getConnection("jdbc:ucanaccess://H:/test/db.mdb");
            stmt = con.createStatement();
        } catch (Exception e) {
        }
    }

    public void actionPerformed(ActionEvent ae) {
        String sql;

        if (ae.getSource() == b1) {
            sql = "insert into user …
Run Code Online (Sandbox Code Playgroud)

java ms-access applet jdbc ucanaccess

8
推荐指数
1
解决办法
550
查看次数

使用java通过使用microsoft access数据库中的部分行来搜索数据

我有这张桌子

在此输入图像描述

我正在使用以下代码从我的表中检索数据,该数据返回其库尔德语单词包含的所有英语单词بةرز

targetText="????";
try (PreparedStatement ps = conn.prepareStatement(
"SELECT English,Kurdish FROM Info " +
"WHERE Kurdish = ? " +
"OR REGEXP_MATCHES(Kurdish, ?) " +
"OR REGEXP_MATCHES(Kurdish, ?) " +
"OR REGEXP_MATCHES(Kurdish, ?) ")) {
   ps.setString(1, targetText);
   ps.setString(2, "^[. ]*" + targetText+ "[ ]*[:?,]+[ .]*$");
   ps.setString(3, "^[. ]*[:?,]+[ ]*" + targetText+ "[. ]*$");
   ps.setString(4, "^[. ]*[:?,]+[ ]*" + targetText+ "[ ]*[:?,]+[  .]*$");
   try (ResultSet rSet = ps.executeQuery()) {
      while (rSet.next()) {
         System.out.println(rSet.getString("English"));
         System.out.println(rSet.getString("Kurdish"));
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

所以它工作正常,它打印我想要的所有英语单词.
我的问题是,当我得到相应的库尔德语单词时,它不会打印完整的单元格.它只是打印بةرز,

例如,前面代码的输出应该是:

aesthete …
Run Code Online (Sandbox Code Playgroud)

java regex prepared-statement ucanaccess

6
推荐指数
1
解决办法
337
查看次数

使用UCanAccess JDBC驱动程序格式化日期

在Java中使用UCanAccess驱动程序时,我发现将日期输出为特定格式非常困难.目前,我正在使用PreparedStatement.setDate()方法,该方法要求日期格式为[yyyy-MM-dd HH:mm:ss].当用户打开文件时,结果输出也采用这种格式.

编辑* - 我没有使用带有格式化日期的setDate()方法,此方法只接受没有格式化的Java Date对象.我打算写的是我在处理格式化日期时使用setString()方法,但UCanAccess要求此日期字符串格式为[yyyy-MM-dd HH:mm:ss].我真的只是想弄清楚如何在调用setString()之后将其提供给不同的格式或更改格式.

到目前为止一切都很好,但现在我需要提供各种格式的日期文件,如[MM-dd].我可以通过使生成的Access字段键入备注或文本来完成此操作,但问题变为当我需要日期为该格式并且仍然将生成的Access字段类型设置为日期/时间.

我注意到在UCanAccess首页上,它提到支持访问日期格式,但我在几次谷歌搜索后没有找到任何示例.任何人都知道如何使用此驱动程序格式化日期,同时保持正确的日期/时间类型?

提前致谢!

java ms-access datetime jdbc ucanaccess

5
推荐指数
1
解决办法
4444
查看次数

"不支持整理排序顺序"错误从Java更新Access数据库

我想通过NetBeans使用UCanAccess对Access表进行一些小改动,但我遇到了问题

pst.executeUpdate();
Run Code Online (Sandbox Code Playgroud)

数据库细节:

database name : duruBistro.accdb
table name : person
field names: tc_no    (text)
             name     (text)
             surname  (text)
             salary   (number)
Run Code Online (Sandbox Code Playgroud)

码:

Connection conn = DriverManager.getConnection("jdbc:ucanaccess://C:\\Users\\ysnndr    \\Documents\\accessDB\\duruBistro.accdb");
String query = "UPDATE PERSON SET SALARY = ? WHERE TC_NO = '189'";
PreparedStatement pst = conn.prepareStatement(query);
pst.setInt(1, 2500);         
pst.executeUpdate();
Run Code Online (Sandbox Code Playgroud)

例外:

run:
java.lang.IllegalArgumentException: Given index Index@53f65459[
  name: (PERSON) PrimaryKey
  number: 0
  isPrimaryKey: true
  isForeignKey: false
  data: IndexData@3b088d51[
    dataNumber: 0
    pageNumber: 317
    isBackingPrimaryKey: true
    isUnique: true
    ignoreNulls: false
    columns: [
      ReadOnlyColumnDescriptor@1786dec2[
        column: TextColumn@711f39f9[
          name: …
Run Code Online (Sandbox Code Playgroud)

java ms-access jdbc ucanaccess

5
推荐指数
1
解决办法
7414
查看次数

调用executeUpdate时,UCanAccess/Jackcess异常会禁用我的Logger输出

我正在使用UCanAccess来操作Access数据库.在调用时executeUpdate我得到了异常:

net.ucanaccess.jdbc.UcanaccessSQLException:UCAExc ::: 3.0.2意外的页面类型1(Db = db.accdb; Table = MyTable; Index = PrimaryKey)

它只在尝试更新一个特定行时发生 - 我已经知道如何在Access DB中修复此问题.

问题在于Logger,在抛出此异常后我抓住了它,我记录了一条信息消息但未显示,所有下一条日志消息也未显示.

我想在不修复数据库的情况下修复它的原因是因为当它发生一次时,用户应该关闭应用程序以便记录下一个动作,如果他没有,那么我将无法知道他做了什么.

这是我的代码:

public static void main(String args[]) {
    Logger logger = Logger.getLogger("myLogger");
    PreparedStatement pst = null;
    try {
        FileHandler fileHandler = new FileHandler("myLog.log", 0, 1, true);

        // Set formatter to put the time, the message, and the exception if exists
        fileHandler.setFormatter(new Formatter() {
            @Override
            public String format(LogRecord record) {
                Throwable t = record.getThrown();
                String stackTrace = "";
                if (t != null) …
Run Code Online (Sandbox Code Playgroud)

java ms-access logging jackcess ucanaccess

5
推荐指数
1
解决办法
542
查看次数

将 DriverManager.getConnection 与 UCanAccess 一起使用时的内存消耗

我将 JDBC 与 UCanAccess 一起使用,以便通过直接文件路径创建到 MS Access 文件的连接,以将特定表存储到 JSON 对象中。但是,我的代码行

conn = DriverManager.getConnection(s1+inFilePath, user, pass);
Run Code Online (Sandbox Code Playgroud)

其中 conn 是一个未初始化的 Connection 对象,创建连接会导致某种内存泄漏,最终导致超出 GC 开销限制。

有没有办法解决这个问题?我尝试更改堆大小但没有结果。

java database jdbc ucanaccess

5
推荐指数
1
解决办法
721
查看次数

从 JAR 运行时“找不到合适的驱动程序”

我开发了一个小游戏,其中用户输入的文本需要发布在 MS Access 数据库中。

它在 NetBeans 中一切正常,但是每当我从 JAR 文件(最终需要交给我的客户)访问它时,它都不会向数据库发布任何内容。事实上,它返回以下错误:

java.sql.SQLException: No suitable driver found for jdbc:ucanaccess://C:\Users\Paul\Desktop\Spelli\RispostiDB.mdb
Run Code Online (Sandbox Code Playgroud)

这是相关代码:

public void postAnsDB()
    {
       String tableName = "Form"+studentGroup +"_"+studentSurname+"_"+studentName+"";

       answerModifier();

       try{

                String strurl="jdbc:ucanaccess://C:\\Users\\Paul\\Desktop\\Spelli\\RispostiDB.mdb";
                Connection conn=DriverManager.getConnection(strurl, "", "");
                Statement stmt=conn.createStatement();

                //Post Student Details to DB 

                String post = "INSERT INTO "+tableName+"(ID, responses, Correct_Response, Valid_Invalid, Marks) VALUES ('"+ansID+"', '"+answer+"', '"+correct+"', '"+valid+"', '"+marks+"');";

                stmt.executeUpdate(post);
            }
        catch(Exception e)
        {
            System.out.println("Exception found in postAnsDB: "+e);
        }
    }
Run Code Online (Sandbox Code Playgroud)

java ms-access netbeans jar ucanaccess

5
推荐指数
1
解决办法
2430
查看次数

如何配置Squirrel SQL客户端以使用MS Access

我正在努力让Squirrel SQL连接到MS Access数据库(只是一个普通的,没有密码):

  • 我创建一个别名并使用驱动程序:JBDC ODBC桥(此驱动程序前面有一个勾号)
  • 我不知道要在网址中输入什么
  • --------我使用:数据库文件的路径~~>不成功
  • --------我使用:jdbc:odbc:数据库文件的路径~~>不成功
  • 我正在Windows 7上运行它。

我认为这应该是一个简单直接的过程,但是请告诉我如何使它工作。

ms-access jdbc squirrel-sql ms-access-2010 ucanaccess

4
推荐指数
2
解决办法
7483
查看次数

在 UCanAccess 中执行PreparedStatement 时出现“功能不支持”错误

我正在尝试使用 ResultSet (UCanAccess 支持)在 GUI 中填充组合框

package Vegan;

import java.sql.Connection;
import java.sql.DriverManager;


public class connectionString {

static Connection connection = null;

public static Connection getConnection()
{
    try
    {
        connection = DriverManager.getConnection("jdbc:ucanaccess://C:/Mo//MyDatabase1.accdb");
        System.out.println("---connection succesful---");
    }

    catch (Exception ex)
    {
        System.out.println("Connection Unsuccesful");
    }

    return connection;
}
Run Code Online (Sandbox Code Playgroud)

 

package Vegan;

import static java.nio.file.Files.list;
import static java.rmi.Naming.list;
import java.sql.*;
import java.util.ArrayList;
import static java.util.Collections.list;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JComboBox;


public class DB {


private static ResultSet rs = null;
private static PreparedStatement …
Run Code Online (Sandbox Code Playgroud)

java ms-access jdbc ucanaccess

3
推荐指数
1
解决办法
8467
查看次数