2017-04-07 80 views
0

我正在構建android移動應用程序,並使用SQLite作爲其數據庫。我無法在表格上插入記錄,並且它返回Toast消息,它是「插入失敗」意味着保存數據失敗。使用SQLite在表上插入數據時出錯使用SQLite

public class DatabaseHelper extends SQLiteOpenHelper { 

    public static final String DATABASE_NAME = "MobileBuddy.db"; 
    public static final String TABLE_NAME = "bets_table"; 
    public static final String COL_1 = "COMBINATION"; 
    public static final String COL_2 = "DRAW_DATE"; 
    public static final String COL_3 = "TRANS_DATE"; 

    public DatabaseHelper(Context context) { 
     super(context, DATABASE_NAME, null, 1); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL("CREATE TABLE " + TABLE_NAME + "(" + COL_1 + " TEXT, " + COL_2 + " DATETIME, " + COL_3 + " DATETIME)"); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); 
     onCreate(db); 
    } 

    public boolean insertBetData(String combination, String drawDate, String transDate) { 
     SQLiteDatabase db = this.getWritableDatabase(); 
     ContentValues contentValues = new ContentValues(); 
     contentValues.put(COL_1, combination); 
     contentValues.put(COL_2, drawDate); 
     contentValues.put(COL_3, transDate); 
     long result = db.insert(TABLE_NAME, null, contentValues); 
     if (result == 1) return true; else return false; 
    } 
} 

我用下面的代碼中的onClick事件,這應該觸發數據的插入在桌子上。

calendar = Calendar.getInstance(); 
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd"); 
boolean isSave = lottoDb.insertBetData(validBet, sdf.format(calendar.getTime()), sdf.format(calendar.getTime())); 
if (isSave == true) 
    Toast.makeText(PlaySixNumbers.this, "Inserted", Toast.LENGTH_SHORT).show(); 
else 
    Toast.makeText(PlaySixNumbers.this, "Insert failed", Toast.LENGTH_SHORT).show(); 

我的代碼有什麼問題?希望你能理解我的詢問..

+0

附上你的logcat輸出 – surya

+0

嘗試把.. sdf.format(calendar.getTime())放到一個String中......並將這個String傳遞給你的insertMethod –

回答

0

今天早上嘗試使用模擬器運行/測試應用程序。幸運的是,它的工作原理是。我想這個問題是與我的設備或Android手機。要麼它的空間有限,要麼許可。但我現在好了,並感謝所有答案。

0

documentation說,insert()函數返回

新插入的行的行號,或-1,如果發生錯誤

ID是不一定1。您必須檢查返回值不是錯誤值。

而使用insertOrThrow()代替獲得有用的錯誤信息會更好。

0

更改你的,如果條件如下:

public boolean insertBetData(String combination, String drawDate, String transDate) { 
     SQLiteDatabase db = this.getWritableDatabase(); 
     ContentValues contentValues = new ContentValues(); 
     contentValues.put(COL_1, combination); 
     contentValues.put(COL_2, drawDate); 
     contentValues.put(COL_3, transDate); 
     long result = db.insert(TABLE_NAME, null, contentValues); 
     if (result >= 1) return true; else return false; 
    } 
0

插入方法

public Integer insertBetData(String combination, String drawDate, String transDate) { 
     SQLiteDatabase db = this.getWritableDatabase(); 
     ContentValues contentValues = new ContentValues(); 
     contentValues.put(COL_1, combination); 
     contentValues.put(COL_2, drawDate); 
     contentValues.put(COL_3, transDate); 
     long BetId = db.insert(TABLE_NAME, null, contentValues); 
     return BetId; 
} 

,並使用如下插入方法:

calendar = Calendar.getInstance(); 
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd"); 
    String drawDate = sdf.format(calendar.getTime()); 
    String transDate = sdf.format(calendar.getTime()); 
    Integer BetId = lottoDb.insertBetData(validBet,drawDate,transDate); 
    Toast.makeText(PlaySixNumbers.this, "Inserted Id is "+ BetId, Toast.LENGTH_SHORT).show(); 

現在,選中此BetId如果它返回的大於零,那麼你的插入是Correct.else不正確。

相關問題