2015-11-15 3 views
0

может кто-нибудь, пожалуйста, помогите мне :(SQLite базы данных (код 14) Ошибка

я хочу сделать книгу и использовать эти коды:

public class Main extends Activity { 

    private database db; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     db = new database(this); 
     db.useable(); 

    } 

} 

и для класса базы данных:

public class database extends SQLiteOpenHelper { 

    public final String path = "data/data/com.example.book/databases/"; 
    public final String Name = "database";        
    public SQLiteDatabase mydb;           

    private final Context mycontext; 


    public database(Context context) { 

     super(context, "database", null, 1); 
     mycontext = context; 

    } 


    @Override 
    public void onCreate(SQLiteDatabase arg0) { 
     // TODO Auto-generated method stub 

    } 


    @Override 
    public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) { 
     // TODO Auto-generated method stub 

    } 


    public void useable() { 

     boolean checkdb = checkdb(); 

     if (checkdb) { 

     } else { 

      this.getReadableDatabase(); 

      try { 
       copydatabase(); 
      } 
      catch (IOException e) {} 

     } 

    } 


    public void open() { 

     mydb = SQLiteDatabase.openDatabase(path + Name, null, 
       SQLiteDatabase.OPEN_READWRITE); 

    } 


    @Override 
    public void close() { 
     mydb.close(); 
    } 


    public boolean checkdb() { 

     SQLiteDatabase db = null; 
     try { 
      db = SQLiteDatabase.openDatabase(path + Name, null, 
        SQLiteDatabase.OPEN_READONLY); 
     } 
     catch (SQLException e) { 

     } 
     mydb.close(); 
     return db != null ? true : false; 

    } 


    public void copydatabase() throws IOException { 

     OutputStream myOutput = new FileOutputStream(path + Name); 
     byte[] buffer = new byte[1024]; 
     int length; 
     InputStream myInput = mycontext.getAssets().open(Name); 
     while ((length = myInput.read(buffer)) > 0) { 
      myOutput.write(buffer, 0, length); 
     } 
     myInput.close(); 
     myOutput.flush(); 
     myOutput.close(); 
    } 

но я получил силу близко и эти ошибки

E/SQLiteDatabase(1567): Failed to open database 'data/data/com.example.book/databases/database'. 
android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database 

мой файл базы данных находится в папке активов с "базы данных" имя, мой эмулятор genymotion

+0

Является ли ваше имя пакета ** com.example .книга**? По ошибке отображается как ** com.example.book1 **. –

+0

Извините, я тестирую 2 разных кода и журналы меняются. имя пакета правильно – Ali

ответ

0

Попробуйте это: заменить

public final String path = "data/data/com.example.book/databases/"; 

с

String yourPath = myContext.getFilesDir().getAbsolutePath().replace("files", 
"databases")+File.separator + DB_NAME; 
Смежные вопросы