Java Android从预构建的SQLite数据库获取数据

Java Android从预构建的SQLite数据库获取数据,java,android,sqlite,Java,Android,Sqlite,我试图从ready SQLite数据库中获取数据并将其写入TextView,但出现了此错误 以下是我的DataBaseHelperClass.java: package com.ehliyet; 导入java.io.File; 导入java.io.FileOutputStream; 导入java.io.IOException; 导入java.io.InputStream; 导入java.io.OutputStream; 导入android.content.Context; 导入android.d

我试图从ready SQLite数据库中获取数据并将其写入TextView,但出现了此错误

以下是我的DataBaseHelperClass.java:

package com.ehliyet;
导入java.io.File;
导入java.io.FileOutputStream;
导入java.io.IOException;
导入java.io.InputStream;
导入java.io.OutputStream;
导入android.content.Context;
导入android.database.Cursor;
导入android.database.SQLException;
导入android.database.sqlite.SQLiteDatabase;
导入android.database.sqlite.SQLiteOpenHelper;
公共类DataBaseHelperClass扩展了SQLiteOpenHelper{
//应用程序数据库的Android默认系统路径。
私有静态字符串DB_PATH=“/data/data/com.ehliyet/assets/”;
//数据库名称。
私有静态最终字符串数据库\u NAME=“test.db”;
//数据库版本。
私有静态最终int数据库_VERSION=1;
//表数据库的名称。
静态最终字符串表\u Name=“问题”;
公共语境;
静态SQLiteDatabase-SQLiteDatabase;
/**
*建造师
*获取并保留传递的上下文的引用,以便访问应用程序资产和资源。
*@param上下文
*super()的参数为1.Context
*2.数据库名称。
*3.光标工厂。
*4.数据库版本。
*/
公共数据库HelperClass(上下文){
super(上下文、数据库名称、null、数据库版本);
this.context=上下文;
}
/**
*在系统上创建一个空数据库,并用您自己的数据库重写它。
*通过调用此方法,将在默认系统路径中创建空数据库
*所以我们可以用我们的数据库覆盖那个数据库。
* */
public void createDataBase()引发IOException{
//检查数据库是否存在
布尔databaseExist=checkDataBase();
如果(数据库存在){
//什么也不做。
}否则{
这是.getWritableDatabase();
copyDataBase();
}//如果存在其他数据库,则结束
}//end createDataBase()。
/**
*检查数据库是否已存在,以避免每次打开应用程序时重新复制文件。
*@如果存在则返回true,如果不存在则返回false
*/
公共布尔校验数据库(){
文件databaseFile=新文件(DB\u路径+数据库\u名称);
返回databaseFile.exists();
}
/**
*将数据库从本地资产文件夹复制到中刚创建的空数据库
*系统文件夹,从中可以访问和处理它。
*这是通过传输字节流来完成的。
* */
私有void copyDataBase()引发IOException{
//打开本地数据库作为输入流
InputStream myInput=context.getAssets().open(数据库名称);
//刚创建的空数据库的路径
字符串outFileName=DB\u路径+数据库\u名称;
//打开空数据库作为输出流
OutputStream myOutput=新文件OutputStream(outFileName);
//将字节从输入文件传输到输出文件
字节[]缓冲区=新字节[1024];
整数长度;
而((长度=myInput.read(缓冲区))>0){
写入(缓冲区,0,长度);
}
//关闭溪流
myOutput.flush();
myOutput.close();
myInput.close();
}
/**
*此方法打开数据库连接。
*首先,它创建直到设备数据库的路径。
*然后创建与数据库的连接。
*/
public void openDataBase()引发SQLException{
//打开数据库
字符串myPath=DB_路径+数据库_名称;
sqliteDataBase=sqliteDataBase.openDatabase(myPath,null,sqliteDataBase.OPEN\u READWRITE);
}
/**
*此方法用于关闭数据库连接。
*/
@凌驾
公共同步的void close(){
if(sqliteDataBase!=null)
sqliteDataBase.close();
super.close();
}
/**
*应用您的方法和类来使用原始数据获取数据,或使用
*以下演示示例代码如下:
*/
公共字符串getDataDB(){
String query=“从问题中选择QLect”;
Cursor Cursor=sqliteDataBase.rawQuery(query,null);
字符串userName=null;
if(cursor.getCount()>0){
if(cursor.moveToFirst()){
做{
userName=cursor.getString(0);
}while(cursor.moveToNext());
}
}
返回用户名;
}
@凌驾
public void onCreate(SQLiteDatabase db){
//无需编写CREATETABLE查询。
//因为我们使用的是预建数据库。
//这是只读的。
}
@凌驾
public void onUpgrade(SQLiteDatabase db,int-oldVersion,int-newVersion){
//无需编写更新表查询。
//因为我们使用的是预建数据库。
//这是只读的。
//我们不应将其作为应用程序的要求进行更新。
}   
}
MainActivity.Java:

package com.ehliyet;
导入android.app.Activity;
导入android.database.Cursor;
导入android.os.Bundle;
导入android.view.view;
导入android.widget.Button;
导入android.widget.TextView;
公共类MainActivity扩展了活动{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
按钮btBasla=(按钮)findViewById(R.id.button1);
btBasla.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
DataBaseHelperClass myDBHelper=新的DataBaseHelperClass(MainActivity.this);
myDBHelper.openDataBase();
字符串textdt=myDBHelper.getDataDB();
myDBHelper.close();
TextView txtSoru=(TextView)findViewById(R.id.textView1);
txtSoru.setText(textdt);
}
});
}
}
这是我单击按钮时的日志:

    08-09 18:46:38.128: E/SQLiteLog(1172): (14) cannot open file at line 30174 of [00bb9c9ce4]
    08-09 18:46:38.128: E/SQLiteLog(1172): (14) os_unix.c:30174: (2) open(/data/data/com.ehliyet/assets/test.db) - 
    08-09 18:46:38.178: E/SQLiteDatabase(1172): Failed to open database '/data/data/com.ehliyet/assets/test.db'.
    08-09 18:46:38.178: E/SQLiteDatabase(1172): android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database
    08-09 18:46:38.178: E/SQLiteDatabase(1172):     at android.database.sqlite.SQLiteConnection.nativeOpen(Native Method)
    08-09 18:46:38.178: E/SQLiteDatabase(1172):     at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:209)
    08-09 18:46:38.178: E/SQLiteDatabase(1172):     at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:193)
    08-09 18:46:38.178: E/SQLiteDatabase(1172):     at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463)
    08-09 18:46:38.178: E/SQLiteDatabase(1172):     at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185)
    08-09 18:46:38.178: E/SQLiteDatabase(1172):     at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177)
    08-09 18:46:38.178: E/SQLiteDatabase(1172):     at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:804)
    08-09 18:46:38.178: E/SQLiteDatabase(1172):     at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:789)
    08-09 18:46:38.178: E/SQLiteDatabase(1172):     at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:694)
    08-09 18:46:38.178: E/SQLiteDatabase(1172):     at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:669)
    08-09 18:46:38.178: E/SQLiteDatabase(1172):     at com.ehliyet.DataBaseHelperClass.openDataBase(DataBaseHelperClass.java:101)
    08-09 18:46:38.178: E/SQLiteDatabase(1172):     at com.ehliyet.MainActivity$1.onClick(MainActivity.java:23)
    08-09 18:46:38.178: E/SQLiteDatabase(1172):     at android.view.View.performClick(View.java:4084)
    08-09 18:46:38.178: E/SQLiteDatabase(1172):     at android.view.View$PerformClick.run(View.java:16966)
    08-09 18:46:38.178: E/SQLiteDatabase(1172):     at android.os.Handler.handleCallback(Handler.java:615)
    08-09 18:46:38.178: E/SQLiteDatabase(1172):     at android.os.Handler.dispatchMessage(Handler.java:92)
    08-09 18:46:38.178: E/SQLiteDatabase(1172):     at android.os.Looper.loop(Looper.java:137)
    08-09 18:46:38.178: E/SQLiteDatabase(1172):     at android.app.ActivityThread.main(ActivityThread.java:4745)
    08-09 18:46:38.178: E/SQLiteDatabase(1172):     at java.lang.reflect.Method.invokeNative(Native Method)
    08-09 18:46:38.178: E/SQLiteDatabase(1172):     at java.lang.reflect.Method.invoke(Method.java:511)
    08-09 18:46:38.178: E/SQLiteDatabase(1172):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
    08-09 18:46:38.178: E/SQLiteDatabase(1172):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
    08-09 18:46:38.178: E/SQLiteDatabase(1172):     at dalvik.system.NativeStart.main(Native Method)
    08-09 18:46:38.178: D/AndroidRuntime(1172): Shutting down VM
    08-09 18:46:38.188: W/dalvikvm(1172): threadid=1: thread exiting with uncaught exception (group=0x40a13300)
    08-09 18:46:38.258: E/AndroidRuntime(1172): FATAL EXCEPTION: main
    08-09 18:46:38.258: E/AndroidRuntime(1172): android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database
    08-09 18:46:38.258: E/AndroidRuntime(1172):     at android.database.sqlite.SQLiteConnection.nativeOpen(Native Method)
    08-09 18:46:38.258: E/AndroidRuntime(1172):     at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:209)
    08-09 18:46:38.258: E/AndroidRuntime(1172):     at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:193)
    08-09 18:46:38.258: E/AndroidRuntime(1172):     at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463)
    08-09 18:46:38.258: E/AndroidRuntime(1172):     at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185)
    08-09 18:46:38.258: E/AndroidRuntime(1172):     at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177)
    08-09 18:46:38.258: E/AndroidRuntime(1172):     at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:804)
    08-09 18:46:38.258: E/AndroidRuntime(1172):     at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:789)
    08-09 18:46:38.258: E/AndroidRuntime(1172):     at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:694)
    08-09 18:46:38.258: E/AndroidRuntime(1172):     at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:669)
    08-09 18:46:38.258: E/AndroidRuntime(1172):     at com.ehliyet.DataBaseHelperClass.openDataBase(DataBaseHelperClass.java:101)
    08-09 18:46:38.258: E/AndroidRuntime(1172):     at com.ehliyet.MainActivity$1.onClick(MainActivity.java:23)
    08-09 18:46:38.258: E/AndroidRuntime(1172):     at android.view.View.performClick(View.java:4084)
    08-09 18:46:38.258: E/AndroidRuntime(1172):     at android.view.View$PerformClick.run(View.java:16966)
    08-09 18:46:38.258: E/AndroidRuntime(1172):     at android.os.Handler.handleCallback(Handler.java:615)
    08-09 18:46:38.258: E/AndroidRuntime(1172):     at android.os.Handler.dispatchMessage(Handler.java:92)
    08-09 18:46:38.258: E/AndroidRuntime(1172):     at android.os.Looper.loop(Looper.java:137)
    08-09 18:46:38.258: E/AndroidRuntime(1172):     at android.app.ActivityThread.main(ActivityThread.java:4745)
    08-09 18:46:38.258: E/AndroidRuntime(1172):     at java.lang.reflect.Method.invokeNative(Native Method)
    08-09 18:46:38.258: E/AndroidRuntime(1172):     at java.lang.reflect.Method.invoke(Method.java:511)
    08-09 18:46:38.258: E/AndroidRuntime(1172):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
    08-09 18:46:38.258: E/AndroidRuntime(1172):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
    08-09 18:46:38.258: E/AndroidRuntime(1172):     at dalvik.system.NativeStart.main(Native Method)
    08-09 18:46:40.008: I/Process(1172): Sending signal. PID: 1172 SIG: 9

在任何Android设备(包括您的任何设备)上都没有名为
/data/data/com.ehliyet/assets/test.db
的文件。鳕鱼