2016-09-02 3 views
1

Я хочу создать 2 таблицы: один - это регистрационная информация, а вторая - личная информация. Я создал рабочий файл базы данных отдельно от обоего таблиц, но когда я запускаю его в приложении, я получаю эту ошибку:Ошибки при создании таблиц с SQLite

Info Database Created successfully 
09-02 19:19:03.724 12697-12697/com.example.user.myapplication E/SQLiteLog: (1) no such table: personal_info 
09-02 19:19:03.724 12697-12697/com.example.user.myapplication E/SQLiteDatabase: Error inserting cont=8755664455 addr=Sham Nagar reg_no=CS20161802 
    android.database.sqlite.SQLiteException: no such table: personal_info (code 1): , while compiling: INSERT INTO personal_info(cont,addr,reg_no) VALUES (?,?,?) 
     at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) 
     at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:887) 
     at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:498) 
     at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) 
     at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58) 
     at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31) 
     at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1469) 
     at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1341) 
     at com.example.user.myapplication.PersonalInfoDataOp.personalInfoOp(PersonalInfoDataOp.java:51) 
     at com.example.user.myapplication.student_info$2.onClick(student_info.java:99) 
     at android.view.View.performClick(View.java:5198) 
     at android.view.View$PerformClick.run(View.java:21147) 
     at android.os.Handler.handleCallback(Handler.java:739) 
     at android.os.Handler.dispatchMessage(Handler.java:95) 
     at android.os.Looper.loop(Looper.java:148) 
     at android.app.ActivityThread.main(ActivityThread.java:5417) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
09-02 19:19:03.724 12697-12697/com.example.user.myapplication D/Database operations: Info One row inserted 

Это класс Таблицы данных. Здесь я упомянул все атрибуты таблицы.

public TableData(){ 
} 

public static abstract class TableInfo implements BaseColumns{ 
    public static final String FIRST_NAME = "first_name" ; 
    public static final String LAST_NAME = "last_name" ; 
    public static final String SIT_NO = "sit_number" ; 
    public static final String REG_NO = "reg_number" ; 
    public static final String DATABASE_NAME = "student_database" ; 
    public static final String TABLE_NAME = "registration_info" ; 
} 

public static abstract class PersonalInfo implements BaseColumns{ 
    public static final String REGISTRATION_NO = "reg_no"; 
    public static final String ADDRESS = "addr"; 
    public static final String CONTACT = "cont"; 
    public static final String DATABASE_NAME = "student_database"; 
    public static final String TABLE_NAME = "personal_info"; 
} 

Здесь я создал класс операции базы данных для регистрации информации

public class DatabaseOperations extends SQLiteOpenHelper { 

    public static final int database_version = 1; 

    public String CREATE_QUERY = "CREATE TABLE " + TableData.TableInfo.TABLE_NAME+ "(" 
      + TableData.TableInfo.FIRST_NAME+ " TEXT ," + TableData.TableInfo.LAST_NAME + " TEXT ," 
      + TableData.TableInfo.SIT_NO + " TEXT ," + TableData.TableInfo.REG_NO + " TEXT);"; 

    public DatabaseOperations(Context context) { 
     super(context, TableData.TableInfo.DATABASE_NAME, null, database_version); 
     Log.d("Database operations", "Reg Database Created successfully"); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase sdb) { 

     sdb.execSQL(CREATE_QUERY); 
     Log.d("Database operations", "Reg Table Created successfully"); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

    } 

    public void regInfoOperation(DatabaseOperations dop, String First_Name, String Last_Name, String Sit_Number, String Reg_Number) 
    { 
     SQLiteDatabase RSQ = dop.getWritableDatabase(); 
     ContentValues rcv = new ContentValues(); 

     rcv.put(TableData.TableInfo.FIRST_NAME,First_Name); 
     rcv.put(TableData.TableInfo.LAST_NAME,Last_Name); 
     rcv.put(TableData.TableInfo.SIT_NO,Sit_Number); 
     rcv.put(TableData.TableInfo.REG_NO,Reg_Number); 

     long k = RSQ.insert(TableData.TableInfo.TABLE_NAME, null, rcv); 
     Log.d("Database operations", "Reg One row inserted"); 
    } 

    public Cursor getRegInformation(DatabaseOperations dop, String regNo) 
    { 
     SQLiteDatabase db = dop.getReadableDatabase(); 
     String[] coloumns = {TableData.TableInfo.FIRST_NAME, TableData.TableInfo.LAST_NAME, TableData.TableInfo.REG_NO}; 
     String where = TableData.TableInfo.REG_NO +" LIKE ?"; 
     String args[] = {regNo}; 
     Cursor CR = db.query(TableData.TableInfo.TABLE_NAME,coloumns, where, args, null, null, null); 
     return CR; 
    } 
} 

Здесь Персональные в операции класса для базы данных PersonalInfoOp

public class PersonalInfoDataOp extends SQLiteOpenHelper { 

    public static final int database_version = 1; 

    public String CREATE_QUERY = "CREATE TABLE " + TableData.PersonalInfo.TABLE_NAME + "(" 
      + TableData.PersonalInfo.REGISTRATION_NO + " TEXT," 
      + TableData.PersonalInfo.ADDRESS + " TEXT," 
      + TableData.PersonalInfo.CONTACT + " TEXT);"; 

    public PersonalInfoDataOp(Context context) { 
     super(context, TableData.PersonalInfo.DATABASE_NAME, null, database_version); 
     Log.d("Database operations", " Info Database Created successfully"); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase dob) { 
     try { 
      dob.execSQL(CREATE_QUERY); 
      Log.d("Database operations", "Personal info Table Created successfully"); 
     } 
     catch (Exception e){ 
      Log.d("Database operations","Personal info Fail to create"); 
     } 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

    } 

    public void personalInfoOp(PersonalInfoDataOp dop, String Registration_no, String Addr, String Cont) 
    { 
     SQLiteDatabase PSQ = dop.getWritableDatabase(); 
     ContentValues pcv = new ContentValues(); 

     pcv.put(TableData.PersonalInfo.REGISTRATION_NO, Registration_no); 
     pcv.put(TableData.PersonalInfo.ADDRESS,Addr); 
     pcv.put(TableData.PersonalInfo.CONTACT, Cont); 

     long k = PSQ.insert(TableData.PersonalInfo.TABLE_NAME, null, pcv); 
     Log.d("Database operations", "Info One row inserted"); 
    } 
} 

И это один класс Student Info. Когда я нажимаю на следующую кнопку, в logCaT появляется ошибка.

Next.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Intent intent1 = new Intent(student_info.this,info.class); 
     add = Address.getText().toString(); 
     con = Contact.getText().toString(); 

     PersonalInfoDataOp POP = new PersonalInfoDataOp(popc); 
     POP.personalInfoOp(POP,RegistrationNum,add,con); 

     startActivity(intent1); 
     Toast.makeText(getBaseContext(),"Personal Info inserted......", Toast.LENGTH_LONG).show(); 

    } 
}); 
+0

И почему «на: нет такой таблицы: personal_info' для вас недостаточно? – Antoniossss

+0

, когда я нажимаю в своем первом действии, информация о учетной записи создается в базе данных, но когда я нажимаю на следующую кнопку во втором действии, личная информационная таблица не создается, она дает мне ошибку –

+0

Мне нужна эта таблица для хранения личной информации учащихся в databse –

ответ

0

Оба ваши SQLiteOpenHelper s имеют такое же имя файла базы данных: student_database. SQLiteOpenHelper версий файлов базы данных, а не таблиц, поэтому во втором помощнике ничего не делается, так как файл базы данных уже находится в правильной версии.

Чтобы это исправить,

  • Переместить обе таблицы в том же SQLiteOpenHelper
  • Удалить try - catch в onCreate(). Исключения должны быть выброшены на ошибку.
  • Удалите свое приложение, чтобы удалить старый файл базы данных и получить onCreate() для выполнения еще раз.

См. When is SQLiteOpenHelper onCreate()/onUpgrade() run? для получения дополнительной информации.

Смежные вопросы