我正在构建Android移动应用程序,我使用SQLite作为其数据库。我在桌面上插入记录时遇到问题,它返回Toast消息“插入失败”意味着保存数据不成功。
Application
我在onClick事件中使用了下面的代码,这应该触发在表上插入数据。
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;
}
}
我的代码出了什么问题?希望你理解我的询问..
答案 0 :(得分:0)
documentation表示insert()
函数返回
新插入行的行ID,如果发生错误,则返回-1
ID不一定是1
。您必须检查返回值是否为错误值。
最好使用insertOrThrow()
来获取有用的错误消息。
答案 1 :(得分:0)
更改您的if条件,如下所示:
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;
}
答案 2 :(得分: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 如果返回大于零,那么插入是正确的。这是不正确的。
答案 3 :(得分:0)
今天早上尝试使用模拟器运行/测试应用程序。幸运的是,可行。我猜问题是我的设备或Android手机。要么它有限的空间或某种许可。但是我现在好了,感谢所有答案。