2017-08-01 32 views
-1

我试图将数据存储到安卓SQLite不创建表。没有这样的表被发现,列名不forund

DBHelper类的SQLite数据库

public class DBHelper extends SQLiteOpenHelper { 

    private static final String TAG = "DBHelper"; 

    private static final String DATABASE_NAME = "DemoAppDB"; 
    private static final int DATABASE_VERSION = 6; 

    private static final String TABLE_VISIT = "visit"; 
    private static final String TABLE_LIVE = "live"; 

    private static final String COL_TIMESTAMP = "timestamp"; 
    private static final String COL_LOCATION = "location"; 
    private static final String COL_LATITUDE = "latitude"; 
    private static final String COL_LONGITUDE = "longitude"; 

    private static final String COL_VISIT_ID = "_id_visit"; 
    private static final String COL_VISIT_DOC = "doctor"; 
    private static final String COL_VISIT_REP = "representative"; 
    private static final String COL_VISIT_TYPE = "vist_type"; 
    private static final String COL_VISIT_ACCOMPLICE = "accomplice"; 
    private static final String COL_VISIT_PRODUCT_NAME = "product"; 
    private static final String COL_VISIT_GIVEAWAYS = "giveaways"; 

    private static final String COL_LIVE_ID  = "_id_live"; 
    private static final String COL_LIVE_REP = "representative"; 


    public DBHelper(Context context){ 
     super(context,DATABASE_NAME,null,DATABASE_VERSION); 
    } 


    @Override 
    public void onCreate(SQLiteDatabase sqLiteDatabase) { 
     Log.d(TAG, "onCreate: Creating dbs"); 
     createVisitTable(sqLiteDatabase); 
     createLiveTable(sqLiteDatabase); 
     Log.d(TAG, "onCreate: db created"); 
    } 

    public void createVisitTable(SQLiteDatabase sqLiteDatabase){ 
     sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + TABLE_LIVE); 

//  this.getTables(); 
     sqLiteDatabase.execSQL(
       "create table " + TABLE_VISIT + 
         " (" + COL_VISIT_ID + " integer primary key autoincrement, " + 
         COL_TIMESTAMP + " text, " + 
         COL_VISIT_DOC + " text, " + 
         COL_VISIT_TYPE + " text, " + 
         COL_VISIT_ACCOMPLICE + " text, " + 
         COL_VISIT_PRODUCT_NAME + " text, " + 
         COL_VISIT_GIVEAWAYS + " text, " + 
         COL_LATITUDE + " text, " + 
         COL_VISIT_REP + " text, " + 
         COL_LONGITUDE + " text)" 
     ); 

    } 

    public void createLiveTable(SQLiteDatabase sqLiteDatabase){ 
     sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + TABLE_VISIT); 
     sqLiteDatabase.execSQL(
       "create table " + TABLE_LIVE + 
         " (" + COL_LIVE_ID + " integer primary key autoincrement, " + 
         COL_TIMESTAMP + " text, " + 
         COL_LATITUDE + " text, " + 
         COL_LONGITUDE + " text, " + 
         COL_LIVE_REP + " text)" 
     ); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { 
     Log.d(TAG, "onUpgrade: old : ["+i+"] new : ["+i1+"]"); 
     if (i >= i1){ 
      return; 
     } 

     Log.d(TAG, "onUpgrade: Dropping [" + TABLE_LIVE + "]"); 
     sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + TABLE_LIVE); 
     Log.d(TAG, "onUpgrade: Dropping [" + TABLE_VISIT + "]"); 
     sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + TABLE_VISIT); 
     Log.d(TAG, "onUpgrade: CREATING [" + TABLE_VISIT + "]"); 
     createVisitTable(sqLiteDatabase); 
     Log.d(TAG, "onUpgrade: CREATING [" + TABLE_LIVE + "]"); 
     createLiveTable(sqLiteDatabase); 
     Log.d(TAG, "onUpgrade: SUCCESSFULLY RECREATED ALL"); 
    } 

    public boolean insertRowInVisit(VisitCall visitCall){ 
     Log.d(TAG, "insertRowInVisit: inserting row in visit"); 
     SQLiteDatabase db = this.getWritableDatabase(); 
     Log.d(TAG, "insertRowInVisit: Writable db fetched"); 

     ContentValues contentValues = new ContentValues(); 
     contentValues.put(COL_TIMESTAMP, String.valueOf(visitCall.getTimestamp())); 
     contentValues.put(COL_VISIT_DOC,String.valueOf(visitCall.getDoctorName())); 
     contentValues.put(COL_VISIT_TYPE,visitCall.getVisitType()); 
     contentValues.put(COL_VISIT_ACCOMPLICE,visitCall.getAccompliceName()); 
     contentValues.put(COL_VISIT_PRODUCT_NAME,visitCall.getProductName()); 
     contentValues.put(COL_VISIT_GIVEAWAYS,visitCall.getGiveaways()); 
     contentValues.put(COL_VISIT_REP,visitCall.getRepresentativeName()); 
     contentValues.put(COL_LATITUDE,String.valueOf(visitCall.getLocation().getLatitude())); 
     contentValues.put(COL_LONGITUDE,String.valueOf(visitCall.getLocation().getLongitude())); 
     Log.d(TAG, "insertRowInVisit: visit call object : ["+visitCall.toString()+"]"); 
     db.insert(TABLE_VISIT,null,contentValues); 
     return true; 
    } 

我试着上的按钮调用点击

DBHelper dbHelper = new DBHelper(CallFormActivity.this); 
dbHelper.insertRowInVisit(visitCall); 

StackTrace:

07-31 20:16:49.047 25146-25146/com.example.omer.mnpandroidappdemo E/SQLiteLog: (1) no such table: visit 
07-31 20:16:49.049 25146-25146/com.example.omer.mnpandroidappdemo E/SQLiteDatabase: Error inserting representative=QA giveaways=Guys longitude=67.0725465 accomplice= doctor=Dr. Abdullah latitude=24.8623643 timestamp=Mon Jul 31 20:16:33 GMT+05:00 2017 vist_type=Alone product=Augmentin 
android.database.sqlite.SQLiteException: no such table: visit (code 1): , while compiling: INSERT INTO visit(representative,giveaways,longitude,accomplice,doctor,latitude,timestamp,vist_type,product) 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.omer.mnpandroidappdemo.helper.DBHelper.insertRowInVisit(DBHelper.java:128) 
at com.example.omer.mnpandroidappdemo.CallFormActivity$2.onClick(CallFormActivity.java:208) 
at android.view.View.performClick(View.java:5207) 
at android.view.View$PerformClick.run(View.java:21168) 
at android.os.Handler.handleCallback(Handler.java:746) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:148) 
at android.app.ActivityThread.main(ActivityThread.java:5491) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 

我有三ED改变DB的版本也试图改变SQL的格式,仍然误差保持相同的最初它给了错误没有找到这样的表,我试图在这个论坛

+1

卸载都DROP命令及运行 –

+0

设置 - >进入应用程序 - >清除数据和运行应用乌尔提供更好的解决方案 –

+0

你可能会使用一个以前版本的前期数据库,例如,您创建了一个数据库并更改了数据库而不更改版本。 – Abbas

回答

1
  1. 您要删除'TABLE_VISIT'同时创造给每一个可能的解决方案'TABLE_LIVE'。造成这个问题。 尝试下面的代码并从createVisitTable()createLiveTable()

    @Override 
    public void onCreate(SQLiteDatabase sqLiteDatabase) { 
        Log.d(TAG, "onCreate: Creating dbs"); 
        sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + TABLE_LIVE); 
        sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + TABLE_VISIT); 
    
        createVisitTable(sqLiteDatabase); 
        createLiveTable(sqLiteDatabase); 
    
        Log.d(TAG, "onCreate: db created"); 
    } 
    
+0

谢谢它的工作 –

+1

@ModularSynth是的。更新我的回答:-P – nitesh

+0

@OmerHaqqani真棒。 – nitesh