Wo liegt der Fehler in meiner Datenbank ?

T

theboss22

Ambitioniertes Mitglied
0
Hey Leute,
habe mich heute mit der dem Datenbanksystem SQL von Android auseinandergesetzt und nun eine Datenbank erstellt. Habe diese zunächst um die Spalte Breite ergänzt, alles lief super. Dann habe ich noch die Spalte "Kategorie" hinzugefügt und jetzt funktioniert plötzlich garnichts mehr :(
Ich hoffe ihr könnt mir weiterhelfen, merkwürdigerweise gibt es im Code selbst keine Fehler :confused2:

LogCat liefert folgendes: bad request for field slot 0,4. numRows = 32, numColumns = 4

DatabaseHandler.java
Code:
package com.androidhive.androidsqlite;

import java.util.ArrayList;
import java.util.List;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DatabaseHandler extends SQLiteOpenHelper {

	// All Static variables
	// Database Version
	private static final int DATABASE_VERSION = 1;

	// Database Name
	private static final String DATABASE_NAME = "PositionManager";

	// Contacts table name
	private static final String TABLE_CONTACTS = "positions";

	// Contacts Table Columns names
	private static final String KEY_ID = "id";
	private static final String KEY_KATEGORIE = "Kategorie";
	private static final String KEY_NAME = "name";
	private static final String KEY_LAENGE = "Länge";
	private static final String KEY_BREITE = "Breite";
	
	public DatabaseHandler(Context context) {
		super(context, DATABASE_NAME, null, DATABASE_VERSION);
	}

	// Creating Tables
	@Override
	public void onCreate(SQLiteDatabase db) {
		String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "("
				+ KEY_ID + " INTEGER PRIMARY KEY," + KEY_KATEGORIE + " TEXT,"+ KEY_NAME + " TEXT," + KEY_LAENGE + " TEXT,"+ KEY_BREITE + " TEXT" + ")";
		db.execSQL(CREATE_CONTACTS_TABLE);
	}

	// Upgrading database
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		// Drop older table if existed
		db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS);

		// Create tables again
		onCreate(db);
	}

	/**
	 * All CRUD(Create, Read, Update, Delete) Operations
	 */

	// Adding new contact
	void addPosition(Position position) {
		SQLiteDatabase db = this.getWritableDatabase();

		ContentValues values = new ContentValues();
		values.put(KEY_KATEGORIE, position.getkategorie()); //  Kategorie
		values.put(KEY_NAME, position.getName()); //  Name
		values.put(KEY_BREITE, position.getBREITE()); // Breite
		values.put(KEY_BREITE, position.getLAENGE()); // Länge
		
		// Inserting Row
		db.insert(TABLE_CONTACTS, null, values);
		db.close(); // Closing database connection
	}

	// Getting single position
	Position getPosition(int id) {
		SQLiteDatabase db = this.getReadableDatabase();

		Cursor cursor = db.query(TABLE_CONTACTS, new String[] { KEY_ID,
				KEY_NAME, KEY_BREITE }, KEY_ID + "=?",
				new String[] { String.valueOf(id) }, null, null, null, null);
		if (cursor != null)
			cursor.moveToFirst();

		Position position = new Position(Integer.parseInt(cursor.getString(0)),
                cursor.getString(1), cursor.getString(2), cursor.getString(3), cursor.getString(4));
		// return position
		return position;
	}
	
	// Getting All Positions
	public List<Position> getAllPositions() {
		List<Position> positionList = new ArrayList<Position>();
		// Select All Query
		String selectQuery = "SELECT  * FROM " + TABLE_CONTACTS;

		SQLiteDatabase db = this.getWritableDatabase();
		Cursor cursor = db.rawQuery(selectQuery, null);

		// looping through all rows and adding to list
		if (cursor.moveToFirst()) {
			do {
				Position position = new Position();
				position.setID(Integer.parseInt(cursor.getString(0)));
				position.setkategorie(cursor.getString(1));
				position.setName(cursor.getString(2));
				position.setLAENGE(cursor.getString(3));
				position.setBREITE(cursor.getString(4));
				
				// Adding position to list
				positionList.add(position);
			} while (cursor.moveToNext());
		}

		// return position list
		return positionList;
	}

	// Updating single contact
	public int updatePosition(Position position) {
		SQLiteDatabase db = this.getWritableDatabase();

		ContentValues values = new ContentValues();
		values.put(KEY_KATEGORIE, position.getkategorie());
		values.put(KEY_NAME, position.getName());
		values.put(KEY_LAENGE, position.getLAENGE());
		values.put(KEY_BREITE, position.getBREITE());
	

		// updating row
		return db.update(TABLE_CONTACTS, values, KEY_ID + " = ?",
				new String[] { String.valueOf(position.getID()) });
	}

	// Deleting single position
	public void deletePosition(Position position) {
		SQLiteDatabase db = this.getWritableDatabase();
		db.delete(TABLE_CONTACTS, KEY_ID + " = ?",
				new String[] { String.valueOf(position.getID()) });
		db.close();
	}


	// Getting positions Count
	public int getContactsCount() {
		String countQuery = "SELECT  * FROM " + TABLE_CONTACTS;
		SQLiteDatabase db = this.getReadableDatabase();
		Cursor cursor = db.rawQuery(countQuery, null);
		cursor.close();

		// return count
		return cursor.getCount();
	}

}

AndroidSQLLiteTutorialActivity.java

Code:
package com.androidhive.androidsqlite;

import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;


public class AndroidSQLiteTutorialActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        DatabaseHandler db = new DatabaseHandler(this);
        
        /**
         * CRUD Operations
         * */
        // Inserting Positions
        Log.d("Insert: ", "Inserting ..");
        db.addPosition(new Position("Landschaft","Hobbersdorfer Felder", "53.94966", "10.70343"));
        db.addPosition(new Position("Landschaft","Felder bei Pelzerhaken",  "54.10039", "10.83878"));
        db.addPosition(new Position("Landschaft","Felder bei Neustadt", "54.10713", "10.84201"));
        db.addPosition(new Position("Landschaft","Felder bei Gronenberg", "54.04454", "10.69646"));
 
        // Reading all positions
        Log.d("Reading: ", "Reading all positions..");
        List<Position> positions = db.getAllPositions();       
 
        for (Position cn : positions) {
            String log = "Id: "+cn.getID()+" ,Kategorie: " + cn.getkategorie() +" ,Name: " + cn.getName() + " ,Länge: " + cn.getLAENGE()+" ,Breite: " + cn.getBREITE();
                // Writing Contacts to log
        Log.d("Name: ", log);
        
        }
    }
}

Position.java

Code:
package com.androidhive.androidsqlite;

public class Position {
	
	//private variables
	int _id;
	String kategorie;
	String name;
	String breite;
	String laenge;
	
	// Empty constructor
	public Position(){
		
	}
	// constructor
	public Position(int id, String kategorie, String name, String breite, String laenge){
		this._id = id;
		this.kategorie = kategorie;
		this.name = name;
		this.breite = breite;
		this.laenge = laenge;
	}
	
	// constructor
	public Position(String kategorie, String name, String breite, String laenge){
		this.kategorie = kategorie;
		this.name = name;
		this.breite = breite;
		this.laenge = laenge;
	}
	// getting ID
	public int getID(){
		return this._id;
	}
	
	// setting id
	public void setID(int id){
		this._id = id;
	}
	
	// getting category
	public String getkategorie(){
		return this.kategorie;
	}
	
	// setting category
		public String setkategorie(String kategorie){
			return this.kategorie;
		}
	
	// getting name
	public String getName(){
		return this.name;
	}
	
	// setting name
	public void setName(String name){
		this.name = name;
	}
	
	// getting BREITE
	public String getBREITE(){
		return this.breite;
	}
	
	// setting BREITE
	public void setBREITE(String breite){
		this.breite = breite;

	}
	
	// getting LAENGE
	public String getLAENGE(){
		return this.breite;
	}
	// setting LAENGE
		public void setLAENGE(String laenge){
			this.breite = laenge;

		}
}
 
Ist die Datenbank befüllt? Wenn ja können Umlaute ein Grund für eine nicht funktionierende DB sein..
 
hmmm ne daran liegt es nicht :D
 
In deiner Position.java ist der Getter für Länge falsch. Der gibt Breite zurück. Ist nicht gewollt oder?
Den Setter würde ich mir auch noch mal anschauen.
PS. Und auch nicht nur da...
 
Zuletzt bearbeitet:
KatyB schrieb:
Der gibt Breite zurück.

stimmt, danke :)

was meinst du mit "nicht nur da" ? ich habe außer unten bei Setter/Getter bei Laenge keine Fehler gefunden
 
Code:
// setting category
public String setkategorie(String kategorie){
return this.kategorie;
}

Ich glaube er meint den Setter der was züruck gibt :D

P.S: Da du ja den Fehler erhalten hast, nachdem du die Kategorien eingefügt hast könnte das sogar der Fehler sein :D
 
Genau das meinte ich. :)
 
MrDraken schrieb:
Code:
[CODE]// setting category
public String setkategorie(String kategorie){
return this.kategorie;
}[/code]

du meinst das es richtig so heißen müsste oder ? :)

Code:
// setting category
public void setkategorie(String kategorie){
return this.kategorie;


Der ursprüngliche Beitrag von 16:08 Uhr wurde um 16:21 Uhr ergänzt:

Leider ist mein Problem immer noch da, hier einmal das war LogCat ausspuckt :(


Code:
01-19 16:18:58.219: I/Database(1252): sqlite returned: error code = 1, msg = table positions has no column named Kategorie
01-19 16:18:58.219: E/Database(1252): Error inserting Name=Hobbersdorfer Felder Breite=53.94966 Kategorie=Hobbersdorfer Felder
01-19 16:18:58.219: E/Database(1252): android.database.sqlite.SQLiteException: table positions has no column named Kategorie: , while compiling: INSERT INTO positions(Name, Breite, Kategorie) VALUES(?, ?, ?);
01-19 16:18:58.219: E/Database(1252): 	at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
01-19 16:18:58.219: E/Database(1252): 	at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:92)
01-19 16:18:58.219: E/Database(1252): 	at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:65)
01-19 16:18:58.219: E/Database(1252): 	at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:83)
01-19 16:18:58.219: E/Database(1252): 	at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:41)
01-19 16:18:58.219: E/Database(1252): 	at android.database.sqlite.SQLiteDatabase.compileStatement(SQLiteDatabase.java:1149)
01-19 16:18:58.219: E/Database(1252): 	at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1569)
01-19 16:18:58.219: E/Database(1252): 	at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1426)
01-19 16:18:58.219: E/Database(1252): 	at com.androidhive.androidsqlite.DatabaseHandler.addPosition(DatabaseHandler.java:135)
01-19 16:18:58.219: E/Database(1252): 	at com.androidhive.androidsqlite.AndroidSQLiteTutorialActivity.onCreate(AndroidSQLiteTutorialActivity.java:24)
01-19 16:18:58.219: E/Database(1252): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
01-19 16:18:58.219: E/Database(1252): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
01-19 16:18:58.219: E/Database(1252): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
01-19 16:18:58.219: E/Database(1252): 	at android.app.ActivityThread.access$1500(ActivityThread.java:117)
01-19 16:18:58.219: E/Database(1252): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
01-19 16:18:58.219: E/Database(1252): 	at android.os.Handler.dispatchMessage(Handler.java:99)
01-19 16:18:58.219: E/Database(1252): 	at android.os.Looper.loop(Looper.java:130)
01-19 16:18:58.219: E/Database(1252): 	at android.app.ActivityThread.main(ActivityThread.java:3683)
01-19 16:18:58.219: E/Database(1252): 	at java.lang.reflect.Method.invokeNative(Native Method)
01-19 16:18:58.219: E/Database(1252): 	at java.lang.reflect.Method.invoke(Method.java:507)
01-19 16:18:58.219: E/Database(1252): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
01-19 16:18:58.219: E/Database(1252): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
01-19 16:18:58.219: E/Database(1252): 	at dalvik.system.NativeStart.main(Native Method)
01-19 16:18:58.219: I/Database(1252): sqlite returned: error code = 1, msg = table positions has no column named Kategorie
01-19 16:18:58.219: E/Database(1252): Error inserting Name=Felder bei Pelzerhaken Breite=54.10039 Kategorie=Felder bei Pelzerhaken
01-19 16:18:58.219: E/Database(1252): android.database.sqlite.SQLiteException: table positions has no column named Kategorie: , while compiling: INSERT INTO positions(Name, Breite, Kategorie) VALUES(?, ?, ?);
01-19 16:18:58.219: E/Database(1252): 	at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
01-19 16:18:58.219: E/Database(1252): 	at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:92)
01-19 16:18:58.219: E/Database(1252): 	at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:65)
01-19 16:18:58.219: E/Database(1252): 	at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:83)
01-19 16:18:58.219: E/Database(1252): 	at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:41)
01-19 16:18:58.219: E/Database(1252): 	at android.database.sqlite.SQLiteDatabase.compileStatement(SQLiteDatabase.java:1149)
01-19 16:18:58.219: E/Database(1252): 	at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1569)
01-19 16:18:58.219: E/Database(1252): 	at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1426)
01-19 16:18:58.219: E/Database(1252): 	at com.androidhive.androidsqlite.DatabaseHandler.addPosition(DatabaseHandler.java:135)
01-19 16:18:58.219: E/Database(1252): 	at com.androidhive.androidsqlite.AndroidSQLiteTutorialActivity.onCreate(AndroidSQLiteTutorialActivity.java:25)
01-19 16:18:58.219: E/Database(1252): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
01-19 16:18:58.219: E/Database(1252): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
01-19 16:18:58.219: E/Database(1252): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
01-19 16:18:58.219: E/Database(1252): 	at android.app.ActivityThread.access$1500(ActivityThread.java:117)
01-19 16:18:58.219: E/Database(1252): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
01-19 16:18:58.219: E/Database(1252): 	at android.os.Handler.dispatchMessage(Handler.java:99)
01-19 16:18:58.219: E/Database(1252): 	at android.os.Looper.loop(Looper.java:130)
01-19 16:18:58.219: E/Database(1252): 	at android.app.ActivityThread.main(ActivityThread.java:3683)
01-19 16:18:58.219: E/Database(1252): 	at java.lang.reflect.Method.invokeNative(Native Method)
01-19 16:18:58.219: E/Database(1252): 	at java.lang.reflect.Method.invoke(Method.java:507)
01-19 16:18:58.219: E/Database(1252): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
01-19 16:18:58.219: E/Database(1252): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
01-19 16:18:58.219: E/Database(1252): 	at dalvik.system.NativeStart.main(Native Method)
01-19 16:18:58.229: I/Database(1252): sqlite returned: error code = 1, msg = table positions has no column named Kategorie
01-19 16:18:58.239: E/Database(1252): Error inserting Name=Felder bei Neustadt Breite=54.10713 Kategorie=Felder bei Neustadt
01-19 16:18:58.239: E/Database(1252): android.database.sqlite.SQLiteException: table positions has no column named Kategorie: , while compiling: INSERT INTO positions(Name, Breite, Kategorie) VALUES(?, ?, ?);
01-19 16:18:58.239: E/Database(1252): 	at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
01-19 16:18:58.239: E/Database(1252): 	at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:92)
01-19 16:18:58.239: E/Database(1252): 	at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:65)
01-19 16:18:58.239: E/Database(1252): 	at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:83)
01-19 16:18:58.239: E/Database(1252): 	at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:41)
01-19 16:18:58.239: E/Database(1252): 	at android.database.sqlite.SQLiteDatabase.compileStatement(SQLiteDatabase.java:1149)
01-19 16:18:58.239: E/Database(1252): 	at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1569)
01-19 16:18:58.239: E/Database(1252): 	at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1426)
01-19 16:18:58.239: E/Database(1252): 	at com.androidhive.androidsqlite.DatabaseHandler.addPosition(DatabaseHandler.java:135)
01-19 16:18:58.239: E/Database(1252): 	at com.androidhive.androidsqlite.AndroidSQLiteTutorialActivity.onCreate(AndroidSQLiteTutorialActivity.java:26)
01-19 16:18:58.239: E/Database(1252): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
01-19 16:18:58.239: E/Database(1252): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
01-19 16:18:58.239: E/Database(1252): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
01-19 16:18:58.239: E/Database(1252): 	at android.app.ActivityThread.access$1500(ActivityThread.java:117)
01-19 16:18:58.239: E/Database(1252): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
01-19 16:18:58.239: E/Database(1252): 	at android.os.Handler.dispatchMessage(Handler.java:99)
01-19 16:18:58.239: E/Database(1252): 	at android.os.Looper.loop(Looper.java:130)
01-19 16:18:58.239: E/Database(1252): 	at android.app.ActivityThread.main(ActivityThread.java:3683)
01-19 16:18:58.239: E/Database(1252): 	at java.lang.reflect.Method.invokeNative(Native Method)
01-19 16:18:58.239: E/Database(1252): 	at java.lang.reflect.Method.invoke(Method.java:507)
01-19 16:18:58.239: E/Database(1252): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
01-19 16:18:58.239: E/Database(1252): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
01-19 16:18:58.239: E/Database(1252): 	at dalvik.system.NativeStart.main(Native Method)
01-19 16:18:58.239: I/Database(1252): sqlite returned: error code = 1, msg = table positions has no column named Kategorie
01-19 16:18:58.239: E/Database(1252): Error inserting Name=Felder bei Gronenberg Breite=54.04454 Kategorie=Felder bei Gronenberg
01-19 16:18:58.239: E/Database(1252): android.database.sqlite.SQLiteException: table positions has no column named Kategorie: , while compiling: INSERT INTO positions(Name, Breite, Kategorie) VALUES(?, ?, ?);
01-19 16:18:58.239: E/Database(1252): 	at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
01-19 16:18:58.239: E/Database(1252): 	at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:92)
01-19 16:18:58.239: E/Database(1252): 	at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:65)
01-19 16:18:58.239: E/Database(1252): 	at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:83)
01-19 16:18:58.239: E/Database(1252): 	at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:41)
01-19 16:18:58.239: E/Database(1252): 	at android.database.sqlite.SQLiteDatabase.compileStatement(SQLiteDatabase.java:1149)
01-19 16:18:58.239: E/Database(1252): 	at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1569)
01-19 16:18:58.239: E/Database(1252): 	at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1426)
01-19 16:18:58.239: E/Database(1252): 	at com.androidhive.androidsqlite.DatabaseHandler.addPosition(DatabaseHandler.java:135)
01-19 16:18:58.239: E/Database(1252): 	at com.androidhive.androidsqlite.AndroidSQLiteTutorialActivity.onCreate(AndroidSQLiteTutorialActivity.java:27)
01-19 16:18:58.239: E/Database(1252): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
01-19 16:18:58.239: E/Database(1252): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
01-19 16:18:58.239: E/Database(1252): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
01-19 16:18:58.239: E/Database(1252): 	at android.app.ActivityThread.access$1500(ActivityThread.java:117)
01-19 16:18:58.239: E/Database(1252): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
01-19 16:18:58.239: E/Database(1252): 	at android.os.Handler.dispatchMessage(Handler.java:99)
01-19 16:18:58.239: E/Database(1252): 	at android.os.Looper.loop(Looper.java:130)
01-19 16:18:58.239: E/Database(1252): 	at android.app.ActivityThread.main(ActivityThread.java:3683)
01-19 16:18:58.239: E/Database(1252): 	at java.lang.reflect.Method.invokeNative(Native Method)
01-19 16:18:58.239: E/Database(1252): 	at java.lang.reflect.Method.invoke(Method.java:507)
01-19 16:18:58.239: E/Database(1252): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
01-19 16:18:58.239: E/Database(1252): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
01-19 16:18:58.239: E/Database(1252): 	at dalvik.system.NativeStart.main(Native Method)
01-19 16:18:58.249: D/Reading:(1252): Reading all positions..
01-19 16:18:58.249: E/CursorWindow(1252): Bad request for field slot 0,4. numRows = 52, numColumns = 4
 
Les dir mal die ersten 3 Zeilen deiner Fehlermeldung durch...
 
Wenn du die Datenbank auf dem selben Device ausgeführt hast musst du die Datenbankversion hochsetzten damit er die onUpgrade Methode ausführt und deine Tabelle neu anlegt.

Edit:
values.put(KEY_BREITE, position.getLAENGE()); // Länge
das ist vermutlich auch noch falsch :)
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: theboss22
1. sqlite returned: error code = 1, msg = table positions has no column named Kategorie --> es gibt also keine Spalte kategorie, aber ich habe die doch erstellt ? :confused2:

2. Error inserting Name=Hobbersdorfer Felder Breite=53.94966 Kategorie=Hobbersdorfer Felder --> wieso er zweimal das selbe nimmt verstehe ich hier auch nicht, und die Reihenfolge ist nicht richtig :confused2:

3.android.database.sqlite.SQLiteException: table positions has no column named Kategorie: , while compiling: INSERT INTO positions(Name, Breite, Kategorie) VALUES(?, ?, ?); --> Values habe ich doch angegeben ?

Was genau ist denn daran falsch :) ?

Der ursprüngliche Beitrag von 17:02 Uhr wurde um 17:15 Uhr ergänzt:

Gastuser schrieb:
Edit:
values.put(KEY_BREITE, position.getLAENGE()); // Länge
das ist vermutlich auch noch falsch :)


das hatte ich schon gefunden :) aber das mit der Datenbankversion versuche ich mal
 
Hast Du denn jetzt wie oben mehrfach erwähnt die setter und getter für Kategorie korrigiert? Ein setter gibt keinen Returnwert zurück, er setzt einen Wert in der Deiner Klasse, der dort gekapselt ist (private). Kategorie wird so nie gesetzt:
Code:
   // getting category
   public String getkategorie(){
      return this.kategorie;
   }
   // setting category
   public String setkategorie(String kategorie){
      return this.kategorie;
   }
->
   // getting category
   public String getkategorie(){
      return this.kategorie;
   }
   // setting category
   public void setkategorie(String kategorie){
      this.kategorie = kategorie;
   }
Hast Du dieses korrigiert:
Code:
values.put(KEY_BREITE, position.getLAENGE()); // Länge
->
values.put(KEY_LAENGE, position.getLAENGE()); // Länge

// getting LAENGE
   public String getLAENGE(){
      return this.breite;
   }
   ->
   // getting LAENGE
   public String getLAENGE(){
      return this.laenge;
   }
   
// setting LAENGE
   public void setLAENGE(String laenge){
      this.breite = laenge;
   }
->
   // setting LAENGE
   public void setLAENGE(String laenge){
      this.laenge = laenge;
   }
Weiterhin solltest Du für die Lesbarkeit die Notation vereinheitlichen:
getLAENGE -> getLaenge
setLAENGE -> setLaenge
getkategorie -> getKategorie
uswusf.

Weiterhin wäre es einheitlicher wenn Du aus
private static final String KEY_NAME = "name";
das
private static final String KEY_NAME = "Name";
machst.

Dein Fehler:
SQLiteException: table positions has no column named Kategorie: , while compiling: INSERT INTO positions(Name, Breite, Kategorie) VALUES(?, ?, ?);
tritt beim Insert auf die tabelle "positions", dort solltest Du weiter suchen:
Code:
      values.put(KEY_KATEGORIE, position.getkategorie()); //  Kategorie
      values.put(KEY_NAME, position.getName()); //  Name
      values.put(KEY_BREITE, position.getBREITE()); // Breite
      values.put(KEY_BREITE, position.getLAENGE()); // Länge
      
      // Inserting Row
      db.insert(TABLE_CONTACTS, null, values);
Wenn Du wie oben erwähnt aus dem doppelten KEY_BREITE ein KEY_LAENGE machst solltest Du auf 4 Fragezeichen kommen :).

Die Fragezeichen sollten korrekt sein und quasi als Platzhalter für Deine Werte dienen. Da Du nun oben auch einen setter für Kategorie hast - viel Glück.

Irgendwie verwirrt mich auch das TABLE_CONTACTS vs. "positions", die gespeichert werden sollen.
Code:
private static final String TABLE_CONTACTS = "positions";
Am besten Du stellst den aktuellen lesbareren Stand noch mal komplett hier ein :). Irgendwie sieht das etwas nach Copy&Paste-Programmierung aus ;-).
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: theboss22
Es war natürlich die Datenbankversion ;-) sollte jedem auch klar sein wenn man sein Text gelesen hat anstatt sich sofort auf die Fehlermeldung zu stürzen.
 
  • Danke
Reaktionen: theboss22
Ja das war klar... Nur muss man fufz den thread Ersteller nicht alles machen sondern kann Eigeninitative erwarten xd
 
EDIT da nicht sehr konstruktiv von mir^^
 
@DagobertDokate: Du hast natürlich Recht, aber er hat es ja grundsätzlich überhaupt nicht verstanden.

Den setter nur compilierbar zu machen, ohne zu wissen, was er überhaupt tun soll, war nicht sehr zielführend.
 
Ja das er es nicht versteht sieht man stellenweise gut im code :D
Du solltest dir deinen Code nochmal durchgucken und auch nochmal verbessern ;)

Hier sollte es doch auch später fliegen oder?
Code:
// Getting positions Count
	public int getContactsCount() {
		String countQuery = "SELECT  * FROM " + TABLE_CONTACTS;
		SQLiteDatabase db = this.getReadableDatabase();
		Cursor cursor = db.rawQuery(countQuery, null);
		cursor.close();

		// return count
		return cursor.getCount();
	}

lg. Dagobert
 
Alles klar, danke für die ganzen Antworten, inzwischen funktioniert es :)

die Code für Setter und getter und co. habe ich nun auch alle klein geschrieben, sind also besser lesbar :) werde mich dann mal damit befassen, wie ich die Datenbank am besten durchsuchen kann, habe da schon was zu gelesen
 

Ähnliche Themen

S
Antworten
33
Aufrufe
2.765
Sempervivum
S
M
Antworten
3
Aufrufe
212
moin
M
SpeedySix
Antworten
13
Aufrufe
1.411
jogimuc
J
Zurück
Oben Unten