因此,我不确定发生了什么事情以及我的数据库在哪里正常运行,因此我正在运行查询和所有内容,然后出现了一个构建高峰!现在它不会打开数据库。我试过从资产文件夹中删除数据库,清除所有内容,然后以不同的方法,以几种不同的方法将其放回去,但仍然没有运气。我在这里机智。
07-27 12:43:57.536 29216-29216/com.apklegion.cltoollog E/SQLiteLog: (14)
cannot open file at line 35671 of [8201f4e1c5]
(14) os_unix.c:35671: (2)
open(/data/user/0/com.apklegion.cltoollog/databases/cltooldb.db) -
07-27 12:43:57.544 29216-29216/com.apklegion.cltoollog E/SQLiteDatabase:
Failed to open database
'/data/user/0/com.apklegion.cltoollog/databases/cltooldb.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:209)
at
android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:193)
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:808)
at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:793)
at android.database.sqlite.SQLiteDatabase.openDatabase
(SQLiteDatabase.java:696)
at android.database.sqlite.SQLiteDatabase.openDatabase
(SQLiteDatabase.java:671)
at com.apklegion.cltoollog.DatabaseHelper.DBExists
(DatabaseHelper.java:82)
at com.apklegion.cltoollog.DatabaseHelper.createDataBase
(DatabaseHelper.java:58)
at com.apklegion.cltoollog.MainActivity.onCreate(MainActivity.java:45)
at android.app.Activity.performCreate(Activity.java:6984)
at android.app.Instrumentation.callActivityOnCreate
(Instrumentation.java:1235)
at android.app.ActivityThread.performLaunchActivity
(ActivityThread.java:2783)
at android.app.ActivityThread.handleLaunchActivity
(ActivityThread.java:2909)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1606)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6592)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run
(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:769)
07-27 12:43:57.544 29216-29216/com.apklegion.cltoollog E/SQLHELPER: database
not found
07-27 12:43:57.621 29216-29216/com.apklegion.cltoollog D/AndroidRuntime:
Shutting down VM
--------- beginning of crash
07-27 12:43:57.625 29216-29216/com.apklegion.cltoollog E/AndroidRuntime:
FATAL EXCEPTION: main
Process: com.apklegion.cltoollog, PID: 29216
java.lang.Error: Problem copying database from resource file.
at
com.apklegion.cltoollog.DatabaseHelper.copyDBFromResource
(DatabaseHelper.java:124)
at
com.apklegion.cltoollog.DatabaseHelper.createDataBase(DatabaseHelper.java:64)
at com.apklegion.cltoollog.MainActivity.onCreate(MainActivity.java:45)
at android.app.Activity.performCreate(Activity.java:6984)
at
android.app.Instrumentation.callActivityOnCreate
(Instrumentation.java:1235)
at android.app.ActivityThread.performLaunchActivity
(ActivityThread.java:2783)
at android.app.ActivityThread.handleLaunchActivity
(ActivityThread.java:2909)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1606)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6592)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run
(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:769)
这是我的数据库帮助程序类
public class DatabaseHelper extends SQLiteOpenHelper {
public static String TAG = "DatabaseHelper";
public static final String DATABASE_NAME = "cltooldb.db";
public static final String TABLE_NAME ="toolstable";
public static String DATABASE_PATH = "";
public static final int DATABASE_VERSION =11;
private SQLiteDatabase mDataBase;
private final Context myContext;
public DatabaseHelper(Context context){
super(context,DATABASE_NAME,null,DATABASE_VERSION);
this.myContext = context;
if(android.os.Build.VERSION.SDK_INT >= 17){
DATABASE_PATH = context.getApplicationInfo().dataDir + "/databases/";
}
else
{
DATABASE_PATH = "/data/data/" + context.getPackageName() + "/databases/";
}
}
public void onCreate(SQLiteDatabase db){
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
public void createDataBase()throws IOException{
boolean dbExist = DBExists();
if(!dbExist) {
this.getReadableDatabase();
this.close();
//Copy the database from assests
copyDBFromResource();
Log.e(TAG, "createDatabase database created");
}
}
private void createDB(){
}
private boolean DBExists(){
SQLiteDatabase db = null;
try{
String databasePath = DATABASE_PATH + DATABASE_NAME;
db = SQLiteDatabase.openDatabase(databasePath, null, SQLiteDatabase.OPEN_READWRITE);
db.setLocale(Locale.getDefault());
db.setLockingEnabled(true);
db.setVersion(12);
}catch(SQLiteException e){
Log.e("SQLHELPER", "database not found");
}
if(db != null){
db.close();
}
return db != null ? true : false;
}
private boolean checkDataBase() {
File dbFile = new File(DATABASE_PATH + DATABASE_NAME);
Log.i("dbFile", dbFile + " " + dbFile.exists());
return dbFile.exists();
}
private void copyDBFromResource() {
;
try {
InputStream inputStream = myContext.getAssets().open(DATABASE_NAME);
String dbFilePath = DATABASE_PATH + DATABASE_NAME;
OutputStream outStream = new FileOutputStream(dbFilePath);
byte[] buffer = new byte[1024];
int length;
while ((length = inputStream.read(buffer)) > 0) {
outStream.write(buffer, 0, length);
}
Log.i("Tools","Successfully added");
outStream.flush();
outStream.close();
inputStream.close();
} catch (IOException e) {
throw new Error("Problem copying database from resource file.");
}
}
public boolean openDataBase() throws SQLException {
String mPath = DATABASE_PATH + DATABASE_NAME;
//Log.v("mPath", mPath);
mDataBase = SQLiteDatabase.openDatabase(mPath, null, SQLiteDatabase.CREATE_IF_NECESSARY);
return mDataBase != null;
}
@Override
public synchronized void close() {
if (mDataBase != null)
mDataBase.close();
super.close();
}
public Cursor getPartNumber(String desc){
SQLiteDatabase db = this.getWritableDatabase();
Cursor c = db.rawQuery("select part_number, serial_number from
"+TABLE_NAME+" where desc8ription like '"+desc+"'",null);
return c;
}
}
最后是我主要活动中的部分
DatabaseHelper databaseHelper = new DatabaseHelper(this);
try {
databaseHelper.createDataBase();
} catch (IOException e) {
e.printStackTrace();
}