【问题标题】:How can i create a third column for integer values?如何为整数值创建第三列?
【发布时间】:2019-01-26 16:29:23
【问题描述】:

我想在 Java 中使用 SQL Lite 创建一个 SQL 数据库。

String createTable = "CREATE TABLE " + TABLE_NAME
            + " (ID INTEGER PRIMARY KEY AUTOINCREMENT, "
            + COL2 +" TEXT, "
            + COL3 +" INTEGER"
            + ")";

我有这个 getTime 方法:

public Cursor getTime(String name){
    SQLiteDatabase db = this.getWritableDatabase();
    String query = "SELECT " + COL3 + " FROM " + TABLE_NAME +
            " WHERE " + COL2 + " = '" + name + "'";
    Cursor data = db.rawQuery(query, null);
    return data;
}

还有一种更新时间的方法:

public void updateTime(int id, String name, int time) {
    SQLiteDatabase db = this.getWritableDatabase();
    String query = "UPDATE " + TABLE_NAME + " SET " + COL3 +
            " = '" + time + "' WHERE " + COL1 + " = '" + id + "'" +
            " AND " + COL2 + " = '" + name + "'";
    Log.d(TAG, "updateName: query: " + query);
    Log.d(TAG, "updateName: Setting time to " + time);
    db.execSQL(query);
}

我像这样使用 getTime():

Cursor test = mDatabaseHelper.getTime(selectedName);
    int timeTest = test.getInt(0); <-- Error here!
    System.out.print(timeTest);

由于某种原因,任何事情都无法按照我想要的方式工作。 感谢您的帮助:D

【问题讨论】:

  • 请在此处解释“不工作”对您意味着什么。
  • 光标测试 = mDatabaseHelper.getTime(selectedName); int timeTest = test.getInt(0);
  • 如果不使用命令参数,至少要转义单引号以防止SQL Injection" = '" + name.Replace("'", "''") + "'".

标签: java sql sqlite


【解决方案1】:

您必须检查Cursor 是否已获取任何带有moveToFirst() 的行:

Cursor test = mDatabaseHelper.getTime(selectedName);
int timeTest = 0;
if (test.moveToFirst()) {
    timeTest = test.getInt(0); 
    System.out.print(timeTest);
} else {
    System.out.print("No rows matching");
}

编辑
您问题的标题似乎与您稍后提到的所有内容无关,
但是是否存在您已经创建表格的情况
现在你想添加COL3 列?
如果是这样,请卸载该应用程序,以便删除数据库并重新运行,以便使用新列重新创建它。
如果表已经存在,CREATE TABLE... 语句中的代码不会创建表。

【讨论】:

    猜你喜欢
    • 2022-01-17
    • 1970-01-01
    • 2019-11-10
    • 2023-02-21
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    • 2015-04-04
    • 1970-01-01
    相关资源
    最近更新 更多