2010-09-21 41 views
19

tôi muốn cập nhật cơ sở dữ liệu lite sql của mình với phương thức cập nhật gốc của lớp SQLiteDatabase của android.cập nhật cơ sở dữ liệu sql với ContentValues ​​và phương thức cập nhật

ContentValues dataToInsert = new ContentValues();       
dataToInsert.put("name", "flo"); 
dataToInsert.put("location", "flotown"); 
String where = "id" + "=" + id; 
try{  
    db.update(DATABASE_TABLE, dataToInsert, where, null); 
} 
catch (Exception e){ 
    String error = e.getMessage().toString(); 
} 

nhưng tôi nhận lỗi sau: android.database.sqlite.SQLiteException: gần "15": Lỗi cú pháp:, khi biên dịch: UPDATE mytable SET vị trí = ?, name =? WHERE id = 2010-09-21 15: 05: 36.995

Tôi không biết điều gì sẽ là vấn đề. Bằng cách nào đó các giá trị không đến trong câu lệnh sql. Tôi đã làm gần như giống với phương pháp chèn và làm việc khá tốt.

nhiều thx, florian

+5

Tôi biết đây là bài cũ nhưng bạn sẽ không bao giờ sử dụng "id" sử dụng "_id" để thay thế. "_id" là một id phổ biến cho các cơ sở dữ liệu trong Android và được khuyên dùng. – Jona

Trả lời

45

Bạn đang sử dụng chức năng cập nhật sai. Cần phải như sau:

String where = "id=?"; 
String[] whereArgs = new String[] {String.valueOf(id)}; 

db.update(DATABASE_TABLE, dataToInsert, where, whereArgs); 

Các chuỗi trong mảng whereArgs được thay thế cho mỗi '?' trong biến nơi.

tức là. nếu bạn có where = "name =? AND type =? thì đầu tiên '?' sẽ được thay thế bởi whereArgs [0] và thứ hai bởi whereArgs [1]

+0

"Không thể gọi toString() trên kiểu nguyên thủy dài" – Mirko

+1

@Mirko: Sử dụng 'Long.toString (id)' thay thế! –

4

Trên thực tế, bạn chỉ cần thêm dấu nháy để mệnh đề where của bạn Vì vậy nó nên được:..

String where = "id='" + id + "'" 

(lưu ý: tuy nhiên, đây không phải là thực hành tốt nhất, vì nó về mặt lý thuyết để mở cho các cuộc tấn công tiêm)

0

Thực ra bạn viết chính xác điều gì là chính xác. "=" + id; Trong khai báo ở trên "id" phải là loại số và id phải là int. Và nếu id là một loại TEXT thì hãy làm theo câu trả lời @Adam javin.

0

Tôi có một cách tiếp cận khác

public boolean updateEmployee(TalebeDataUser fav) { 

    SQLiteDatabase database = dbHelper.getWritableDatabase(); 
    ContentValues contentValues = new ContentValues(); 
    contentValues.put(DBHelper.COLUMN_ID, fav.getId()); 
    contentValues.put(DBHelper.COLUM_AD, fav.getAd()); 
    contentValues.put(DBHelper.COLUMN_NUMARA, fav.getNumara()); 
    contentValues.put(DBHelper.COLUMN_YURD_ID, fav.getYurtID()); 
    contentValues.put(DBHelper.COLUMN_EGITIM_ID, fav.getEgitimTur()); 
    contentValues.put(DBHelper.COLUMN_TEL, fav.getTel()); 
    contentValues.put(DBHelper.COLUMN_EMAIL, fav.getEmail()); 
    contentValues.put(DBHelper.COLUMN_ADDRESS, fav.getAdres()); 

    String whereClause = DBHelper.COLUM_AD + " = ? AND " + DBHelper.COLUMN_NUMARA + " = ? "; 
    final String whereArgs[] = {fav.getAd(), String.valueOf(fav.getNumara())};// old nameler taranıyor 
    int affectedRows = database.update(DBHelper.TABLE_NAME_OGR, contentValues, whereClause, whereArgs); 
    return affectedRows > 0; 
} 
Các vấn đề liên quan