Android 连接到我的SQLite数据库时出错

Android 连接到我的SQLite数据库时出错,android,database,sqlite,Android,Database,Sqlite,用户正在查看一个列表LibraryFragment,并单击其中一个选项(Item1或Item2),从那里我想显示另一个列表(gffragment),该列表是根据从数据库接收的项目动态创建的。在logCat中,我得到以下错误: 08-30 13:56:54.087:E/SqliteDatabaseCpp(22622):sqlite3_open_v2(“/data/data/j.j.l.library.v11/databases/library_dev.db”,&handle,1,NULL)失败 无

用户正在查看一个列表
LibraryFragment
,并单击其中一个选项(
Item1
Item2
),从那里我想显示另一个列表(
gffragment
),该列表是根据从数据库接收的项目动态创建的。在logCat中,我得到以下错误:

08-30 13:56:54.087:E/SqliteDatabaseCpp(22622):sqlite3_open_v2(“/data/data/j.j.l.library.v11/databases/library_dev.db”,&handle,1,NULL)失败
无法打开数据库。关闭它。
有人知道代码有什么问题吗?或者它为什么这样做


我用于数据库的代码是:

公共类数据库助手{
私有静态字符串DB_PATH=“/data/data/j.j.l.library.v11/databases/”;
私有静态字符串DB\u NAME=“library\u dev.DB”;
私有SQLiteDatabase-myDataBase;
公共数据库助手(){
}
//打开数据库。
public void openDatabase()引发SQLException{
字符串myPath=DB_PATH+DB_NAME;
myDataBase=SQLiteDatabase.openDatabase(myPath,null,SQLiteDatabase.OPEN\u READONLY);
}   
//返回我们想要的列。
公共列表getQueryColumn(String tableName,String[]列){
光标;
列表信息=新的ArrayList();
cursor=myDataBase.query(tableName,columns,null,null,null,null);
cursor.moveToFirst();
而(!cursor.isAfterLast()){
info.add(cursor.getString(0));
cursor.moveToNext();
}
cursor.close();
退货信息;
}    
//关闭数据库。
public void closeDatabase()引发SQLException{
myDataBase.close();
}
}
我尝试从数据库动态创建的另一个列表:

public class MyDatabaseHelper extends SQLiteOpenHelper { // blah...database create/upgrade handling }

MyDatabaseHelper myHelper = new MyDatabaseHelper(yourContext);
SQLiteDatabase myDatabase = myHelper.getReadableDatabase(); // now you can use `myDatabase` freely
公共类GFFragment扩展了ListFragment{
私人数据库;
公共静态最终字符串GROLE=“role”;
公共静态最终字符串[]ROLENAME={“name”};
@凌驾
已创建ActivityState上的公共无效(Bundle savedInstanceState){
//TODO自动生成的方法存根
super.onActivityCreated(savedInstanceState);
gList=新数据库助手();
openDatabase();
列表值=gList.getQueryColumn(GROLE,ROLENAME);
setListAdapter(新的ArrayAdapter(getActivity(),android.R.layout.simple_list_item_1,values));
gList.closeDatabase();
}
}
这是在调用从数据库检索动态列表之前,用户正在查看的列表:

public class MyDatabaseHelper extends SQLiteOpenHelper { // blah...database create/upgrade handling }

MyDatabaseHelper myHelper = new MyDatabaseHelper(yourContext);
SQLiteDatabase myDatabase = myHelper.getReadableDatabase(); // now you can use `myDatabase` freely
公共类LibraryFragment扩展了ListFragment{
字符串[]libraryList={“Item1”,“Item2”};
@凌驾
已创建ActivityState上的公共无效(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
setListAdapter(新的ArrayAdapter(getActivity(),android.R.layout.simple_list_item_1,libraryList));
}
@凌驾
public void onListItemClick(列表视图l、视图v、整数位置、长id){
//获取用户单击的位置。
片段newFragment=null;
字符串listPosition=libraryList[position];
getListView().setItemChecked(位置,true);
if(listPosition.equals(“Item1”)){
newFragment=新的gffragment();
}else if(listPosition.equals(“Item2”)){
newFragment=newitfragment();
}
FragmentTransaction=getFragmentManager().beginTransaction();
事务.replace(R.id.myFragments,newfragments);
transaction.addToBackStack(空);
transaction.setTransition(FragmentTransaction.transition\u FRAGMENT\u FADE);
commit();
}
}

这是因为您没有创建此数据库
library\u dev.db
,所以它是空的,导致引用为
NULL
;随后进行关闭操作

您需要在一个类中处理数据库的
创建/升级/删除
,该类应该首先从
SQLiteOpenHelper
扩展。然后使用此类获取数据库:

public class MyDatabaseHelper extends SQLiteOpenHelper { // blah...database create/upgrade handling }

MyDatabaseHelper myHelper = new MyDatabaseHelper(yourContext);
SQLiteDatabase myDatabase = myHelper.getReadableDatabase(); // now you can use `myDatabase` freely

您可以在以下网址查阅相关指南:

检查数据库的路径。或者尝试在应用程序中创建空数据库,然后从数据库导入数据。Yahor10您是否可以提供有关如何执行此操作的代码,或者我可以访问一个网站,展示如何从数据库导入数据。若要导入数据库,请将数据库文件复制到您的数据库中但是如果你想创建一个新的空数据库,请阅读SqliteOpenHelper类,如果我创建了一个单独的类:公共类MyDatabaseHelper扩展了onCreate()和onUpgrade()中的SqliteOpenHelper{//blah…database create/upgrade handling},我会将它们保留为空,对吗?因为我不是从头开始创建数据库,所以我不必使用db.execSQL(),对吗?您必须实现
onCreate()
onUpgrade()
,如果您不打算创建空数据库,则实现将数据库从
/assets
复制到指定路径的代码。这个
SQLiteOpenHelper
类是所有进一步的数据库交互的开始,在这里实现您想要做的事情。