2015-09-16 3 views
0

Я пытаюсь получить таблицу и обновить один из ее столбцов позже.Извлечь данные из базы данных SQLite и обновить ее

Я получил большую часть части, как вставка некоторых данных и извлечение их обратно, но я не могу обновить один из столбцов.

DBhelper.class:

String CREATE_USER_CONTACTS_TABLE = "CREATE TABLE " + TABLE_USER + "(" 
      + USER_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + USER_NAME 
     + " TEXT," 
      + USER_PH_NO + " TEXT" + USER_DISPLAY_NAME + " TEXT" + 
      USER_DISPLAY_PICTURE + " TEXT" + ")"; 
    db.execSQL(CREATE_USER_CONTACTS_TABLE); 


public void addUser(Database_Contact contact) { 
    SQLiteDatabase db = this.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 
    values.put(USER_NAME, contact.get_owner_name()); 
    values.put(USER_PH_NO, contact.get_owner_phone_number()); 

    // Inserting Row 
    db.insert(TABLE_USER, null, values); 
    db.close(); // Closing database connection 
} 
public List<Database_Contact> getAllDatabase_Users() { 
    List<Database_Contact> userList = new ArrayList<Database_Contact>(); 
    // Select All Query 
    String selectQuery = "SELECT * FROM " + TABLE_USER; 

    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 

    // looping through all rows and adding to list 
    if (cursor.moveToFirst()) { 
     do { 
      Database_Contact contact = new Database_Contact(); 
      contact.set_user_id(Integer.parseInt(cursor.getString(0))); 
      contact.set_owner_name(cursor.getString(1)); 
      contact.set_owner_phone_number(cursor.getString(2)); 
      // Adding contact to list 
      userList.add(contact); 
     } while (cursor.moveToNext()); 
    } 

    // return contact list 
    return userList; 
} 
public int setDisplayImage(long id,String path) { 
    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues values = new ContentValues(); 
    values.put(USER_DISPLAY_PICTURE, path); 
    // updating row 
    return db.update(TABLE_USER, values, USER_ID +"="+id,null); 
} 

DatabaseContact.class:

public class Database_Contact { 

//private variables 


int _user_id; 
String _display_name; 
String _display_picture; 
String _owner_phone_number; 
String _owner_name; 



public int get_user_id() { 
    return _user_id; 
} 

public void set_user_id(int _user_id) { 
    this._user_id = _user_id; 
} 




public String get_display_name() { 
    return _display_name; 
} 

public void set_display_name(String _display_name) { 
    this._display_name = _display_name; 
} 

public String get_display_picture() { 
    return _display_picture; 
} 

public void set_display_picture(String _display_picture) { 
    this._display_picture = _display_picture; 
} 

public String get_owner_phone_number() { 
    return _owner_phone_number; 
} 

public void set_owner_phone_number(String _owner_phone_number) { 
    this._owner_phone_number = _owner_phone_number; 
} 

public String get_owner_name() { 
    return _owner_name; 
} 

public void set_owner_name(String _owner_name) { 
    this._owner_name = _owner_name; 
} 

} 

Mainactivity.class:

mydb = new DBHelper(this); 
    List<Database_conytact> images = mydb.getAllDatabase_Users(); 
    mydb.setDisplayImage(images.get(0).get_user_id(), "String"); 

Я получаю следующее сообщение об ошибке:

android.database.sqlite.SQLiteException: near "Image": syntax error (code 1): , while compiling: UPDATE User SET Display Image=? WHERE user_id='1' at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:891) at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:502) at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) at android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:58) at android.database.sqlite.SQLiteStatement.(SQLiteStatement.java:31) at android.database.sqlite.SQLiteDatabase.updateWithOnConflict(SQLiteDatabase.java:1574) at android.database.sqlite.SQLiteDatabase.update(SQLiteDatabase.java:1522) at com.example.gnaveen.securityapp.DBHelper.setDisplayImage(DBHelper.java:296) at com.example.gnaveen.securityapp.DisplayPicture$1.onClick(DisplayPicture.java:61) at android.view.View.performClick(View.java:4789) at android.view.View$PerformClick.run(View.java:19881) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5293) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)

+0

Вы получаете какую-либо ошибку? что 'db.update (TABLE_USER, значения, USER_ID +" = "+ id, null);' возвращает? – Rustam

ответ

0

Ваше создание таблицы неправильно

String CREATE_USER_CONTACTS_TABLE = "CREATE TABLE " + TABLE_USER + "(" 
     + USER_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + USER_NAME 
    + " TEXT," 
     + USER_PH_NO + " TEXT" + USER_DISPLAY_NAME + " TEXT" + 
     USER_DISPLAY_PICTURE + " TEXT" + ")"; 

Вы отсутствуют некоторые запятые. Попробуйте

String CREATE_USER_CONTACTS_TABLE = "CREATE TABLE " + TABLE_USER + " (" + 
     USER_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + USER_NAME + 
     " TEXT, " + USER_PH_NO + " TEXT, " + USER_DISPLAY_NAME + " TEXT, " + 
     USER_DISPLAY_PICTURE + " TEXT)"; 

Вам нужно будет удалить анс переустановить приложение, для того, чтобы таблицы заново созданных

ошибку
+0

Я получаю сообщение об ошибке для create table android.database.sqlite.SQLiteException: дублированное имя столбца: отображение (код 1): при компиляции: CREATE TABLE, если НЕ СУЩЕСТВУЕТ User (user_id INTEGER PRIMARY KEY AUTOINCREMENT , имя_пользователя TEXT, user_phone_number TEXT, ТЕКСТ ТЕЛЕФОНА ТЕКСТА, ТЕКСТ ТЕЛЕФОНА ВЫЗОВА) –

+0

Поскольку вы используете ** SPACES ** в именах столбцов: 'Display Name TEXT, Display Image' Поэтому он пытается создать 2 столбца с именем 'Display'. –

+1

yap .... я исправил его уже и его работающий штраф ... anyways ty Frank –

0

Почему бы вам не попробовать это:

return db.update(TABLE_USER, values, USER_ID + "='" + id +"'", null); 

Надеется, что это работает для вас

+0

id длинный, поэтому цитата не обязательна – Rustam

0

попробовать это:

String where="USER_ID =?"; 
return db.update(TABLE_USER,values,where,new String[]{""+id}); 
0
  1. Какую ошибку вы получаете на самом деле ?? Исключение нулевого указателя?
  2. Из приведенного выше кода я получаю, что каждый раз, когда вы выполняете свой код, он создает таблицу, которая скорее используется.

    String CREATE_USER_CONTACTS_TABLE = "CREATE TABLE IF NOT EXISTS " +  TABLE_USER + "(" 
        + USER_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + USER_NAME +" TEXT," 
        + USER_PH_NO + " TEXT" + USER_DISPLAY_NAME + " TEXT" + 
        USER_DISPLAY_PICTURE + " TEXT" + ")"; 
    

Это создаст таблицу, только если она не существует!

0

SQL-синтаксис: есть пробел в имя_поле в StackTrace, который не подходит для sql.

"SET Display Image=?" 
Смежные вопросы