Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 导致应用程序崩溃的Android SQlite异常_Java_Android_Xml_Sqlite - Fatal编程技术网

Java 导致应用程序崩溃的Android SQlite异常

Java 导致应用程序崩溃的Android SQlite异常,java,android,xml,sqlite,Java,Android,Xml,Sqlite,我绞尽脑汁想弄明白为什么我的android程序崩溃了好几个小时 我遇到了两个不同的错误: java.lang.RuntimeException:无法启动activity ComponentInfo android.database.sqlite.SQLiteException:near“FROM”:语法错误(代码1):,编译时:选择id、名字、姓氏、门牌号、街道、城镇、县、邮政编码、电话,从id=? 当我在程序启动后按下按钮时会发生这种情况 我有5个不同的类,两个处理数据库,另外3个处理程序

我绞尽脑汁想弄明白为什么我的android程序崩溃了好几个小时

我遇到了两个不同的错误:

  • java.lang.RuntimeException:无法启动activity ComponentInfo
  • android.database.sqlite.SQLiteException:near“FROM”:语法错误(代码1):,编译时:选择id、名字、姓氏、门牌号、街道、城镇、县、邮政编码、电话,从id=?
当我在程序启动后按下按钮时会发生这种情况

我有5个不同的类,两个处理数据库,另外3个处理程序的信息和功能

LOGCAT

Process: com.example.rockodile.contactsappliaction, PID: 11603
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.rockodile.contactsappliaction/com.example.rockodile.contactsappliaction.ContactDetails}: android.database.sqlite.SQLiteException: near "FROM": syntax error (code 1): , while compiling: SELECT  id, forename, surname, housenumber, street, town, county, postcode, phone,  FROM contacts WHERE id=?
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Caused by: android.database.sqlite.SQLiteException: near "FROM": syntax error (code 1): , while compiling: SELECT  id, forename, surname, housenumber, street, town, county, postcode, phone,  FROM contacts WHERE id=?
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1318)
at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1257)
at com.example.rockodile.contactsappliaction.UserSQL.getContactById(UserSQL.java:136)
at com.example.rockodile.contactsappliaction.ContactDetails.onCreate(ContactDetails.java:58)
at android.app.Activity.performCreate(Activity.java:6679)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) 
at android.app.ActivityThread.-wrap12(ActivityThread.java) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:154) 
at android.app.ActivityThread.main(ActivityThread.java:6119) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
程序运行后,我有两个按钮,一个用于查看联系人,另一个用于添加新联系人。按下这些按钮中的任何一个都会导致程序关闭和崩溃

然而,当我按下每一个按钮时,我会得到不同的错误。 您可以在上面看到的错误是当我按下“添加”按钮时。 按下查看按钮时出现的错误如下

android.database.sqlite.SQLiteException: near "FROM": syntax error (code 1): , while compiling: SELECT  id,forename, surname, housenumber, street, town, county, postcode, phone,  FROM contacts


at com.example.rockodile.contactsappliaction.UserSQL.getContactList(UserSQL.java:90)
                                                                                               at com.example.rockodile.contactsappliaction.MainActivity.onClick(MainActivity.java:52)
下面是第二个箭头的完整日志

FATAL EXCEPTION: main
Process: com.example.rockodile.contactsappliaction, PID: 13715
android.database.sqlite.SQLiteException: near "FROM": syntax error (code 1): , while compiling: SELECT  id,forename, surname, housenumber, street, town, county, postcode, phone,  FROM contacts
   at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
   at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
   at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
   at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
   at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
   at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
   at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
   at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1318)
   at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1257)
   at com.example.rockodile.contactsappliaction.UserSQL.getContactList(UserSQL.java:90)
   at com.example.rockodile.contactsappliaction.MainActivity.onClick(MainActivity.java:52)
   at android.view.View.performClick(View.java:5637)
   at android.view.View$PerformClick.run(View.java:22429)
   at android.os.Handler.handleCallback(Handler.java:751)
   at android.os.Handler.dispatchMessage(Handler.java:95)
   at android.os.Looper.loop(Looper.java:154)
   at android.app.ActivityThread.main(ActivityThread.java:6119)
   at java.lang.reflect.Method.invoke(Native Method)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
致命异常:main
进程:com.example.rockodile.contactsappliaction,PID:13715
android.database.sqlite.SQLiteException:near“FROM”:语法错误(代码1),编译时:选择id、姓名、姓氏、门牌号、街道、城镇、县、邮政编码、电话、联系人
位于android.database.sqlite.SQLiteConnection.nativePrepareStatement(本机方法)
位于android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
位于android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
位于android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
位于android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:58)
位于android.database.sqlite.SQLiteQuery(SQLiteQuery.java:37)
位于android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
位于android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1318)
位于android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1257)
在com.example.rockodile.contactsAliAction.UserSQL.getContactList(UserSQL.java:90)上
在com.example.rockodile.contactsAliAction.MainActivity.onClick(MainActivity.java:52)上
在android.view.view.performClick上(view.java:5637)
在android.view.view$PerformClick.run(view.java:22429)
位于android.os.Handler.handleCallback(Handler.java:751)
位于android.os.Handler.dispatchMessage(Handler.java:95)
位于android.os.Looper.loop(Looper.java:154)
位于android.app.ActivityThread.main(ActivityThread.java:6119)
位于java.lang.reflect.Method.invoke(本机方法)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
我只是想知道问题出在哪里,我已经尝试了所有建议。我错过了什么明显的东西吗?我以前使用过这种方法,并对照前一个版本进行了检查,该版本工作得很好,并且完全相同,但是这个版本不起作用


非常感谢您的建议

对不起,我无法阅读您的所有代码。但我刚刚快速找到了您的Sql语法:

SELECT  id,forename, surname, housenumber, street, town, county, postcode, phone,  FROM contacts
不应在来自的
之前添加

正确的一点:

SELECT  id,forename, surname, housenumber, street, town, county, postcode, phone  FROM contacts
删除“选择查询”中按键后的“,”

 String selectQuery =  "SELECT  " +
            Contact.KEY_ID + ", " +
            Contact.KEY_FORENAME + ", " +
            Contact.KEY_SURNAME + ", " +
            Contact.KEY_HOUSENUMEBR  + ", " +
            Contact.KEY_STREET + ", " +
            Contact.KEY_TOWN + ", " +
            Contact.KEY_COUNTY  + ", " +
            Contact.KEY_POSTCODE + ", " +
            Contact.KEY_PHONE + 
            " FROM " + Contact.TABLE
            + " WHERE " +
            Contact.KEY_ID + "=?";// It's a good practice to use parameter ?, instead of concatenate string

如果这会造成问题,请尝试使用

Cursor rows= db.query(TableFile.Table_Name, columns, null, null,null,null,null);
查看参数。 1.表名 2.所需列的数组 3.“columnName1=?” 4.columnName1值的数组参数

rest保持空值

希望这有帮助。

在此处检查此错误

Process: com.example.rockodile.contactsappliaction, PID: 5549
                                                                                         java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.
                                                                                             at android.database.CursorWindow.nativeGetString(Native Method)
                                                                                             at android.database.CursorWindow.getString(CursorWindow.java:438)
                                                                                             at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:51)
                                                                                             at com.example.rockodile.contactsappliaction.UserSQL.getContactList(UserSQL.java:105)
                                                                                             at com.example.rockodile.contactsappliaction.MainActivity.onClick(MainActivity.java:52)
更新

public ArrayList<HashMap<String, String>> getContactList() {
        //Open connection to read only
        SQLiteDatabase db = dbHelper.getReadableDatabase();
        String selectQuery =  "SELECT  " +
                Contact.KEY_ID + "," +
                Contact.KEY_FORENAME + ", " +
                Contact.KEY_SURNAME + ", " +
                Contact.KEY_HOUSENUMEBR  + ", " +
                Contact.KEY_STREET + ", " +
                Contact.KEY_TOWN + ", " +
                Contact.KEY_COUNTY  + ", " +
                Contact.KEY_POSTCODE + ", " +
                Contact.KEY_PHONE + ", " +
                " FROM " + Contact.TABLE;
public ArrayList getContactList(){
//打开只读连接
SQLiteDatabase db=dbHelper.getReadableDatabase();
String selectQuery=“选择”+
Contact.KEY_ID+“,”+
Contact.KEY_名字+“,”+
Contact.KEY_姓氏+“,”+
Contact.KEY_HOUSENUMEBR+“,”+
联系人:基尤街+“,”+
Contact.KEY_TOWN+“,”+
Contact.KEY_COUNTY+“,”+
Contact.KEY_邮政编码+“,”+
Contact.KEY_PHONE+“,”+
“FROM”+Contact.TABLE;

A逗号from

from
之前的最后一个列名后面有一个额外的逗号。可能这个问题变得太复杂了,因为我对这个问题做了很多不同的修改。我的第一个问题已经解决了,所以我感谢你们的帮助,并将问题标记为已解决。是的,不要改变你的答案回答完后继续这样说。这可能就是你被否决的原因。无论如何,为了不必再发布这些内容,请查看
getContactList()的第105行
方法。看起来无论你想进入哪一列,都不存在于
光标中。看起来像电子邮件,因为这不在你的查询中,这可能也解释了为什么你会有那个悬空的逗号。哇。这就是错误所在。它现在完全起作用了!发布专业提示:一旦通过收到答案解决了问题ed,请不要通过更改整个问题使该工作无效。不要为您的问题添加答案,如果您想添加下面未提及的解决方案,可以添加自我答案。我已返回到上一个好问题。如果您有进一步的疑问,请问一个新问题。好的,我的“查看”按钮现在可以工作。但是我的“添加”按钮n仍会使应用程序崩溃。我的日志高于正常值,因此我的添加现在可以工作,但出现了更多问题…当我添加新记录时,我可以保存,或关闭或更新现有记录。但它们仍会使应用程序崩溃。我已发布新日志:(目前是我的logcat,我不知道当前的错误是什么?我已经更新了它。我的问题通过删除过多的逗号得到了解决,但是我遇到了更多的问题,我
Process: com.example.rockodile.contactsappliaction, PID: 5549
                                                                                         java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.
                                                                                             at android.database.CursorWindow.nativeGetString(Native Method)
                                                                                             at android.database.CursorWindow.getString(CursorWindow.java:438)
                                                                                             at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:51)
                                                                                             at com.example.rockodile.contactsappliaction.UserSQL.getContactList(UserSQL.java:105)
                                                                                             at com.example.rockodile.contactsappliaction.MainActivity.onClick(MainActivity.java:52)
public ArrayList<HashMap<String, String>> getContactList() {
        //Open connection to read only
        SQLiteDatabase db = dbHelper.getReadableDatabase();
        String selectQuery =  "SELECT  " +
                Contact.KEY_ID + "," +
                Contact.KEY_FORENAME + ", " +
                Contact.KEY_SURNAME + ", " +
                Contact.KEY_HOUSENUMEBR  + ", " +
                Contact.KEY_STREET + ", " +
                Contact.KEY_TOWN + ", " +
                Contact.KEY_COUNTY  + ", " +
                Contact.KEY_POSTCODE + ", " +
                Contact.KEY_PHONE + ", " +
                " FROM " + Contact.TABLE;