Java Android Studio:net.ucanaccess.jdbc.UcanaccessSQLException:eror文件不存在

Java Android Studio:net.ucanaccess.jdbc.UcanaccessSQLException:eror文件不存在,java,android,ms-access,ucanaccess,Java,Android,Ms Access,Ucanaccess,我有一个使用微软Access数据库的android应用程序。当我尝试运行应用程序时,出现以下错误: W/System.err:net.ucanaccess.jdbc.UcanaccessSQLException:ucaesc:::0.0给定文件不存在:C:\Users\User\Documents\tets.accdb 但当您转到文件位置时,该文件已存在。 我尝试过更改文件路径,但在大多数情况下,它不起作用,尽管有时会给我另一个错误: 对于此文件路径String url=“jdbc:ucanac

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

W/System.err:net.ucanaccess.jdbc.UcanaccessSQLException:ucaesc:::0.0给定文件不存在:C:\Users\User\Documents\tets.accdb

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

对于此文件路径
String url=“jdbc:ucanaccess:/C:/Users/User/Documents/tets.accdb”

它给了我这个错误:

W/System.err:java.sql.SQLException:找不到适合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,这可能就是问题所在?

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

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


请参见

@shosho155好的,您可以保留2
/
,但请确保tets.accdb确实存在。也许它被称为
test
而不是
tets
?你把test这个词拼错了吗?也许它被称为test而不是tets。这不是问题所在,我在DB名称中拼错了单词test,所以它被称为tetsOkay。首先,删除
//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
如果数据库位置是app assets文件夹,那么这是必需的吗?不,但需要使用相对于emulator的URI,什么不是windows路径。看看我是否正确理解你的意思
jdbc:ucanaccess://file:///android_asset/tets.accdb
这是我需要的路径吗?太糟糕了,你为什么不使用Androids默认SQLite数据库?不确定是否可以在Android上使用ucanaccess,因为没有示例,仅适用于其他平台上的java。