java - 更新 sqlite 中的查询

标签 java android sql database sqlite

Activity 代码

String MMS = "(SELECT Name FROM UserData WHERE MessagesSent=(SELECT max(MessagesSent) FROM UserData))";
db.execSQL("UPDATE MainData SET MostMessagesSent = "+ MMS + "+ WHERE Data = MyData");

我不确定代码,但这是 Activity 的 onCreate...会使用此代码进行更改吗?

这个方法正确吗?

我希望这个问题是可以理解的...

错误

 java.lang.NullPointerException: Attempt to invoke virtual method 'void android.database.sqlite.SQLiteDatabase.execSQL(java.lang.String)' on a null object reference
                                                   at com.appmaster.akash.messageplus.Settings.UsageSettings.onCreateView(UsageSettings.java:43)
                                                   at android.support.v4.app.Fragment.performCreateView(Fragment.java:2354)
                                                   at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1419)
                                                   at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1740)
                                                   at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1809)
                                                   at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:799)
                                                   at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2580)
                                                   at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2367)
                                                   at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2322)
                                                   at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2229)
                                                   at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:700)
                                                   at android.os.Handler.handleCallback(Handler.java:742)
                                                   at android.os.Handler.dispatchMessage(Handler.java:95)
                                                   at android.os.Looper.loop(Looper.java:157)
                                                   at android.app.ActivityThread.main(ActivityThread.java:5571)
                                                   at java.lang.reflect.Method.invoke(Native Method)
                                                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:745)
                                                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:635)

最佳答案

如果 db 已正确初始化,则使用以下行:

db.execSQL("UPDATE MainData SET MostMessagesSent = "+ MMS + "+ WHERE Data = MyData");

您想要执行一个 UPDATE 语句,该语句将使用从变量 MMS 中存储的查询中获取的值来更新表 MainDataMostMessagesSent 列:

String MMS = "(SELECT Name FROM UserData WHERE MessagesSent=(SELECT max(MessagesSent) FROM UserData))";

为了使其工作,您必须正确初始化 db 对象。
我想您有一个扩展 SQLiteOpenHelper 的类,它提供了 db 的初始化。
此外,表和列的名称必须与预期行为相匹配。
问题是 execSQL() 不返回指示更新是否成功的值。
你必须自己检查一下。

关于java - 更新 sqlite 中的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53320872/

相关文章:

mysql - JPQL/SQL 查询 : where like '%' include null values

mysql - SELECT #8 中的 sqlzoo SELECT

sql - Oracle 外部表。优化选择查询

java - 从子类返回数据

java - Android计算2个GPS坐标之间的角度

Android: ScrollView 中的两个图像

android - 如何拥有一个自动滚动的TextView

java - xml 1.1 规范中的 'parsed data' 是什么意思?

java - SVNkit 无法创建 SVNRepoitory

在 fragment 中使用 Butterknife 时出现 java.lang.NullPointerException