【问题标题】:how to open sqlite db inside package file in java class in android studio如何在android studio的java类中打开包文件中的sqlite db
【发布时间】:2020-06-04 09:45:13
【问题描述】:

我里面有一个包 ebooks_adaptor 和 MyArrayAdaptor java 类我想在里面调用 sqlite db 来导入数据我发现在包里面我们应该使用静态方法所以我使用了

db = SQLiteDatabase.openDatabase("myDataBase.db", null, Context.MODE_PRIVATE);

但它产生了

09-18 00:00:08.238 26784-26784/com.dhilip.college E/SQLiteLog: (14) cannot open file at line 31364 of [2ef4f3a5b1]
09-18 00:00:08.238 26784-26784/com.dhilip.college E/SQLiteLog: (14) os_unix.c:31364: (2) open(//myDataBase.db) - 
09-18 00:00:08.251 26784-26784/com.dhilip.college E/SQLiteDatabase: Failed to open database 'myDataBase.db'.
android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database
    at android.database.sqlite.SQLiteConnection.nativeOpen(Native Method)
    at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:212)
    at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:196)
    at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463)
    at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185)
    at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177)
    at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:836)
    at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:821)
    at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:714)
    at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:689)
    at com.dhilip.college.ebooks_adapter.MyArrayAdaptor.getView(MyArrayAdaptor.java:69)
    at android.widget.AbsListView.obtainView(AbsListView.java:2474)
    at android.widget.ListView.makeAndAddView(ListView.java:1920)
    at android.widget.ListView.fillDown(ListView.java:717)
    at android.widget.ListView.fillFromTop(ListView.java:778)
    at android.widget.ListView.layoutChildren(ListView.java:1701)
    at android.widget.AbsListView.onLayout(AbsListView.java:2235)
    at android.view.View.layout(View.java:16969)
    at android.view.ViewGroup.layout(ViewGroup.java:5583)
    at android.support.design.widget.HeaderScrollingViewBehavior.layoutChild(HeaderScrollingViewBehavior.java:131)
    at android.support.design.widget.ViewOffsetBehavior.onLayoutChild(ViewOffsetBehavior.java:42)
    at android.support.design.widget.AppBarLayout$ScrollingViewBehavior.onLayoutChild(AppBarLayout.java:1367)
    at android.support.design.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:849)
    at android.view.View.layout(View.java:16969)
    at android.view.ViewGroup.layout(ViewGroup.java:5583)
    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:396)
    at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
    at android.view.View.layout(View.java:16969)
    at android.view.ViewGroup.layout(ViewGroup.java:5583)
    at android.support.v7.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:437)
    at android.view.View.layout(View.java:16969)
    at android.view.ViewGroup.layout(ViewGroup.java:5583)
    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:396)
    at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
    at android.view.View.layout(View.java:16969)
    at android.view.ViewGroup.layout(ViewGroup.java:5583)
    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:2001)
    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1844)
    at android.widget.LinearLayout.onLayout(LinearLayout.java:1753)
    at android.view.View.layout(View.java:16969)
    at android.view.ViewGroup.layout(ViewGroup.java:5583)
    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:396)
    at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
    at com.android.internal.policy.PhoneWindow$DecorView.onLayout(PhoneWindow.java:2728)
    at android.view.View.layout(View.java:16969)
    at android.view.ViewGroup.layout(ViewGroup.java:5583)
    at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2552)
    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2255)
    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1321)
    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6708)
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:894)
    at android.view.Choreographer.doCallbacks(Choreographer.java:696)
    at android.view.Choreographer.doFrame(Choreographer.java:631)
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:880)
    at android.os.Handler.handleCallback(Handler.java:822)
    at android.os.Handler.dispatchMessage(Handler.java:104)
    at android.os.Looper.loop(Looper.java:207)
    at android.app.ActivityThread.mai
09-18 00:00:08.252 26784-26784/com.dhilip.college D/AndroidRuntime: Shutting down VM

【问题讨论】:

  • 请发布整个错误堆栈跟踪,它包含有价值的信息。
  • @pleft 编辑了帖子:)
  • 尝试完整路径,而不仅仅是数据库名称。

标签: java android sqlite package android-sqlite


【解决方案1】:

好的,你需要这个设计一个 DBHelper 类,并且在你想使用 DB 的功能的任何其他 Activity(类)中,你可以调用 DB 就是说最好处理所有 DB 函数DBHelper 类你懂的 CRUD 函数

首先在您的 DBHelper 中定义使用数据库的变量`static SQLiteDatabase db; 现在假设我们要在 MainActivity 中的数据库中的表中添加一些数据,我们使用此代码定义“助手”和“数据库”

private DBHelper helper;
private SQLiteDatabase db;
helper = new DBHelper(this);
public void doAdd() {// Adds Master Password to TABLE_PW

    db = helper.getWritableDatabase();
    String password = etPW.getText().toString().trim();
    ContentValues cv = new ContentValues();
    cv.put( Col_MPW,password);
    db.insert( TABLE_PW,null,cv);

    etPW.setText("");
    etCPW.setText("");
    onLoad();
    db.close();
}

因此,如果您要引用和使用 MainActivity 中 DBHelper 类中定义的该项目,那么现在从 DBHelper 类中再导入一项

import static <package.name.goes.here>.DBHelper.TABLE_PW;

【讨论】:

  • db = context.openOrCreateDatabase("myDataBase.db",MODE_PRIVATE,null);这工作兄弟
【解决方案2】:

使用

 db = context.openOrCreateDatabase("myDataBase.db",MODE_PRIVATE,null);

代替

 db = SQLiteDatabase.openDatabase("myDataBase.db", null, Context.MODE_PRIVATE);

它对我有用;)

【讨论】:

    【解决方案3】:
    getApplicationContext().openOrCreateDatabase("myDB", Context.MODE_PRIVATE, null);
    

    这对我有用。就我而言,我用WorkManager 打开database

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-11
      • 2020-03-27
      • 2012-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-19
      • 1970-01-01
      相关资源
      最近更新 更多