具有表名称为status并且列名称为column1的数据库。 我需要更新。

我在Activity1中有一个字符串值

String check ="value";

我已经将此值传递到我的DBHelper中。

dbhelper = new DBHelper(this);

dbhelper.sample(check);

我在DBHelpe r.here中得到了这个值。 像这样

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)

您忘记在查询中添加Table Name

状态是我的表名

您的任何查询都不适合我。 它显示类型不匹配:无法从void转换为Cursor

@MakeitSimple您是OP吗? 根据您的评论,您会表现得很像。 请仅使用一个帐户,这样您就不会因举报此类问题而被举报。

@laalto确实,所有用户都在这里提供正确答案和正确建议。

@laalto我尝试在应用程序关闭时将值传递给dbhelper中的该方法时尝试其不起作用。

@MD我尝试在应用程序关闭时将值传递给dbhelper中的该方法时尝试其不起作用。

那是一个单独的问题。 请从logcat发布异常stacktrace。

@BalamuruganRadhakrishnan这个问题不是关于查询LOL发布您的logcat以便更好地低估的

@laalto我在logcat中没有得到任何异常

@laalto我有空指针异常

您可以直接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);

无效的execSQL(String sql)

执行一个不是SELECT的SQL语句或任何其他返回数据的SQL语句。

它无法返回任何数据(例如受影响的行数)。相反,建议您尽可能使用insert(String,String,ContentValues,update(String,ContentValues,String,String [])等。

它显示类型不匹配:无法从void转换为Cursor

rawQuery()实际上没有运行SQL。使用execSQL()代替:

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

(请参阅使用查询字符串在Android SQLiteDatabase中执行插入/更新/删除的正确方法是什么,以了解rawQuery()和execSQL()的幕后工作方式。)

不起作用..显示..类型不匹配:无法从void转换为Cursor

execSQL()不返回Cursor,因此您不能将返回值分配给游标。

它显示类型不匹配:无法从void转换为Cursor

只需删除Cursor cursor =

我试过了,它没有更新,应用程序关闭了。

遵循此代码,它返回编号。更新时影响的行数。

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;

}

其中helper是扩展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);

}

}

}

无法获取您的代码。

香港专业教育学院更新了我的答案,现在您可以尝试一下。

更新您的以下行代码,

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子句

我试过它显示类型不匹配:无法从void转换为Cursor

@BalamuruganRadhakrishnan查看我的最新答案。

我已经尝试过该查询,..它没有更新。应用程序关闭,该值将传递给该方法。

@BalamuruganRadhakrishnan这行Log.d("sucess",prms);在DDMS上打印什么?

是的,它在日志猫中打印

您可以再次在示例中粘贴sample()方法的代码吗?

public void sample(String prms){Log.d(" sucess",prms); SQLiteDatabase db = this.getWritableDatabase(); db.execSQL("更新状态SET column1 =" + prms +" WHERE id = 5",空); }

@BalamuruganRadhakrishnan为什么要传递第二个参数null?看我的答案。

@BalamuruganRadhakrishnan查看我的最新答案

是的,我给了那样,它没有更新。在例外情况下抛出其他表名

您可以在这里发布错误吗?

看到我的编辑代码,@Kedarnath例外

@BalamuruganRadhakrishnan,这是一个新错误。我想这是来自其他方面。

是的,它来自其他地方。我不知道为什么它来。

那么如果没有代码,我怎么能看到它呢?

检查此pastebin.com/fLLwQmsY @kedarnath

@BalamuruganRadhakrishnan在此代码中没有问题。由于这是一个新问题,因此我建议您发布一个新问题。

好,谢谢老兄@Kedarnath

我没有得到解决方案@Kedarnath

好,我已经成功解决了您的更新查询。

db.execSQL("更新状态SET column1 ='" + prms +"'",null);

不起作用..显示..类型不匹配:无法从void转换为Cursor

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐