【问题标题】:SQLite: how do I fix syntax on INSERT INTO?SQLite:如何修复 INSERT INTO 的语法?
【发布时间】:2016-09-06 07:51:08
【问题描述】:

我有一个 CARDNUM 列,我试图在名为 TOTALCOUNT 的表中增加 +1。应用程序因“SET”附近的语法错误而崩溃

这是我的 INSERT 语句:

db.execSQL("INSERT INTO "+ DBContract.DBEntry.TABLE_NAME_TOTALCOUNT+" SET "+ DBContract.DBEntry.COLUMN_NAME_CARDNUM + "="+ DBContract.DBEntry.COLUMN_NAME_CARDNUM+"+1");

我做错了什么?

private static final String SQL_CREATE_CARDNUM =
            "CREATE TABLE IF NOT EXISTS "+ DBContract.DBEntry.TABLE_NAME_TOTALCOUNT +
            "( "+ DBContract.DBEntry.COLUMN_NAME_COUNTID +
            " INTEGER PRIMARY KEY UNIQUE , "+
            DBContract.DBEntry.COLUMN_NAME_CARDNUM +
            " INTEGER DEFAULT 1);";


// Push the database data to the RecyclerView
public List<UserData> getDataFromDB(){
    List<UserData> modelList = new ArrayList<>();        
    String query = "SELECT *,(SELECT " + DBContract.DBEntry.COLUMN_NAME_CARDNUM +
            " from " + DBContract.DBEntry.TABLE_NAME_TOTALCOUNT +") from "
            + DBContract.DBEntry.TABLE_NAME_USERINPUTS +";";

    SQLiteDatabase db = this.getReadableDatabase();

    db.beginTransaction();

    Cursor cursor = db.rawQuery(query, null);

        try {
            if (cursor.moveToFirst()) {
                do {
                    UserData userData = new UserData();
                    userData.setTodo(cursor.getString(1));
                    userData.setNote1(cursor.getString(2));
                    userData.setNote2(cursor.getString(3));
                    userData.setDuedate(cursor.getString(4));
                    userData.setDuetime(cursor.getString(5));
                    userData.setTimestamp(cursor.getLong6));
                    userData.setCardnum(cursor.getInt(7));

                    modelList.add(0, userData);
                    } while (cursor.moveToNext());
            }
        } finally {
              if(cursor !=null && !cursor.isClosed()){
              cursor.close();
              }
          }
    db.setTransactionSuccessful();
    db.endTransaction();
    return modelList;
}

CARDNUM 的 Logcat 显示“(SELECT cardnum from totalcount)=0。

【问题讨论】:

  • 据我所知,您不能在 INSERT 中使用“set”。它在更新中。如果我错了,请纠正我。
  • 好的,但是没有更新。
  • 查看@Hello World 的回答
  • 请参考:w3schools.com/sql/sql_insert.asp.. 您的插入查询错误..!!
  • @janki gadhiya 谢谢,我会检查一下...但请告诉我具体出了什么问题!

标签: android sqlite android-sqlite insert-into


【解决方案1】:

您的 INSERT 语法不正确。

请参阅以下内容:

http://www.sqlitetutorial.net/sqlite-insert http://www.techonthenet.com/sqlite/insert.php

例如:

INSERT INTO table1 (
 column1,
 column2 ,..)
VALUES
 (
 value1,
 value2 ,...);

【讨论】:

    【解决方案2】:

    试试这个

    db.execSQL("UPDATE "+ DBContract.DBEntry.TABLE_NAME_TOTALCOUNT+" SET "+ DBContract.DBEntry.COLUMN_NAME_CARDNUM + "="+ DBContract.DBEntry.COLUMN_NAME_CARDNUM+"+1");
    

    建议使用WHERE 设置id 来更新特定行。

    【讨论】:

    • 我想使用 INSERT 向列中添加新行。我认为 UPDATE 应该只用于编辑/更新现有的行数据。请指教。
    • 如果行不存在,您希望如何将 CARDNUM 增加 1?
    • 建表时CARDNUM默认值为1:"...COLUMN_NAME_CARDNUM + " INTEGER DEFAULT 1)"
    • 在这种情况下,您必须仅使用INSERT 查询并将2 设置为CARDNUM 列的值
    • 为什么是 2?你在哪里设置值?我以为主键是 0 列,CARDNUM 列是 1,对吗?
    【解决方案3】:

    您正在尝试使用 INSERT 增加列,但这是无法完成的。但是如果你还想使用INSERT语句,那么你不能在INSERT中使用SETINSERT 操作应如下所示:

    INSERT INTO TABLE_NAME (cloumn1_name, column2_name, column3_name) VALUES (column1_value,cloumn2_value,column3_value)
    

    您可以通过 INSERT 语句更新值。如果你想更新一个值,你必须使用 UPDATE 语句。在这种情况下,UPDATE 语句如下所示:

    UPDATE table_name SET column1 = value1, column2 = value2...., columnN = valueN WHERE [condition];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-27
      • 1970-01-01
      • 2018-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-06
      相关资源
      最近更新 更多