更新SQL会抛出异常

时间:2012-04-19 19:47:00

标签: java android sqlite

我正在尝试在android上的sqlite数据库上更新整行。但出于某种原因,抛出异常。

更新我的数据库的方法是:

public void updateEvent(long rowId,Evento evento){
        int row=(int)rowId;
        ContentValues eventValues=createContentValues(evento);
        db.update(TABLE,eventValues,KEY_ROWID+"="+row,null);
    }

createContentValues方法是这样的:

private ContentValues createContentValues(Evento evento){
        ContentValues val=new ContentValues();
        val.put(KEY_ROWID,evento.getIdEvento());
        val.put(KEY_SUMMARY,evento.getSummario());
        val.put(KEY_DAY,evento.getFecha().getDia());
        val.put(KEY_MONTH,evento.getFecha().getMes());
        val.put(KEY_YEAR,evento.getFecha().getAnho());
        val.put(KEY_STATUS,evento.getStatus());
        val.put(KEY_NOTES, evento.getNota());
        return val;
    }

,调用update方法的方法是:

private void acceptAction(Evento evnt,String note){
        DbAdapter dbConn=new DbAdapter(this.getApplicationContext());
        evnt.setNota(note);
        try{
        dbConn.updateEvent(evnt.getIdEvento(), evnt);
        }catch(Exception e){
            Toast.makeText(this.getApplicationContext(), "Error al Actualizar tu Evento", Toast.LENGTH_SHORT).show();
            //Log.e("Error Candelaria", e.getMessage());
        }
    }

日志条目行被注释,因为Exception对象不包含任何信息,我不能执行printStackTrace()因为println抛出NullPointerException。

更新: logcat的:

04-19 13:53:15.910: E/AndroidRuntime(4934): java.lang.NullPointerException
04-19 13:53:15.910: E/AndroidRuntime(4934):     at com.siitne.candelaria.data.DbAdapter.updateEvent(DbAdapter.java:48)
04-19 13:53:15.910: E/AndroidRuntime(4934):     at com.siitne.candelaria.ImportantList.acceptAction(ImportantList.java:130)
04-19 13:53:15.910: E/AndroidRuntime(4934):     at com.siitne.candelaria.ImportantList.access$3(ImportantList.java:126)
04-19 13:53:15.910: E/AndroidRuntime(4934):     at com.siitne.candelaria.ImportantList$1$1.onClick(ImportantList.java:113)

2 个答案:

答案 0 :(得分:2)

假设KEY_ROWID是整数,则不需要单引号。

db.update(TABLE,eventValues,KEY_ROWID+"="+row+"",null);

IF不是整数然后

db.update(TABLE,eventValues,KEY_ROWID+"= '"+row+"'",null);

您无需打印堆栈跟踪。有一个名为Logcat的视图。这将显示完整的错误堆栈跟踪。

编辑:它是NullpointerException,而不是sqlexception。您需要确保 db 也不为空 evento

答案 1 :(得分:1)

KEY_ROWID + “='” +行

你错过了封闭的'

应该阅读

KEY_ROWID +“='”+ row +“'”