使用SQLite在表上插入数据时出错使用SQLite

问题描述:

我正在构建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 –

今天早上尝试使用模拟器运行/测试应用程序。幸运的是,它的工作原理是。我想这个问题是与我的设备或Android手机。要么它的空间有限,要么许可。但我现在好了,并感谢所有答案。

documentation说,insert()函数返回

新插入的行的行号,或-1,如果发生错误

ID是不一定1。您必须检查返回值不是错误值。

而使用insertOrThrow()代替获得有用的错误信息会更好。

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

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; 
    } 

插入方法

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不正确。