android.database.sqlite.SQLiteException : unrecognized token:

标签 android database sqlite

我尝试更新数据库表,这是我的代码:

public void updatefiletable(String filename, String v1, String v2){
  AndroidOpenDbHelper androidOpenDbHelperObj = new AndroidOpenDbHelper(this);
  SQLiteDatabase sqliteDatabase = androidOpenDbHelperObj.getWritableDatabase();

  ContentValues values = new ContentValues();
  values.put(AndroidOpenDbHelper.COLLUMN_NAME_FILE_CLOUD, v1);
  values.put(AndroidOpenDbHelper.COLLUMN_NAME_FILE_DATE_UPLOADING, v2);
  sqliteDatabase.update(AndroidOpenDbHelper.TABLE_FILE, values, AndroidOpenDbHelper.COLUMN_NAME_FILE_NAME+"="+filename, null);

  sqliteDatabase.close();    
}

当我使用 file_name 值 egal priv_priv_secondfile_2012-06-15.pdf 调用我的方法时,我在 logcat 中得到了它:

android.database.sqlite.SQLiteException: unrecognized token: "15.pdf": ,
while compiling: UPDATE file_table SET file_cloud_column=?, 
file_date_upload_column=? 
WHERE file_name_column=priv_priv_secondfile_2012-06-15.pdf

我该如何解决?

最佳答案

您需要转义文件名参数。文件名中的标点符号混淆了 SQLite。您可以通过将文件名括在传递给 SQLite 的字符串中的 'single quotes' 中来实现,但将其作为单独的参数传递更简洁、更安全,如下所示:

sqliteDatabase.update(AndroidOpenDbHelper.TABLE_FILE, values,
        AndroidOpenDbHelper.COLUMN_NAME_FILE_NAME+"=?", new String[] {filename});

关于android.database.sqlite.SQLiteException : unrecognized token:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11058063/

相关文章:

c# - Xamarin - Customrenderer 出现 2 个错误

java - 如何通过 JNI 将结构从 C 传回 Java

sql - MS Sql 全文搜索与 LIKE 表达式

android - 如何从 Android 中的 EditText 中读取单个字符?

android - 使用 Admob 广告将 Android 应用程序上传到应用商店

php - 需要帮助查询竞赛获胜者的数据库

mysql - Sequelize db :seed:all . 不起作用

mysql - 添加列和对具有 NULL 值的列求和之间的 SQL 差异

python - Pytest 在 GitHub Actions 上失败,但在本地成功

c# - ManyToOne 关系上的 Xamarin.Forms Sqlite-net NotSupportedException "Don' 不了解 <model>"