【问题标题】:Getting error on inserting data on table using SQLite使用 SQLite 在表上插入数据时出错
【发布时间】:2017-04-07 08:57:52
【问题描述】:

我正在构建 android 移动应用程序,并使用 SQLite 作为其数据库。我在表上插入记录时遇到问题,它返回一个 Toast 消息,该消息是“插入失败”,表示保存数据不成功。

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();

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

【问题讨论】:

  • 附加你的 logcat 输出
  • 尝试将.. sdf.format(calendar.getTime()) 放入一个字符串...并将此字符串传递给您的 insertMethod

标签: android database sqlite insert


【解决方案1】:

documentation 表示insert() 函数返回

新插入行的行 ID,如果发生错误,则为 -1

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

最好使用insertOrThrow() 来获取有用的错误消息。

【讨论】:

    【解决方案2】:

    改变你的 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;
        }
    

    【讨论】:

      【解决方案3】:

      您的插入方法

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

      并使用 Insert 方法如下:

      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,如果它返回大于零,那么您的 insert 是正确的。否则不正确。

      【讨论】:

        【解决方案4】:

        今天早上尝试使用模拟器运行/测试该应用。幸运的是,它可以工作。我想问题出在我的设备或安卓手机上。它要么有有限的空间,要么有某种许可。但我现在很好,感谢所有答案。

        【讨论】:

          猜你喜欢
          • 2012-03-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-05-02
          • 1970-01-01
          • 1970-01-01
          • 2012-10-30
          • 2015-09-18
          相关资源
          最近更新 更多