2017-02-23 1 views
1

Ich arbeite mit SQLite-Datenbanken und ich bin mit dem Cursor fest, ich kann diesen Fehler nicht herausfinden, hier ist der volle Fehler, wie es in Logcat zeigt.Fehler in der Cursor-Ebene meines Android-Codes

Problem: java.lang.IllegalStateException: Zeile 0, Spalte -1 von CursorWindow konnte nicht gelesen werden. Stellen Sie sicher, dass der Cursor korrekt initialisiert ist, bevor Sie auf Daten zugreifen.

und mein Code ist dies:

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; 
} 


} 

hier ist mein Hauptaktivitätscode:

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(); 
    } 
} 

und hier ist meine andere Klasse Job:

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; 
    } 
} 
+1

gibt es jede Zeilennummer in Log? –

Antwort

0

Sie‘ Es fehlt ein Komma in der Abfrage erstellen:

COLUMN_NAME +" Text, "+ 

Als solche ist die Spalte nicht existiert, weshalb getColumnIndex zurückkehrt -1

ich auch Ihre Variable würde vorschlagen, mit COLUMN_NAME anstelle eines hartcodiert "name"

+0

ich gerade behoben, wie Sie sagten, aber es zeigt immer noch den gleichen Fehler – Luis3506

+0

Haben Sie die Daten gelöscht? Sie müssen für die onCreate() erneut aufgerufen werden und die Tabelle neu definieren. – Jahnold

+0

Was meinen Sie mit dem Löschen der Daten? – Luis3506

Verwandte Themen