4

データベーステーブルを更新しようとしましたが、これが私のコードです。

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値を使用してメソッドを呼び出すとegalpriv_priv_secondfile_2012-06-15.pdflogcatで取得します。

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

どうすれば修正できますか?

4

1 に答える 1

17

filenameパラメータをエスケープする必要があります。ファイル名の句読点はSQLiteを混乱させます。SQLiteに渡す文字列でファイル名を囲むことでそれを行うことができますが'single quotes'、次のように別の引数として渡す方がよりクリーンで安全です。

sqliteDatabase.update(AndroidOpenDbHelper.TABLE_FILE, values,
        AndroidOpenDbHelper.COLUMN_NAME_FILE_NAME+"=?", new String[] {filename});
于 2012-06-15T20:57:25.553 に答える