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

时间:2017-04-07 08:57:53

标签: android database sqlite insert

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

我的代码出了什么问题?希望你理解我的询问..

4 个答案:

答案 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手机。要么它有限的空间或某种许可。但是我现在好了,感谢所有答案。