2017-12-04 13 views
-1

こんにちは、データベース内の既存の行を更新するためにSQLiteクエリを作成する方法を、ここに私のコードですが、それは動作しません:テーブルの行を更新するには?

public void update(int id, String name){ 
    SQLiteDatabase db = getWritableDatabase(); 
    String query = "UPDATE " + TABLE_NAME + 
      " SET " + COLUMN_TWO_ID + " = " + name + 
      " WHERE " + COLUMN_ONE_ID + " = " + id + ";"; 

    db.execSQL(query); 
    db.close(); 
} 

そしてこのlogcat:

android.database.sqlite.SQLiteException: no such column: jdjxjcii (code 1): , while compiling: UPDATE Contact SET name = jdjxjcii WHERE id = 20; 

UPDATE:

は、私はそれが文字列であるので、それは引用符がありませんでした、問題を解決しました

public void update(int id, String name){ 
     SQLiteDatabase db = getWritableDatabase(); 
     String query = "UPDATE " + TABLE_NAME + 
       " SET " + COLUMN_TWO_ID + " = \"" + name + "\"" + 
       " WHERE id = " + id + ";"; alors on choisi la colonne 

     db.execSQL(query); 
     db.close(); 
    } 

答えて

2
あなたの文字列パラメータは、クエリので、 エスケープされていない、とに連結されているので、おそらく原因とされて見ているエラーが文字列リテラル以外のものとして解釈されている

(例えば、列)。あなた名前の周りに単一引用符を置くことができますが、はるかに安全策は、単に学習のビットを行うと、プリペアドステートメントを使用することです:

String query = "UPDATE " + TABLE_NAME + 
     " SET " + COLUMN_TWO_ID + " = ?" 
     " WHERE " + COLUMN_ONE_ID + " = ?"; 

try (Connection conn = this.connect(); 
    PreparedStatement ps = conn.prepareStatement(query)) { 

    ps.setString(1, name); 
    ps.setInt(2, id); 
    ps.executeUpdate(); 
} catch (SQLException e) { 
    System.out.println(e.getMessage()); 
} 
0

は、最後にセミコロンを使用しないでください「;」;

ContentValues cv=new ContentValues(); 
    cv.put("Column","value"); 
    db.update("TABLE",cv,"id = ?", new String[]{"" + id}); 

文字列配列内のidは、あなたの行IDです:ある行を更新するための簡単な方法の

String query = "UPDATE " + TABLE_NAME + 
      " SET " + COLUMN_TWO_ID + " = " + name + 
      " WHERE " + COLUMN_ONE_ID + " = " + id + ""; 
+1

セミコロンターミネータが**完全に無視されます**。また、 '+ ''' **を追加すると目的はありません**。 –

0
public void update(int id, String name){ 
    SQLiteDatabase db = getWritableDatabase(); 
    String query = "UPDATE " + TABLE_NAME + 
      " SET " + COLUMN_TWO_ID + " = " + name + 
      " WHERE " + COLUMN_ONE_ID + " = " + id; 

    Cursor cursor = db.rawQuery(, null); 
    if (cursor != null) 
     cursor.moveToFirst(); 
    cursor.close(); 
    db.execSQL(query); 
    db.close(); 
} 
0

いずれかを使用します。

0

行を更新するためにSQLiteDatabaseの更新メソッドを使用すると、より簡単です。

public void update(int id, String name) 
{ 
    SQLiteDatabase db = getWritableDatabase(); 
    ContentValues cv = new ContentValues(); 
    cv.put(columnName, name); 

    long updateRow = db.update(DBConstant.TABLE_NAME, cv, COLUMN_ONE_ID + "=?", new String[]{String.valueOf(id)}); 
    return updateRow; 
} 
0

は見てみましょう:

public void updateUser(User user){ 

     SQLiteDatabase db = this.getWritableDatabase(); 

     ContentValues data=new ContentValues(); 
     data.put(COLUMN_USERNAME, user.getUsername()); 
     db.update(TABLE_USERS, data, KEY_USERID + "='" + user.getID()+"'" , null); 
     db.close(); 
    } 

は、ユーザー名の列がテーブルに存在することを確認します。

0

私は文字列であるので、それは引用符がありませんでした、問題を解決:

public void update(int id, String name){ 
     SQLiteDatabase db = getWritableDatabase(); 
     String query = "UPDATE " + TABLE_NAME + 
       " SET " + COLUMN_TWO_ID + " = \"" + name + "\"" + 
       " WHERE id = " + id + ";"; alors on choisi la colonne 

     db.execSQL(query); 
     db.close(); 
    } 
関連する問題