2017-09-13 53 views
0

你好,我是在我的手机上有SQlite正与android studioSQLite数据库读取错误 '没有这样的文件或目录'

我有一个简单的数据库是这样的:

DATABASE 1:

public class myDbAdapter { 
    myDbHelper myhelper; 

    public myDbAdapter(Context context) { 
     myhelper = new myDbHelper(context); 
    } 

    public long insertData(String name, String ip, String port, String rele) { 
     SQLiteDatabase dbb = myhelper.getWritableDatabase(); 
     ContentValues contentValues = new ContentValues(); 
     contentValues.put(myDbHelper.NAME, name); 
     /* ... same for more items ...*/ 
     long id = dbb.insert(TABLE_NAME, null, contentValues); 
     return id; 
    } 

    public String getData() { 
     SQLiteDatabase db = myhelper.getWritableDatabase(); 
     String[] columns = {myDbHelper.UID, myDbHelper.NAME, myDbHelper.IP, myDbHelper.PORT, myDbHelper.RELE, myDbHelper.Hash}; 
     Cursor cursor = db.query(TABLE_NAME, columns, null, null, null, null, null); 
     StringBuffer buffer = new StringBuffer(); 

     int i = 0; 
     while (cursor.moveToNext()) { 
      i++; 
      int cid = cursor.getInt(cursor.getColumnIndex(myDbHelper.UID)); 
      String name = cursor.getString(cursor.getColumnIndex(myDbHelper.NAME)); 
      String ipE = cursor.getString(cursor.getColumnIndex(myDbHelper.IPE)); 
      /* ... same for more items ...*/ 
      buffer.append("*" + cid + "-" + name + "-" + ipE + "-" + port + "-" + rele + "\n"); 
     } 
     List1.colu = i; 
     return buffer.toString(); 
    } 

    public int delete(String uid) { 
     SQLiteDatabase db = myhelper.getWritableDatabase(); 
     String delgrp = "DELETE FROM " + TABLE_NAME + " WHERE _id='" + uid + "'"; 
     db.execSQL(delgrp); 
     return 1; 
    } 


    static class myDbHelper extends SQLiteOpenHelper { 
     public static final String DATABASE_NAME = "myDatabase"; // Database Name 
     public static final String TABLE_NAME = "Data"; // Table Name 
     private static final int DATABASE_Version = 1; // Database Version 
     private static final String UID = "_id";  // Column I (Primary Key) 
     /* ... same for more items ...*/ 
     private static final String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + 
       " (" + UID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + NAME + " VARCHAR(255) ," + IPE + " VARCHAR(255) ," + TEST1 + " VARCHAR(255) ," + TEST2 + " VARCHAR(255) ," + Hash + " VARCHAR(225));"; 
     private static final String DROP_TABLE = "DROP TABLE IF EXISTS " + TABLE_NAME; 
     private Context context; 

     public myDbHelper(Context context) { 
      super(context, DATABASE_NAME, null, DATABASE_Version); 
      this.context = context; 
     } 

     public void onCreate(SQLiteDatabase db) { 
      try { 
       db.execSQL(CREATE_TABLE); 
      } catch (Exception e) { 
       // Message.message(context,""+e); 
      } 
     } 

     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
      try { 
       // Message.message(context,"OnUpgrade"); 
       db.execSQL(DROP_TABLE); 
       onCreate(db); 
      } catch (Exception e) { 
       // Message.message(context,""+e); 
      } 
     } 
    } 

我想在同一个数据库中添加另一个TABLE(MyDataBase

所以我创建了一个名为MyDbAdapter2另一个Java类

相同的号码如上只是改变了类名和表名

helper = new myDbAdapter(this); 
    helper2 = new myDbAdapter2(this); 

DATABASE 2:

public class myDbAdapter2 { 
     myDbHelper myhelper; 

     public myDbAdapter2(Context context) { 
      myhelper = new myDbHelper(context); 
     } 

     public long insertData(String name, String ip) { 
      /*...*/ 
     } 

     public String getData() { 
      SQLiteDatabase db = myhelper.getWritableDatabase(); 
      String[] columns = {myDbHelper.UID, myDbHelper.ITEM, myDbHelper.SUBITEM}; 
      Cursor cursor = db.query(TABLE_NAME, columns, null, null, null, null, null); 
      StringBuffer buffer = new StringBuffer(); 

      int i = 0; 
      while (cursor.moveToNext()) { 
       i++; 
       int cid = cursor.getInt(cursor.getColumnIndex(myDbHelper.UID)); 
       String name = cursor.getString(cursor.getColumnIndex(myDbHelper.ITEM)); 
       String ipe = cursor.getString(cursor.getColumnIndex(myDbHelper.SUBITEM)); 
       buffer.append("*" + cid + "-" + name + "-" + ipe + "\n"); 
      } 
      // List1.colu=i; 
      return buffer.toString(); 
     } 


     static class myDbHelper extends SQLiteOpenHelper { 
      public static final String DATABASE_NAME = "myDatabase"; // Database Name 
      public static final String TABLE_NAME = "Data2"; // Table Name 
      private static final int DATABASE_Version = 1; // Database Version 
      private static final String UID = "_id";  // Column I (Primary Key) 
      /*...*/ //Column II 
      // ... // Column III 
      private static final String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + 
        " (" + UID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + ITEM + " VARCHAR(255) ," + SUBITEM + " VARCHAR(225));"; 
      private static final String DROP_TABLE = "DROP TABLE IF EXISTS " + TABLE_NAME; 
      private Context context; 

      public myDbHelper(Context context) { 
       super(context, DATABASE_NAME, null, DATABASE_Version); 
       this.context = context; 
      } 

      public void onCreate(SQLiteDatabase db) { 

       try { 
        db.execSQL(CREATE_TABLE); 
       } catch (Exception e) { 
        // Message.message(context,""+e); 
       } 
      } 

      @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     try { 
      // Message.message(context,"OnUpgrade"); 
      db.execSQL(DROP_TABLE); 
      onCreate(db); 
     }catch (Exception e) { 
      // Message.message(context,""+e); 
     } 
    } 
     } 
    } 

当我尝试访问其他(Data2)数据库它会导致错误!

android.database.sqlite.SQLiteException: no such table: Data2 (Sqlite code 1): , while compiling: SELECT _id, Item, SubItem FROM Data2, (OS error - 2:No such file or directory) 

我看到这个就登录:

09-13 09:31:05.788 18454-18454/com.example.discopc.yubismart I/HwSecImmHelper: mSecurityInputMethodService is null 
09-13 09:31:06.468 18454-18604/com.example.discopc.yubismart E/SQLiteLog: (1) 
09-13 09:31:06.571 18454-18604/com.example.discopc.yubismart I/Process: Sending signal. PID: 18454 SIG: 9 

请告诉我这个问题?第一个数据库工作正常,但第二个没有,

谢谢....?

+0

你可以发布myDbAdapter2的升级代码吗? – Raghavendra

+0

您正在创建与同一位置相同的数据库/数据库名称,尝试更改myDbAdapter2中的数据库名称,为什么要创建2个数据库,您只需要在相同的数据库中创建2个表,而无需创建另一个数据库。 –

+0

对于两个表,您不需要两个数据库,也不需要两个适配器类来访问两个表 –

回答

2

至于你说的 - 我想另一个表添加到同一个数据库(MYDATABASE)

你不应该使用两种不同类为SQLite数据库创建两个不同的表。在执行一个适配器类时创建一个表,并且如果您的数据库版本在适配器类中相同/不同,则两个表中的一个不会被创建/将被删除。

这里db版本是相同的,这就是为什么第二个表没有创建。

创建多达里面你myDbHelperonCreate()您所需的表和里onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)执行drop表的代码为每个表。

当你需要另一个新表时,只需按照上面的方式创建表,然后在onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)内写入drop table的代码。

您只需要记住创建新表或sqlite数据库内的任何结构更改只会在更改数据库的版本代码后才会反映出来。

0

您已经使用名称为MyDataBase的表数据创建了一次数据库。 您再次尝试使用导致问题的表Data2创建相同的MyDataBase。

“我想只创建1个数据库,将名称更改为MyDataBase2可以,但为什么?”

当您将名称更改为MyDataBase2时,它可以工作,因为这是一个全新的数据库,您可以在其中创建Data2表。

所以,如果你想在你的第一版数据库中创建Data2,你必须在其中创建表Data2,但不是一个全新的数据库。如果你想知道更多关于它的信息,请发现它here

我相信这回答了你的问题。

相关问题