Как обновить мое строковое значение в базе данных

Имейте базу данных с именем таблицы status и именем столбца column1. Мне нужно обновить это.

У меня есть строковое значение в Activity1

String check = "value";

Я передал это значение в свой DBHelper. Я пробовал так

dbhelper = new DBHelper(this);
dbhelper.sample(check);

Я получил это значение в DBHelper.здесь. Как это

public void sample(String prms){
Log.d("sucess",prms);
}

Теперь, как мне нужно обновить String prms в моей базе данных имя столбца column1

Я пробовал вот так

public  void sample( String prms) {
        Log.d("DBHELPER SUCCESS", prms);

        try{
            SQLiteDatabase db1 = this.getWritableDatabase(); 
            db1.execSQL("update appstatus SET status = '"+prms+"' WHERE id = 1 ");
        }catch(Exception e){
            System.out.println("GET SAMPLE VALUE"+e);
        }
    }

Что не так с моим синтаксисом? Как этого добиться?

Он показывает исключение как

02-28 12:09:45.604: I/System.out(4975): GET SAMPLE VALUEandroid.database.sqlite.SQLiteException: table report already exists (code 1): , while compiling: create table report(level TEXT, topic TEXT,  start TEXT, end TEXT, date TEXT)

person Balamurugan Radhakrishnan    schedule 27.02.2014    source источник
comment
Вы забыли добавить Table Name в запрос   -  person M D    schedule 27.02.2014
comment
статус - это имя моей таблицы   -  person Make it Simple    schedule 27.02.2014
comment
любой ваш запрос не работает для меня. он показывает несоответствие типа: невозможно преобразовать из void в Cursor   -  person Balamurugan Radhakrishnan    schedule 27.02.2014
comment
@MakeitSimple Ты ОП? Судя по вашим комментариям, вы ведете себя так. Пожалуйста, используйте только одну учетную запись, чтобы вас не пометили за голосование за sockpuppet или что-то в этом роде.   -  person laalto    schedule 27.02.2014
comment
@laalto Здесь точно все пользователи дают правильный ответ с правильным предложением.   -  person M D    schedule 27.02.2014
comment
@laalto я пробовал, он не работает, когда я передаю значение этому методу в dbhelper, когда приложение закрывается..   -  person Balamurugan Radhakrishnan    schedule 27.02.2014
comment
@MD, я пробовал, он не работает, когда я передаю значение этому методу в dbhelper, когда приложение закрывается.   -  person Balamurugan Radhakrishnan    schedule 27.02.2014
comment
Это отдельная тема. Пожалуйста, опубликуйте трассировку стека исключений из logcat.   -  person laalto    schedule 27.02.2014
comment
@BalamuruganRadhakrishnan, эта проблема не о запросе, LOL, опубликуйте свой логарифм для лучшего занижения   -  person M D    schedule 27.02.2014
comment
@laalto я не получил никаких исключений в logcat   -  person Balamurugan Radhakrishnan    schedule 27.02.2014
comment
@laalto Я получил исключение нулевого указателя   -  person Balamurugan Radhakrishnan    schedule 28.02.2014


Ответы (5)


rawQuery() на самом деле не запускает SQL. Вместо этого используйте execSQL():

db.execSQL("update status SET column1 = '"+prms+"' ");

(См. Каков правильный способ вставки/обновления/удаления в Android SQLiteDatabase с использованием строки запроса? чтобы узнать больше о том, как rawQuery() и execSQL() работают под капотом.)

person laalto    schedule 27.02.2014
comment
Не работает.. показывает.. Несоответствие типов: невозможно преобразовать из void в Cursor - person Make it Simple; 27.02.2014
comment
execSQL() не возвращает Cursor, поэтому вы не можете присвоить возвращаемое значение курсору. - person laalto; 27.02.2014
comment
он показывает несоответствие типа: невозможно преобразовать из void в Cursor - person Balamurugan Radhakrishnan; 27.02.2014
comment
Просто удалите Cursor cursor = - person laalto; 27.02.2014

Вы можете напрямую Execute выполнить этот запрос, например:

db.execSQL("update status SET column1 = '"+prms+"' ", null);

Вы должны заменить свой код

Cursor cursor = db.execSQL("update status SET column1 = '"+prms+"' ", null);

С

db.execSQL("update status SET column1 = '"+prms+"' ", null);

void execSQL(строка sql)

Выполните один оператор SQL, который НЕ является оператором SELECT или любым другим оператором SQL, возвращающим данные.

У него нет возможности вернуть какие-либо данные (например, количество затронутых строк). Вместо этого рекомендуется использовать insert(String, String, ContentValues, update(String, ContentValues, String, String[]) и т. д., когда это возможно.

person M D    schedule 27.02.2014
comment
он показывает несоответствие типа: невозможно преобразовать из void в Cursor - person Balamurugan Radhakrishnan; 27.02.2014

db.execSQL("статус обновления SET column1 = '"+prms+"' ", null);

person Bhanu Sharma    schedule 27.02.2014
comment
Не работает.. показывает.. Несоответствие типов: невозможно преобразовать из void в Cursor - person Make it Simple; 27.02.2014

Следуйте этому коду, он возвращает нет. строк, произведенных при обновлении.

SQLiteHelper helper;
public int updateName(String oldName,String newName)
{
SQLiteDatabase db = helper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(this.NAME, newName);
String [] whereArgs={oldName};

int count = db.update(helper.TABLE_NAME, values, helper.NAME+" =? ",whereArgs);
 return count;
 }

где помощник — это объект класса, который расширяет SQLiteOpenHelper, как в приведенном ниже коде.

static class SQLiteHelper extends SQLiteOpenHelper
{
 ....////
 private static final String DATABASE_NAME = "databaseName";
 private static final String TABLE_NAME = "TABLENAME";
 private static final int DATABASE_VERSION = 1;
 private static final String UID = "_id";
 private static final String NAME = "Name";
 private static final String PASSWORD = "Password";
 private static final String CREATE_TABLE ="CREATE TABLE "+ TABLE_NAME +"(" + UID + " INTEGER PRIMARY KEY AUTOINCREMENT," + NAME + " VARCHAR(255)," + PASSWORD + " VARCHAR(255));";

 public SQLiteHelper(Context context) 
 {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
    this.context = context;
    Message.Message(context, "Constructor Called");


}

@Override
public void onCreate(SQLiteDatabase db) {
    // TODO Auto-generated method stub


    try {
        Message.Message(context, "OnCreate Called");
        db.execSQL(CREATE_TABLE);
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        Message.Message(context, "" + e);
    }

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // TODO Auto-generated method stub

    try {
        Message.Message(context, "onUpgrade Called");
        db.execSQL(DROP_TABLE);
        onCreate(db);
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        Message.Message(context, ""+e);
    }

}
      }
person Pankaj    schedule 27.02.2014

Обновите следующий код строки,

Cursor cursor = db.rawQuery("update status SET column1 = '"+prms+"' ", null);

к этой линии

db.execSQL( "update status SET column1 = '"+prms+"' " );

Итак, ваш метод будет выглядеть так,

public void sample(String prms)
{ 
    Log.d("sucess",prms); 
    SQLiteDatabase db = this.getWritableDatabase(); 
    db.execSQL("update status SET column1 = '"+prms+"'WHERE id = '5' " );   // remove second param from here.
} 

Внимание! Этот запрос обновит всю строку Column1; Вы должны включить пункт where

person Lucifer    schedule 27.02.2014
comment
я пробовал, показывает несоответствие типа: невозможно преобразовать из void в Cursor - person Balamurugan Radhakrishnan; 27.02.2014
comment
Я пробовал этот запрос, он не обновляется. приложения закрываются, значение передается этому методу. - person Balamurugan Radhakrishnan; 27.02.2014
comment
@BalamuruganRadhakrishnan, что эта строка Log.d("sucess",prms); печатает в DDMS? - person Lucifer; 27.02.2014
comment
Вы можете снова вставить код метода sample() сюда, в комментарий? - person Lucifer; 27.02.2014
comment
public void sample (String prms) { Log.d (успех, prms); SQLiteDatabase db = this.getWritableDatabase(); db.execSQL (статус обновления SET column1 = '+prms+'WHERE id = '5', null); } - person Balamurugan Radhakrishnan; 27.02.2014
comment
@BalamuruganRadhakrishnan, почему вы передаете второй параметр null? см. мой ответ. - person Lucifer; 27.02.2014
comment
да я дал так, он не обновлялся. в исключении выдает какое-то другое имя таблицы - person Balamurugan Radhakrishnan; 28.02.2014
comment
@BalamuruganRadhakrishnan, это новая ошибка. Я предполагаю, что это исходит из других линий. - person Lucifer; 28.02.2014
comment
да это идет откуда-то еще. Я не знаю, почему это происходит. У меня есть исключение для печати в этом методе. - person Balamurugan Radhakrishnan; 28.02.2014
comment
Тогда без кода, как я могу что-то увидеть об этом? - person Lucifer; 28.02.2014
comment
@BalamuruganRadhakrishnan, в этом коде нет проблем. Поскольку это новая проблема, я хотел бы предложить вам опубликовать новый вопрос. - person Lucifer; 28.02.2014
comment
Я не нашел решения @Kedarnath - person Balamurugan Radhakrishnan; 28.02.2014