【问题标题】:Sqlite Database Error : SQLiteLog: (1) near "s": syntax errorSqlite 数据库错误:SQLiteLog:(1)“s”附近:语法错误
【发布时间】:2016-03-30 03:53:59
【问题描述】:

我无法弄清楚此错误的含义: SQLiteLog:(1)“s”附近:语法错误 主要是因为我找不到它正在运行的数据库。

我正在构建一个电影数据库 Android 应用程序,我在原始目录中的数据库文件保持不变,我找不到构建运行的数据库来解决这个问题。

使用 OMDB api 时,电影会添加到我的本地数据库中,而有些则不会。

我用来添加的命令是:

MovieDB db = new MovieDB((Context) this);
SQLiteDatabase movDB = db.openDB();
String insert = "insert into movies values('" + movie.title + "','" + movie.year + "','" + movie.rated + "','" + movie.released + "','" + movie.runtime + "','" + movie.genre + "','" + movie.actors + "','" + movie.plot + "',null);";
movDB.execSQL(insert);

我觉得它必须在最后使用 null,因为在我的数据库中我有一个自增 ID,我认为如果我传递 null,它只会分配一个值。

任何见解将不胜感激!

【问题讨论】:

  • 在这里观看,null);";。这可能是因为分号和null
  • 删除,空。 id(假设是整数主键)将设置为唯一值。
  • 可能是因为带有未转义的单引号的值导致您的一个字符串出现问题?
  • 我认为您应该将null 替换为''

标签: android mysql database sqlite


【解决方案1】:

在 SQLITE 中插入行的推荐方法是使用比执行查询更好的 contentvalues。下面的例子,

public void addMovie(String title, int year){
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("title", title);
        values.put("year", year);
        db.insert(TABLE_MOVIES, null, values);
        db.close();
    }

【讨论】:

  • 解决了,谢谢!根据自己的知识,您或任何人是否知道为什么我的方式适用于某些电影而不适用于其他电影,但您的方式适用于所有人?
  • db.insert() 方法中的第二个参数可以做到这一点。在这里的文档中有更好的解释。检查 insert() 文档developer.android.com/intl/es/reference/android/database/sqlite/…
  • Aw 是有道理的,有些值为 null,中间的 null 值(称为 NullColumnHack)将允许未给出的属性为 null。因此,为什么有些插入有效而有些无效,因为被拒绝的插入必须具有空值/未寻址值。再次感谢@Thahaseen!
猜你喜欢
  • 2016-06-22
  • 2019-05-18
  • 1970-01-01
  • 1970-01-01
  • 2020-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多