如何更新由字符串源码行条目? [英] How do I update a sqlite row entry by string?

查看:124
本文介绍了如何更新由字符串源码行条目?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是一个小白到Android和我试图更新由字符串一个SQLite列条目,而不是行号。我没有问题创造一个条目,然后删除通过字符串的项。然而,当我尝试更新由字符串的项,我得到一个空指针异常?任何帮助是极大的AP preciated。

我的code删除工作正常的条目:

 公共无效deleteEntry(字符串硬币)抛出的SQLException {
    的String [] = whereArgs新的String [] {}硬币;
    ourDatabase.delete(DATABASE_TABLE,KEY_NAME +=?,whereArgs);

我的code更新不工作的条目:

 公共无效updateEntry(字符串mCoin,字符串mQuantity,字符串mValue)抛出的SQLException {
    // TODO自动生成方法存根
    的String [] = whereArgs新的String [] {} mCoin;
    ContentValues​​ cvUpdate =新ContentValues​​();
    cvUpdate.put(KEY_NAME,mCoin);
    cvUpdate.put(KEY_QUANTITY,mQuantity);
    cvUpdate.put(KEY_VALUE,mValue);
    ourDatabase.update(DATABASE_TABLE,cvUpdate,KEY_NAME +=?,whereArgs);
}

我的LogCat中:

  1月8日至27日:16:13.734:E /光标(1886年):完成尚未停用或关闭的游标。数据库= /data/data/com.example.portfolio/databases/PortfolioDatabase,表= cointypeTable,查询=选择_id,cointype_name,cointype_quantity,cointype_value FROM cointypeTable
1月8日至27日:16:13.734:E /光标(1886年):android.database.sqlite.DatabaseObjectNotClosedException:应用程序没有关闭在这里打开游标或数据库对象
1月8日至27日:16:13.734:E /光标(1886年):在android.database.sqlite.SQLiteCursor<&初始化GT;(SQLiteCursor.java:210)。
1月8日至27日:16:13.734:E /光标(1886年):在android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:53)
1月8日至27日:16:13.734:E /光标(1886年):在android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1345)
1月8日至27日:16:13.734:E /光标(1886年):在android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1229)
1月8日至27日:16:13.734:E /光标(1886年):在android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1184)
1月8日至27日:16:13.734:E /光标(1886年):在android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1264)
1月8日至27日:16:13.734:E /光标(1886年):在com.example.portfolio.PortfolioDatabase.getData(PortfolioDatabase.java:76)
1月8日至27日:16:13.734:E /光标(1886年):在com.example.portfolio.Portfolio.add(Portfolio.java:1305)
1月8日至27日:16:13.734:E /光标(1886年):在com.example.portfolio.Portfolio.onItemSelected(Portfolio.java:836)
1月8日至27日:16:13.734:E /光标(1886年):在android.widget.AdapterView.fireOnSelected(AdapterView.java:864)
1月8日至27日:16:13.734:E /光标(1886年):在android.widget.AdapterView.access $ 200(AdapterView.java:42)
1月8日至27日:16:13.734:E /光标(1886年):在android.widget.AdapterView $ SelectionNotifier.run(AdapterView.java:830)
1月8日至27日:16:13.734:E /光标(1886年):在android.os.Handler.handleCallback(Handler.java:587)
1月8日至27日:16:13.734:E /光标(1886年):在android.os.Handler.dispatchMessage(Handler.java:92)
1月8日至27日:16:13.734:E /光标(1886年):在android.os.Looper.loop(Looper.java:123)
1月8日至27日:16:13.734:E /光标(1886年):在android.app.ActivityThread.main(ActivityThread.java:4627)
1月8日至27日:16:13.734:E /光标(1886年):在java.lang.reflect.Method.invokeNative(本机方法)
1月8日至27日:16:13.734:E /光标(1886年):在java.lang.reflect.Method.invoke(Method.java:521)
1月8日至27日:16:13.734:E /光标(1886年):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:868)
1月8日至27日:16:13.734:E /光标(1886年):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
1月8日至27日:16:13.734:E /光标(1886年):在dalvik.system.NativeStart.main(本机方法)


解决方案

从你的logcat,看来你忘了关闭游标或数据库的某个地方。请您可以张贴code你在哪里调用这些方法。

I am a noob to android and I am trying to update a sqlite row entry by string as opposed to row number. I have no problems creating an entry and then deleting an entry by string. However, when i attempt to update an entry by string i get a null pointer exception? Any help is greatly appreciated.

My code for deleting an entry that works fine:

public void deleteEntry(String coin) throws SQLException{
    String[] whereArgs = new String[] { coin };
    ourDatabase.delete(DATABASE_TABLE, KEY_NAME + "=?", whereArgs); 

My code for updating an entry that doesn't work:

public void updateEntry(String mCoin, String mQuantity, String mValue) throws SQLException{
    // TODO Auto-generated method stub
    String[] whereArgs = new String[] { mCoin };
    ContentValues cvUpdate = new ContentValues();
    cvUpdate.put(KEY_NAME, mCoin);
    cvUpdate.put(KEY_QUANTITY, mQuantity);
    cvUpdate.put(KEY_VALUE, mValue);
    ourDatabase.update(DATABASE_TABLE, cvUpdate, KEY_NAME + "=?", whereArgs);   
}

My LogCat:

08-27 01:16:13.734: E/Cursor(1886): Finalizing a Cursor that has not been deactivated or closed. database = /data/data/com.example.portfolio/databases/PortfolioDatabase, table = cointypeTable, query = SELECT _id, cointype_name, cointype_quantity, cointype_value FROM cointypeTable
08-27 01:16:13.734: E/Cursor(1886): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
08-27 01:16:13.734: E/Cursor(1886):     at android.database.sqlite.SQLiteCursor.<init>(SQLiteCursor.java:210)
08-27 01:16:13.734: E/Cursor(1886):     at  android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:53)
08-27 01:16:13.734: E/Cursor(1886):     at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1345)
08-27 01:16:13.734: E/Cursor(1886):     at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1229)
08-27 01:16:13.734: E/Cursor(1886):     at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1184)
08-27 01:16:13.734: E/Cursor(1886):     at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1264)
08-27 01:16:13.734: E/Cursor(1886):     at com.example.portfolio.PortfolioDatabase.getData(PortfolioDatabase.java:76)
08-27 01:16:13.734: E/Cursor(1886):     at com.example.portfolio.Portfolio.add(Portfolio.java:1305)
08-27 01:16:13.734: E/Cursor(1886):     at com.example.portfolio.Portfolio.onItemSelected(Portfolio.java:836)
08-27 01:16:13.734: E/Cursor(1886):     at android.widget.AdapterView.fireOnSelected(AdapterView.java:864)
08-27 01:16:13.734: E/Cursor(1886):     at android.widget.AdapterView.access$200(AdapterView.java:42)
08-27 01:16:13.734: E/Cursor(1886):     at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:830)
08-27 01:16:13.734: E/Cursor(1886):     at android.os.Handler.handleCallback(Handler.java:587)
08-27 01:16:13.734: E/Cursor(1886):     at android.os.Handler.dispatchMessage(Handler.java:92)
08-27 01:16:13.734: E/Cursor(1886):     at android.os.Looper.loop(Looper.java:123)
08-27 01:16:13.734: E/Cursor(1886):     at android.app.ActivityThread.main(ActivityThread.java:4627)
08-27 01:16:13.734: E/Cursor(1886):     at java.lang.reflect.Method.invokeNative(Native Method)
08-27 01:16:13.734: E/Cursor(1886):     at java.lang.reflect.Method.invoke(Method.java:521)
08-27 01:16:13.734: E/Cursor(1886):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
08-27 01:16:13.734: E/Cursor(1886):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
08-27 01:16:13.734: E/Cursor(1886):     at dalvik.system.NativeStart.main(Native Method)

解决方案

From your logcat, it seems you forgot to close the cursor or database somewhere.
Please can you post the code where you are calling these methods.

这篇关于如何更新由字符串源码行条目?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆