我的Android代码的光标级别出错

我的Android代码的光标级别出错,android,sql,sqlite,Android,Sql,Sqlite,我正在使用sqlite数据库,我被游标卡住了,我无法找出这个错误,下面是完整的错误,如Logcat中所示 问题:java.lang.IllegalStateException:无法从CursorWindow读取第0行第1列。在从光标访问数据之前,请确保光标已正确初始化 我的代码是: public class dbHelper extends SQLiteOpenHelper { private static final int DATABASE_VERSION=1; priva

我正在使用sqlite数据库,我被游标卡住了,我无法找出这个错误,下面是完整的错误,如Logcat中所示

问题:java.lang.IllegalStateException:无法从CursorWindow读取第0行第1列。在从光标访问数据之前,请确保光标已正确初始化

我的代码是:

public class dbHelper extends SQLiteOpenHelper {

    private static final int DATABASE_VERSION=1;
    private static final String DATABASE_NAME="WorkLoadManager";
    private static final String TABLE_NAME="Jobs";


    //columns for table
    private static final String COLUMN_ID="_id";
    private static final String COLUMN_NAME="name";
    private static final String COLUMN_DESCRIPTION="description";


    public dbHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String createTable=" CREATE TABLE " + TABLE_NAME + " ( " +
                COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                COLUMN_NAME +" Text "+
                COLUMN_DESCRIPTION + " TEXT " +
                ");";
        db.execSQL(createTable);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int i, int i1) {
    db.execSQL(" DROP TABLE IF EXISTS "+ TABLE_NAME);
        onCreate(db);
    }

//add
    public void addJob(Job job){
        SQLiteDatabase db=getWritableDatabase();
        ContentValues values =new ContentValues();
        values.put(COLUMN_NAME,job.getName());
        values.put(COLUMN_DESCRIPTION,job.getDescription());

        db.insert(TABLE_NAME, null,values);
        db.close();

    }

    //delete
    public void deleteJob(String name){
        SQLiteDatabase db=getWritableDatabase();

        db.execSQL("DELETE FROM " +TABLE_NAME+ " WHERE "+COLUMN_NAME+ "=\""+ name +"\";");
    }

    //print database as a string
    public String dataBaseToString(){
        String dbString="";

        SQLiteDatabase db=getWritableDatabase();

        String query="SELECT * FROM "+ TABLE_NAME+ " WHERE 1";

    //CURSOR
    Cursor c = db.rawQuery(query, null);
    //move to first row
     c.moveToFirst();

    try {
        while (!c.isAfterLast()) {
            if (c.getString(c.getColumnIndex("name")) != null) {
                dbString += c.getString(c.getColumnIndex("name"));
                dbString += "\n";

            }

        }
    }catch (Exception e){
        Log.i("problem",e.toString());
    }
    db.close();
    return dbString;
}


}
以下是我的主要活动代码:

public class MainActivity extends AppCompatActivity {

    EditText inputBox;
    EditText inputNameBox;
    TextView display;
    dbHelper myHelper;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        inputBox =(EditText)findViewById(R.id.inputBox);
        inputNameBox=(EditText)findViewById(R.id.inputName);
        display=(TextView) findViewById(R.id.display);
        myHelper=new dbHelper(this, null, null, 1);
        printDatabase();

    }

    public void  printDatabase(){
        String dbString=myHelper.dataBaseToString();
        display.setText(dbString);
        inputBox.setText("");
        inputNameBox.setText("");
    }



    public void addOnclick(View view) {
        Job job=new Job(inputBox.getText().toString(),inputNameBox.getText().toString());

        myHelper.addJob(job);
        printDatabase();
    }

    public void deleteOnClick(View view) {
        String input=inputBox.getText().toString();
        myHelper.deleteJob(input);
        printDatabase();
    }
}
这是我的另一个班级工作:

public class Job {

    private int _id;
    private String jobName;
    private String description;


//empty constructor
    public Job() {

    }

    public Job(String name)
    {
        this.jobName=name;
    }

    public Job( String name,String description) {
        this.jobName=name;
        this.description = description;
    }


    public Job(int id,String name, String description) {
        this._id = id;
        this.jobName=name;
        this.description = description;
    }

    public String getName() {
        return jobName;
    }

    public void setName(String name) {
        this.jobName = name;
    }

    public int getId() {
        return _id;
    }

    public void setId(int id) {
        this._id = id;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }
}

创建查询中缺少逗号:

COLUMN_NAME +" Text, "+
因此,列不存在,这就是
getColumnIndex
返回-1的原因


我还建议使用变量
列\u NAME
而不是硬编码的
“NAME”

您在创建查询中缺少逗号:

COLUMN_NAME +" Text, "+
因此,列不存在,这就是
getColumnIndex
返回-1的原因


我还建议使用变量
COLUMN\u NAME
而不是硬编码的
“NAME”

日志中有行号吗?日志中有行号吗?我刚才已经修复了,但它仍然显示相同的错误。您清除了数据吗?需要重新调用onCreate()并重新定义表。从应用程序中清除数据。你可以通过adb,或者通过设备上的应用程序设置,或者卸载/重新安装。我刚刚这么做了,但现在应用程序在手机上冻结,logcat上没有错误,你的选择查询看起来也有错误。不确定“WHERE 1”应该做什么正如你所说,我刚刚修复了,但它仍然显示相同的错误你清除了数据了吗?需要重新调用onCreate()并重新定义表。从应用程序中清除数据。你可以通过adb,或者通过设备上的应用程序设置,或者卸载/重新安装。我刚刚这么做了,但现在应用程序在手机上冻结,logcat上没有错误,你的选择查询看起来也有错误。不确定“WHERE 1”应该做什么