Android Studio:net.ucanaccess.jdbc.UcanaccessSQLException:错误文件不存在

Posted

技术标签:

【中文标题】Android Studio:net.ucanaccess.jdbc.UcanaccessSQLException:错误文件不存在【英文标题】:Android Studio: net.ucanaccess.jdbc.UcanaccessSQLException: eror file dosent exist 【发布时间】:2020-08-08 16:23:31 【问题描述】:

我有一个使用 Microsoft Access 数据库的 android 应用程序。当我尝试运行该应用程序时,出现以下错误:

W/System.err: net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::0.0 given file does not exist: C:\Users\User\Documents\tets.accdb

但是当您转到文件位置时,该文件存在。 我已经尝试更改文件路径,但在大多数情况下,它不起作用,但有时它会给我另一个错误:

对于这个文件路径String url = "jdbc:ucanaccess:/C:/Users/User/Documents/tets.accdb";

它给了我这个错误:

W/System.err: java.sql.SQLException: No suitable driver found for jdbc:ucanaccess:/C:/Users/User/Documents/tets.accdb

我似乎无法理解 URL 之间的区别或导致此问题的原因。 有谁知道是什么导致了这个问题?

完整代码:

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

import java.sql.*;
public class Books extends AppCompatActivity 

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_books);
        try 
            Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
         catch (ClassNotFoundException e) 
            e.printStackTrace();
        
        String url = "jdbc:ucanaccess://C:\\Users\\User\\Documents\\tets.accdb";
        try 
            Connection con = DriverManager.getConnection(url);
            Statement statement = con.createStatement();
            ResultSet res =statement.executeQuery("SELECT * FROM tets");
            while(res.next())
                System.out.println(res.getInt(1));
            
            con.close();
            statement.close();
            res.close();
         catch (SQLException e) 
            e.printStackTrace();
        
    

【问题讨论】:

你拼错了test这个词吗?也许它被称为测试而不是tets。 这不是问题,我在 DB 名称中拼错了单词 test,所以它被称为 tets 好的,首先删除//C:,让它变成jdbc:ucanaccess:\\Users\\User\\Documents\\tets.accdb 现在添加 3 个而不是 2 个斜杠,所以现在是 jdbc:ucanaccess:\\\Users\\User\\Documents\\tets.accdb 并删除每个斜杠的 2 个斜杠,现在是:jdbc:ucanaccess:\\\Users\User\Documents\tets.accdb 【参考方案1】:

您的 Android 应用在模拟器/设备中运行,无需访问 IDE 主机的文件系统。要访问文件,您必须将其导入模拟器/设备:

在 Android Studio 3.0 及更高版本中执行以下操作: 查看 > 工具窗口 > 设备文件资源管理器

见How to access local files of the filesystem in the Android emulator?

【讨论】:

如果数据库位置是应用资产文件夹,这是否必要? 否,但你需要使用相对于模拟器的URI,不是windows路径。见***.com/questions/4820816/… 如果我理解正确jdbc:ucanaccess://file:///android_asset/tets.accdb是我需要的路径吗? 太糟糕了,你有什么理由不使用 Android 的默认 SQLite 数据库?不确定是否可以在 Android 上使用 ucanaccess,因为没有示例,仅适用于其他平台上的 java。【参考方案2】:

确保它是您拼错单词 test 并写了 tets 的路径的正确名称,也许这就是问题所在?

【讨论】:

@shosho155 好的,您可以保留 2 /,但要确保 tets.accdb 确实存在。也许它被称为test 而不是tets

以上是关于Android Studio:net.ucanaccess.jdbc.UcanaccessSQLException:错误文件不存在的主要内容,如果未能解决你的问题,请参考以下文章

android studio怎么更新

android studio setting 在哪

如何解决android studio2.3导入android studio2.1的问题

Android studio上找不到setting?

android studio v4包冲突

如何用android studio 编成app