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:错误文件不存在的主要内容,如果未能解决你的问题,请参考以下文章