Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.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 这个错误有什么解决办法吗?_Java_Android_Eclipse_Sqlite - Fatal编程技术网

Java 这个错误有什么解决办法吗?

Java 这个错误有什么解决办法吗?,java,android,eclipse,sqlite,Java,Android,Eclipse,Sqlite,01-25 23:51:14.507:WARN/System.err(616):android.database.CursorIndexOutOfBoundsException:请求索引-1,大小为2 我有一个android应用程序,它将使用SQLite数据库。但当它到达select语句时,它将强制关闭。我有一个用于执行此操作的类文件: package com.thesis.menubook; import android.content.ContentValues; import andro

01-25 23:51:14.507:WARN/System.err(616):android.database.CursorIndexOutOfBoundsException:请求索引-1,大小为2

我有一个android应用程序,它将使用
SQLite
数据库。但当它到达select语句时,它将强制关闭。我有一个用于执行此操作的类文件:

package com.thesis.menubook;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import java.util.ArrayList;
import java.util.List;

public class DBConnect {

        int id = 0;
        public static final String KEY_ROWID = "_id";
        public static final String KEY_IP = "saved_ip_address";
        private static final String TAG = "DBConnect";

        private static final String DATABASE_NAME = "MenuBook";
        private static final String DATABASE_TABLE_1 = "ipaddress";
       //private static final String DATABASE_TABLE_2 = "menudb";
       //private static final String DATABASE_TABLE_3 = "recipelist";
        private static final int DATABASE_VERSION = 1;

        private static final String DATABASE_CREATE_TABLE_1 =
            "CREATE TABLE ipaddress (_id integer primary key autoincrement, " +
                                 "saved_ip_address text not null " +
                                 "); ";
        private static final String DATABASE_CREATE_TABLE_2 =
            "CREATE TABLE menudb (menu_ID varchar primary key not null, " +
                                 "menu_name longtext, " +
                                 "menu_price double null default, " +
                                 "menu_description longtext, " +
                                 "menu_category text, " +
                                 "menu_status text " +
                                 "); ";
        private static final String DATABASE_CREATE_TABLE_3 =
            "CREATE TABLE recipelist (recipe_ID integer primary key not null autoincrement, " +
                                 "menu_ID varchar null default, " +
                                 "stock_ID varchar null default, " +
                                 "recipe_quantity double null defualt " +
                                 ");" ;

        private final Context context;

        private static DatabaseHelper DBHelper;
        private static SQLiteDatabase db;

        public DBConnect(Context ctx)
        {
            this.context = ctx;
            DBHelper = new DatabaseHelper(context);
        }

        public static class DatabaseHelper extends SQLiteOpenHelper
        {
            DatabaseHelper(Context context)
            {
                super(context, DATABASE_NAME, null, DATABASE_VERSION);
            }

            @Override
            public void onCreate(SQLiteDatabase db)
            {
                db.execSQL(DATABASE_CREATE_TABLE_1);
                db.execSQL(DATABASE_CREATE_TABLE_2);
                db.execSQL(DATABASE_CREATE_TABLE_3);
            }

            @Override
            public void onUpgrade(SQLiteDatabase db, int oldVersion,
                                  int newVersion)
            {
                Log.w(TAG, "Upgrading database from version " + oldVersion
                      + " to "
                      + newVersion + ", which will destroy all old data");
                db.execSQL("DROP TABLE IF EXISTS ipaddress");
                db.execSQL("DROP TABLE IF EXISTS menudb");
                db.execSQL("DROP TABLE IF EXISTS recipelist");
                onCreate(db);
            }

        }

        //---opens the database---
        public DBConnect open() throws SQLException
        {
            db = DBHelper.getWritableDatabase();
            return this;
        }

        //---closes the database---
        public void close()
        {
            DBHelper.close();
        }

        //---insert a title into the database---
        public long insertIPAddress(String ipaddress)
        {
            ContentValues initialValues = new ContentValues();
            initialValues.put(KEY_IP, ipaddress);
            return db.insert(DATABASE_TABLE_1, null, initialValues);
        }

        public String getIP()
        {
            String retrievedIP;

            String query = "SELECT saved_ip_address FROM ipaddress WHERE _id = (SELECT MAX(_id) FROM ipaddress)";
            Cursor cursor = db.rawQuery(query, null);
            retrievedIP= cursor.getString(cursor.getColumnIndex("saved_ip_address"));
            cursor.close();
            return retrievedIP;
        }

        public List<ColumnValue[]> select(final String query)
        {
            List<ColumnValue[]> result = null;
            Cursor cursor = db.rawQuery(query, null);

            if (cursor.moveToFirst())
            {
                result = new ArrayList<ColumnValue[]>();

                do
                {
                    int columns = cursor.getColumnCount();
                    ColumnValue[] cvarray = new ColumnValue[columns];

                    for (int i=0; i<columns; i++)
                    {
                        String key = cursor.getColumnName(i);
                        String value = cursor.getString(i);
                        ColumnValue cv = new ColumnValue(key, value);
                        cvarray[i] = cv;
                    }

                    result.add(cvarray);
                }
                while (cursor.moveToNext());
            }

            cursor.close();

            return result;
        }

        public class ColumnValue
        {
            public String column, value;

            public ColumnValue(String c, String v)
            {
                column = c; value = v;
            }
        }


}

获取
光标后
对象需要前进到第一行

 cursor.moveToFirst();
在从光标获取之前。此外,您还需要检查光标中是否确实存在任何行

 cursor.moveToFirst();