android – SQLite数据库:未知错误(代码14):无法打开数据库

前端之家收集整理的这篇文章主要介绍了android – SQLite数据库:未知错误(代码14):无法打开数据库前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在制作一个应用程序,从另一个应用程序复制db文件,然后编辑数据库.

当我尝试打开de sqlite db时出现错误

  1. android.database.sqlite.sqliteCantOpenDatabaseException: unknown error (code 14): Could not open database

尝试了我在INTERNET上看到的很多不同的方法,没有任何作用.

这是我的代码

  1. public class FirstRunService extends IntentService{
  2. /**
  3. * Creates an IntentService. Invoked by your subclass's constructor.
  4. *
  5. * Service Used to name the worker thread,important only for debugging.
  6. */
  7. public FirstRunService() {
  8. super("Service");
  9. }
  10. String filesdir;
  11. SharedPreferences sp;
  12. @Override
  13. protected void onHandleIntent(Intent intent) {
  14. //Cargo SharedPreferences
  15. sp = this.getSharedPreferences("FirstRun",Context.MODE_PRIVATE);
  16. //Asigno filesdir
  17. filesdir = intent.getStringExtra("filesdir");
  18. //Subo XX
  19. Boolean XX = sp.getBoolean("XX",false);
  20. if(!XX) {
  21. uploadxxs(intent);
  22. }
  23. }
  24. protected void uploadXX (Intent intent){
  25. //Preparo
  26. sqliteDatabase db;
  27. myFTP myftp = new myFTP();
  28. FTPClient client;
  29. //Copio la Base de datos
  30. RootTools.deleteFileOrDirectory(filesdir + "/XX.db",true);
  31. RootTools.copyFile("/data/data/com.XX/databases/XX.db",filesdir+"/xx.db",true,false);
  32. try {
  33. RootTools.getShell(true).add(cmd);
  34. } catch (TimeoutException e) {
  35. e.printStackTrace();
  36. Log.e("Root XX.db","Fallo");
  37. FirstRunAlarm.completeWakefulIntent(intent);
  38. stopService(intent);
  39. } catch (RootDeniedException e) {
  40. e.printStackTrace();
  41. Log.e("Root XX.db","Fallo");
  42. FirstRunAlarm.completeWakefulIntent(intent);
  43. stopService(intent);
  44. } catch (IOException e) {
  45. e.printStackTrace();
  46. Log.e("Root XX.db","Fallo");
  47. FirstRunAlarm.completeWakefulIntent(intent);
  48. stopService(intent);
  49. }
  50. //Edito db
  51. //Edito db
  52. File file = new File(filesdir+"/wa.db");
  53. if (file.exists()){
  54. Log.e("File","Existe");
  55. db = sqliteDatabase.openDatabase(filesdir+"/wa.db",null,sqliteDatabase.OPEN_READWRITE);//Error in this line
  56. }else{
  57. db = null;
  58. Log.e("File","No Existe");
  59. }
  60. db.execsql("DROP TABLE android_Metadata;");

logcat的:

  1. 12-17 22:38:17.401 15227-15242/com.lstupenengo.primeraapp E/File Existe
  2. 12-17 22:38:17.402 3076-3366/com.lstupenengo.primeraapp E/sqliteLog (14) cannot open file at line 30192 of [00bb9c9ce4]
  3. 12-17 22:38:17.402 3076-3366/com.lstupenengo.primeraapp E/sqliteLog (14) os_unix.c:30192: (13) open(//data/data/com.lstupenengo.primeraapp/files/XX.db) -
  4. 12-17 22:38:17.412 3076-3366/com.lstupenengo.primeraapp E/sqliteDatabase Failed to open database 'data/data/com.lstupenengo.primeraapp/files/XX.db'.
  5. android.database.sqlite.sqliteCantOpenDatabaseException: unknown error (code 14): Could not open database
  6. at android.database.sqlite.sqliteConnection.nativeOpen(Native Method)
  7. at android.database.sqlite.sqliteConnection.open(sqliteConnection.java:209)
  8. at android.database.sqlite.sqliteConnection.open(sqliteConnection.java:193)
  9. at android.database.sqlite.sqliteConnectionPool.openConnectionLocked(sqliteConnectionPool.java:463)
  10. at android.database.sqlite.sqliteConnectionPool.open(sqliteConnectionPool.java:185)
  11. at android.database.sqlite.sqliteConnectionPool.open(sqliteConnectionPool.java:177)
  12. at android.database.sqlite.sqliteDatabase.openInner(sqliteDatabase.java:804)
  13. at android.database.sqlite.sqliteDatabase.open(sqliteDatabase.java:789)
  14. at android.database.sqlite.sqliteDatabase.openDatabase(sqliteDatabase.java:694)
  15. at android.database.sqlite.sqliteDatabase.openDatabase(sqliteDatabase.java:669)
  16. at com.lstupenengo.primeraapp.FirstRunService.uploadXX(FirstRunService.java:105)
  17. at com.lstupenengo.primeraapp.FirstRunService.onHandleIntent(FirstRunService.java:49)
  18. at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
  19. at android.os.Handler.dispatchMessage(Handler.java:102)
  20. at android.os.Looper.loop(Looper.java:212)
  21. at android.os.HandlerThread.run(HandlerThread.java:61)
  22. 12-17 22:38:17.412 3076-3366/com.lstupenengo.primeraapp W/dalvikvm threadid=11: thread exiting with uncaught exception (group=0x41648d88)
  23. 12-17 22:38:17.422 3076-3366/com.lstupenengo.primeraapp E/AndroidRuntime FATAL EXCEPTION: IntentService[Service]
  24. Process: com.lstupenengo.primeraapp,PID: 3076
  25. android.database.sqlite.sqliteCantOpenDatabaseException: unknown error (code 14): Could not open database
  26. at android.database.sqlite.sqliteConnection.nativeOpen(Native Method)
  27. at android.database.sqlite.sqliteConnection.open(sqliteConnection.java:209)
  28. at android.database.sqlite.sqliteConnection.open(sqliteConnection.java:193)
  29. at android.database.sqlite.sqliteConnectionPool.openConnectionLocked(sqliteConnectionPool.java:463)
  30. at android.database.sqlite.sqliteConnectionPool.open(sqliteConnectionPool.java:185)
  31. at android.database.sqlite.sqliteConnectionPool.open(sqliteConnectionPool.java:177)
  32. at android.database.sqlite.sqliteDatabase.openInner(sqliteDatabase.java:804)
  33. at android.database.sqlite.sqliteDatabase.open(sqliteDatabase.java:789)
  34. at android.database.sqlite.sqliteDatabase.openDatabase(sqliteDatabase.java:694)
  35. at android.database.sqlite.sqliteDatabase.openDatabase(sqliteDatabase.java:669)
  36. at com.lstupenengo.primeraapp.FirstRunService.uploadXX(FirstRunService.java:105)
  37. at com.lstupenengo.primeraapp.FirstRunService.onHandleIntent(FirstRunService.java:49)
  38. at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
  39. at android.os.Handler.dispatchMessage(Handler.java:102)
  40. at android.os.Looper.loop(Looper.java:212)
  41. at android.os.HandlerThread.run(HandlerThread.java:61)

表现:

最佳答案
通过创建一个类来解决,然后直接从服务调用该类.

  1. public class xxHandler extends sqliteOpenHelper {
  2. Context context;
  3. sqliteDatabase xxdb;
  4. public wadbHandler(Context context1) {
  5. super(context1,"xx.db",1);
  6. context = context1;
  7. }
  8. // Creating Tables
  9. @Override
  10. public void onCreate(sqliteDatabase db) {
  11. }
  12. // Upgrading database
  13. @Override
  14. public void onUpgrade(sqliteDatabase db,int oldVersion,int newVersion) {
  15. }
  16. public void accion(sqliteDatabase db){
  17. wadb = sqliteDatabase.openDatabase(context.getFilesDir()+"/xx.db",sqliteDatabase.OPEN_READWRITE);
  18. wadb.execsql("SELECT * FROM table;")
  19. }

猜你在找的Android相关文章