Problem mit SQLite

  • 2 Antworten
  • Letztes Antwortdatum
C

CSharper

Neues Mitglied
0
Hallo,
meine Daten wollen irgendwie nicht in die Datenbank!
Ich finde den Fehler auf Anhieb nicht.

Hat hier vielleicht jemand einen besseren Blick?

Der Log:
01-27 17:39:50.961: E/SQLiteLog(920): (1) near ";": syntax error
01-27 17:39:51.010: E/SQLiteDatabase(920): Error inserting Model=Modell 7 Mileage=50127 Make=Automarke 7
01-27 17:39:51.010: E/SQLiteDatabase(920): android.database.sqlite.SQLiteException: near ";": syntax error (code 1): , while compiling: INSERT INTO tbl_Cars;(Model,Mileage,Make) VALUES (?,?,?)



Meine Add Methode
PHP:
/**
	 * Add new Car to tbl_Cars
	 */
	public void addCar( Car car )
	{
		SQLiteDatabase db = this.getWritableDatabase();
		ContentValues values = new ContentValues();
		values.put(KEY_CAR_MAKE, car.getMake()); // car Make
		values.put(KEY_CAR_MODEL, car.getModel()); // car Model
		values.put(KEY_CAR_MILEAGE, car.getMileage()); // car Mileage

		// Insert Row to db
		db.insert(TABLE_CARS, null, values);
		db.close(); // Closing database connection
	}

Hier die gesamte DBManager Klasse
PHP:
public class DriversLogDataContext extends SQLiteOpenHelper
{
	private static final String DATABASE_NAME = "DriversLog.db";
	private static final int DATABASE_VERSION = 1;
	private static final String TABLE_CARS = "tbl_Cars";

	// Table Column Names KEY_...
	private static final String KEY_CAR_ID = "ID";
	private static final String KEY_CAR_MAKE = "Make";
	private static final String KEY_CAR_MODEL = "Model";
	private static final String KEY_CAR_MILEAGE = "Mileage";


	// Constructor
	public DriversLogDataContext( Context context )
	{
		super(context, DATABASE_NAME, null, DATABASE_VERSION);
	}

	// Creating Tables
	@Override
	public void onCreate( SQLiteDatabase db )
	{
		db.execSQL("CREATE TABLE " + TABLE_CARS + "(" + KEY_CAR_ID + " INTEGER PRIMARY KEY," + KEY_CAR_MAKE + " TEXT," + KEY_CAR_MODEL + " TEXT," + KEY_CAR_MILEAGE + " TEXT" + ")");
	}

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

		// Create tables again
		onCreate(db);
		Log.d("Database updated!", null);
	}

	// All READ, UPDATE, DELETE, CREATE Operations
	/**
	 * Add new Car to tbl_Cars
	 */
	public void addCar( Car car )
	{
		SQLiteDatabase db = this.getWritableDatabase();
		ContentValues values = new ContentValues();
		values.put(KEY_CAR_MAKE, car.getMake()); // car Make
		values.put(KEY_CAR_MODEL, car.getModel()); // car Model
		values.put(KEY_CAR_MILEAGE, car.getMileage()); // car Mileage

		// Insert Row to db
		db.insert(TABLE_CARS, null, values);
		db.close(); // Closing database connection
	}

	/**
	 * Get Car row out of tbl_Cars
	 */
	public Car getCar( int id )
	{
		SQLiteDatabase db = this.getWritableDatabase();
		Cursor cursor = db.query(TABLE_CARS, new String[] { KEY_CAR_ID, KEY_CAR_MAKE, KEY_CAR_MODEL, KEY_CAR_MILEAGE }, KEY_CAR_ID + " =? ", new String[] { String.valueOf(id) }, null, null, null, null);
		if ( cursor != null ) cursor.moveToFirst();
		Car car = new Car();
		car.setID(Integer.parseInt(cursor.getString(0)));
		car.setMake(cursor.getString(1));
		car.setModel(cursor.getString(2));
		car.setMileage(Integer.parseInt(cursor.getString(3)));
		// return Car
		return car;
	}

	/**
	 * Get all Car rows out of tbl_Cars
	 * 
	 * @return ArrayList(Car)
	 */
	public ArrayList<Car> getAllCars( )
	{
		ArrayList<Car> CarList = new ArrayList<Car>();
		String selectQuery = "SELECT * FROM " + TABLE_CARS;

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

		// looping through all rows and adding to list
		if ( cursor.moveToFirst() )
		{
			do
			{
				Car car = new Car();
				car.setID(Integer.parseInt(cursor.getString(0)));
				car.setMake(cursor.getString(1));
				car.setModel(cursor.getString(2));
				car.setMileage(Integer.parseInt(cursor.getString(3)));
				CarList.add(car);
			}
			while ( cursor.moveToNext() );
		}

		// return CarList
		return CarList;
	}

	/**
	 * Update singleCar row at tbl_Cars
	 */
	public int updateCar( Car car )
	{
		SQLiteDatabase db = this.getWritableDatabase();
		ContentValues values = new ContentValues();
		values.put(KEY_CAR_MAKE, car.getMake()); // car Make
		values.put(KEY_CAR_MODEL, car.getModel()); // car Model
		values.put(KEY_CAR_MILEAGE, car.getMileage()); // car Mileage

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

	/**
	 * Delete singleCar row at tbl_Cars
	 */
	public void deleteCar( Car car )
	{
		SQLiteDatabase db = this.getWritableDatabase();
		db.delete(TABLE_CARS, KEY_CAR_ID + " = ?", new String[] { String.valueOf(car.getID()) });
		db.close();
	}

	/**
	 * Get Car count from tbl_Cars
	 */
	public int getCarsCount( Car car )
	{
		SQLiteDatabase db = this.getWritableDatabase();
		String countQuery = "SELECT  * FROM " + TABLE_CARS;
		Cursor cursor = db.rawQuery(countQuery, null);
		cursor.close();

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

}


Seltsamer Weise funktioniert diese Manager Klasse einwandfrei!
Ich sehe nur, dass der Datenbankname ein anderer ist.
PHP:
public class DatabaseManager extends SQLiteOpenHelper
{
	// All Static variables
	// Database Version
	private static final int DATABASE_VERSION = 1;

	// Database Name
	private static final String DATABASE_NAME = "GPS_Drivers_Log.db";

	// Contacts table name
	private static final String TABLE_CARS = "tbl_Cars";

	// Contacts Table Columns names
	private static final String KEY_ID = "ID";
	private static final String KEY_MAKE = "Make";
	private static final String KEY_MODEL = "Model";
	private static final String KEY_MILEAGE = "Mileage";


	public DatabaseManager( Context context )
	{
		super(context, DATABASE_NAME, null, DATABASE_VERSION);
	}

	// Creating Tables
	@Override
	public void onCreate( SQLiteDatabase db )
	{
		db.execSQL("CREATE TABLE " + TABLE_CARS + "(" + KEY_ID + " INTEGER PRIMARY KEY," + KEY_MAKE + " TEXT," + KEY_MODEL + " TEXT," + KEY_MILEAGE + " TEXT" + ")");
	}

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

		// Create tables again
		onCreate(db);
	}

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

	// Adding new contact
	public void addCar( Car car )
	{
		SQLiteDatabase db = this.getWritableDatabase();

		ContentValues values = new ContentValues();
		values.put(KEY_MAKE, car.getMake()); // car Make
		values.put(KEY_MODEL, car.getModel()); // car Model
		values.put(KEY_MILEAGE, car.getMileage()); // car Mileage

		// Inserting Row
		db.insert(TABLE_CARS, null, values);
		db.close(); // Closing database connection
	}

	// Getting single contact
	public Car getCar( int id )
	{
		SQLiteDatabase db = this.getReadableDatabase();

		Cursor cursor = db.query(TABLE_CARS, new String[] { KEY_ID, KEY_MAKE, KEY_MODEL, KEY_MILEAGE }, KEY_ID + "=?", new String[] { String.valueOf(id) }, null, null, null, null);
		if ( cursor != null ) cursor.moveToFirst();

		Car car = new Car();
		car.setID(Integer.parseInt(cursor.getString(0)));
		car.setMake(cursor.getString(1));
		car.setModel(cursor.getString(2));
		car.setMileage(Integer.parseInt(cursor.getString(3)));
		// return car
		return car;
	}

	// Getting All Contacts
	public ArrayList<Car> getAllCars( )
	{
		ArrayList<Car> contactList = new ArrayList<Car>();
		// Select All Query
		String selectQuery = "SELECT  * FROM " + TABLE_CARS;

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

		// looping through all rows and adding to list
		if ( cursor.moveToFirst() )
		{
			do
			{
				Car car = new Car();
				car.setID(Integer.parseInt(cursor.getString(0)));
				car.setMake(cursor.getString(1));
				car.setModel(cursor.getString(2));
				car.setMileage(Integer.parseInt(cursor.getString(3)));

				// Adding contact to list
				contactList.add(car);
			}
			while ( cursor.moveToNext() );
		}

		// return contact list
		return contactList;
	}

	// Updating single contact
	public int updateCar( Car car )
	{
		SQLiteDatabase db = this.getWritableDatabase();

		ContentValues values = new ContentValues();
		values.put(KEY_MAKE, car.getMake()); // car Make
		values.put(KEY_MODEL, car.getModel()); // car Model
		values.put(KEY_MILEAGE, car.getMileage()); // car Mileage

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

	// Deleting single contact
	public void deleteCar( Car car )
	{
		SQLiteDatabase db = this.getWritableDatabase();
		db.delete(TABLE_CARS, KEY_ID + " = ?", new String[] { String.valueOf(car.getID()) });
		db.close();
	}

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

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


Der ursprüngliche Beitrag von 19:24 Uhr wurde um 20:09 Uhr ergänzt:

Hmm, bin jetzt einen Schritt weiter.
Jetzt heißt es

01-27 19:06:16.439: E/SQLiteLog(1345): (1) table tbl_Cars has no column named Model
01-27 19:06:16.469: E/SQLiteDatabase(1345): Error inserting Model=Modell 0 Mileage=0 Make=Automarke 0
01-27 19:06:16.469: E/SQLiteDatabase(1345): android.database.sqlite.SQLiteException: table tbl_Cars has no column named Model (code 1): , while compiling: INSERT INTO tbl_Cars(Model,Mileage,Make) VALUES (?,?,?)


Ich erstelle in dieser Methode doch die genannte Column "Model"
PHP:
// Contacts Table Columns names
	private static final String KEY_CAR_ID = "ID";
	private static final String KEY_CAR_MAKE = "Make";
	private static final String KEY_CAR_MODEL = "Model";
	private static final String KEY_CAR_MILEAGE = "Mileage";
// Creating Tables
	@Override
	public void onCreate( SQLiteDatabase db )
	{
		db.execSQL("CREATE TABLE " + TABLE_CARS + "(" + KEY_CAR_ID + " INTEGER PRIMARY KEY," + KEY_CAR_MAKE + " TEXT," + KEY_CAR_MODEL + " TEXT," + KEY_CAR_MILEAGE + " INTEGER" + ")");
	}
 
Zuletzt bearbeitet:
Mal so nebenbei gefragt?!?
Kann man eigentlich mehrere Datenbanken in einem Android Projekt erzeugen?

Ich starte nämlich beide Datenbank Manager Klassen gleichzeitig.

Und der Log spuckt auch einmal (no such file or directory) aus!
 
Zuletzt bearbeitet:
Ok, Problem gelöst!

Es ist tatsächlich etwas schief gelaufen.
Und zwar musste ich das Häkchen bei "wipe user data" in der Run Konfiguration setzen. Das löscht alle im Emulator befindlichen Daten.

Das hat dann auch meine Datenbanken beim start des Emulators gelöscht.

Schwupps schon funktioniert alles mit der neu erstellten Datenbank :flapper:

Das muss man als Newbie auch erstmal wissen!

Ein Glück, ich dachte schon das wär die ManagerKlasse aus meinem Tool, dass ich gebastelt hab. Das liest mir aus einer Klasse alle Property's und generiert daraus dann die Datenbank Manager Klasse.
 
Zurück
Oben Unten