使用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();
我的代码有什么问题?希望你能理解我的询问..
答
今天早上尝试使用模拟器运行/测试应用程序。幸运的是,它的工作原理是。我想这个问题是与我的设备或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不正确。
附上你的logcat输出 – surya
尝试把.. sdf.format(calendar.getTime())放到一个String中......并将这个String传递给你的insertMethod –