【问题标题】:Error in Sqlite databaseSqlite 数据库中的错误
【发布时间】:2013-05-18 20:28:11
【问题描述】:

使用 Sqlite 运行我的应用程序时,出现以下错误。

SQLiteLog(779): (1) near "SQXC31DLT": syntax error
System.out(779): DATABASE ERROR android.database.sqlite.SQLiteException: near "SQXC31DLT": syntax error (code 1): , while compiling: SELECT  count(*) FROM MessageTable  WHERE userID =? SQXC31DLT

代码:

这是我的查询

   String query = "INSERT INTO MessageTable (user_message_id,message,title,message_time,mp3,userID) values ('" + 

              umsermessgid + "','" + Messages +"','" + Title +"','" + timedate+ "','" + musicmp3 + "','" + userid + "')";


                     sqlHandler.executeQuery(query);
                        showList();

这里是剩下的 showlist() 方法:

 private void showList() {
            // TODO Auto-generated method stub
            contactList = new ArrayList<ContactListItems>();
             contactList.clear();
             userid=    mDataStorage.getToken(FirstActivity.this);

String query = "SELECT  count(*) FROM MessageTable  WHERE userID = '" + userid +"'";              Cursor c1 = sqlHandler.selectQuery(query);
              if (c1 != null && c1.getCount() != 0) {
               if (c1.moveToFirst()) {
              //  do {
                 ContactListItems contactListItems = new ContactListItems();

                 contactListItems.setSlno(c1.getString(c1.getColumnIndex("ID")));
                 contactListItems.setmessage(c1.getString(c1.getColumnIndex("message")));
                 contactListItems.settitle(c1.getString(c1.getColumnIndex("title")));
                 contactListItems.setmp3(c1.getString(c1.getColumnIndex("mp3")));
                 contactListItems.setusermessageid(c1.getString(c1.getColumnIndex("user_message_id")));
                 contactList.add(contactListItems);

               // } while (c1.moveToNext());
               }
              }
              c1.close();


        }

我已经检查了所有内容,但仍然收到错误消息

CursorWindow(1211): Failed to read row 0, column -1 from a CursorWindow which has 1 rows, 1 columns.



   05-18 10:37:11.022: E/AndroidRuntime(1211): FATAL EXCEPTION: main
05-18 10:37:11.022: E/AndroidRuntime(1211): java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.
05-18 10:37:11.022: E/AndroidRuntime(1211):     at android.database.CursorWindow.nativeGetString(Native Method)
05-18 10:37:11.022: E/AndroidRuntime(1211):     at android.database.CursorWindow.getString(CursorWindow.java:434)
05-18 10:37:11.022: E/AndroidRuntime(1211):     at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:51)
05-18 10:37:11.022: E/AndroidRuntime(1211):     at com.example.universal.FirstActivity.showList(FirstActivity.java:330)
05-18 10:37:11.022: E/AndroidRuntime(1211):     at com.example.universal.FirstActivity.access$1(FirstActivity.java:317)
05-18 10:37:11.022: E/AndroidRuntime(1211):     at com.example.universal.FirstActivity$GetTask.onPostExecute(FirstActivity.java:137)
05-18 10:37:11.022: E/AndroidRuntime(1211):     at com.example.universal.FirstActivity$GetTask.onPostExecute(FirstActivity.java:1)
05-18 10:37:11.022: E/AndroidRuntime(1211):     at android.os.AsyncTask.finish(AsyncTask.java:631)
05-18 10:37:11.022: E/AndroidRuntime(1211):     at android.os.AsyncTask.access$600(AsyncTask.java:177)
05-18 10:37:11.022: E/AndroidRuntime(1211):     at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
05-18 10:37:11.022: E/AndroidRuntime(1211):     at android.os.Handler.dispatchMessage(Handler.java:99)
05-18 10:37:11.022: E/AndroidRuntime(1211):     at android.os.Looper.loop(Looper.java:137)
05-18 10:37:11.022: E/AndroidRuntime(1211):     at android.app.ActivityThread.main(ActivityThread.java:5041)
05-18 10:37:11.022: E/AndroidRuntime(1211):     at java.lang.reflect.Method.invokeNative(Native Method)
05-18 10:37:11.022: E/AndroidRuntime(1211):     at java.lang.reflect.Method.invoke(Method.java:511)
05-18 10:37:11.022: E/AndroidRuntime(1211):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
05-18 10:37:11.022: E/AndroidRuntime(1211):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
05-18 10:37:11.022: E/AndroidRuntime(1211):     at dalvik.system.NativeStart.main(Native Method)

谁能帮我解决这个问题!! @谢谢

【问题讨论】:

  • 请张贴你的整个 logcat
  • 您应该只使用 ? 字符来格式化具有selectionArgs 参数的查询..
  • @MehulJoisar 我已添加

标签: android sqlite


【解决方案1】:

您的查询有误。

使用:

String query = "SELECT  count(*) FROM MessageTable  WHERE userID =" + userid ;

在你的 showList() 函数中。

【讨论】:

  • 更改为:String query = "SELECT count(*) FROM MessageTable WHERE userID = '" + userid +"'";看看
  • 然后我也收到错误 CursorWindow(1211): Failed to read row 0, column -1 from a CursorWindow which has 1 rows, 1 columns.
  • ok last try: String query = "SELECT count(*) FROM MessageTable WHERE userID =+ "'" + userid +"'";
  • 如果您尝试查询硬编码,您会得到什么吗?字符串查询 = "SELECT count(*) FROM MessageTable WHERE userID = SQXC31DLT"
【解决方案2】:

如下更改您的查询

String query = "SELECT  count(*) FROM MessageTable  WHERE userID = '" + userid +"'";

或者试试下面的方法。

Cursor c = db.rawQuery("SELECT count(*) FROM MessageTable where userID = '"+ userid + "'", null);

【讨论】:

  • 使用您的代码我收到此错误 05-18 10:37:10.992: E/CursorWindow(1211): 无法从具有 1 行 1 的 CursorWindow 读取第 0 行第 -1 列列。
  • 我也可以知道SQXC31DLT是什么吗?
【解决方案3】:

你想用你的代码做什么?

这个 sql 查询应该是您第一个问题的正确查询:

字符串查询 = "SELECT count(*) FROM MessageTable WHERE userID = '" + 用户名 +"'"; (古纳西兰)

这个错误:

无法从有 1 行的 CursorWindow 读取第 0 行第 -1 列, 1 列。

是因为您使用了错误的查询。您正在使用的查询仅返回一个数字 - 计数。 (一列一行)

此代码的正确查询:

光标 c1 = sqlHandler.selectQuery(query); if (c1 != null && c1.getCount() != 0) { 如果(c1.moveToFirst()){ // 做 { ContactListItems contactListItems = new ContactListItems();

             contactListItems.setSlno(c1.getString(c1.getColumnIndex("ID")));
             contactListItems.setmessage(c1.getString(c1.getColumnIndex("message")));
             contactListItems.settitle(c1.getString(c1.getColumnIndex("title")));
             contactListItems.setmp3(c1.getString(c1.getColumnIndex("mp3")));
             contactListItems.setusermessageid(c1.getString(c1.getColumnIndex("user_message_id")));
             contactList.add(contactListItems);

           // } while (c1.moveToNext());
           }
          }
          c1.close();

应该是:

String query = "SELECT * FROM MessageTable WHERE userID = '" + userid +"'";

而不是:

字符串查询 = "SELECT count(*) FROM MessageTable WHERE userID = '" + 用户名 +"'";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-05
    • 1970-01-01
    • 1970-01-01
    • 2012-07-18
    • 1970-01-01
    相关资源
    最近更新 更多