2014-02-17 22 views
5

Ich bin in meinen letzten Phasen der Erstellung einer Datenbank für meine Android-App, aber ich kann nicht scheinen, meine Primärschlüssel zu erhöhen. Hier ist mein Code, wo ich es einrichten,Android SQLite - Primärschlüssel - Einfügen in Tabelle

public class DatabaseHandler extends SQLiteOpenHelper { 

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

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

    // Contacts table name 
    public static final String TABLE_JOURNEY = "journey"; 

    // Contacts Table Columns names 
    private static final String KEY_P = "key"; 
    private static final String KEY_ID = "id"; 
    private static final String KEY_DIST = "distance"; 
    private static final String KEY_MPG = "mpg"; 
    private static final String KEY_COST = "cost"; 

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

    // Creating Tables 
    @Override 
    public void onCreate(SQLiteDatabase db) { 
     String CREATE_JOURNEY_TABLE = "CREATE TABLE " + TABLE_JOURNEY + "(" 
       + KEY_P + " INTEGER PRIMARY KEY," + KEY_ID + " TEXT," + KEY_DIST + " TEXT," 
       + KEY_MPG + " TEXT," + KEY_COST + " TEXT)"; 
     db.execSQL(CREATE_JOURNEY_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_JOURNEY); 

     // Create tables again 
     onCreate(db); 
    } 

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

    // Adding new contact 
    void addJourneyData(Journey journey) { 
     SQLiteDatabase db = this.getWritableDatabase(); 

     ContentValues values = new ContentValues(); 
     values.put(KEY_P, journey.getpKey()); 
     values.put(KEY_ID, journey.getId()); 
     values.put(KEY_DIST, journey.getDistance()); // Contact Name 
     values.put(KEY_MPG, journey.getMpg()); // Contact Phone 
     values.put(KEY_COST, journey.getCost()); // Contact Phone 

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

    // Getting single contact 
    Journey getJourney(int id) { 
     SQLiteDatabase db = this.getReadableDatabase(); 

     Cursor cursor = db.query(TABLE_JOURNEY, new String[] { KEY_P + KEY_ID + 
       KEY_DIST, KEY_MPG, KEY_COST }, KEY_P + "=?", 
       new String[] { String.valueOf(id) }, null, null, null, null); 
     if (cursor != null) 
      cursor.moveToFirst(); 

     Journey journey = new Journey(); 
     journey.setPkey(Integer.parseInt(cursor.getString(0))); 
     journey.setId(String.valueOf(cursor.getString(1))); 
     journey.setMpg(String.valueOf(cursor.getString(2))); 
     journey.setDistance(String.valueOf(cursor.getString(3))); 
     journey.setCost(String.valueOf(cursor.getString(4))); 
     // return contact 
     return journey; 
    } 

    // Getting All Contacts 
    public List<Journey> getAllJourneys() { 
     List<Journey> journeyList = new ArrayList<Journey>(); 
     // Select All Query 
     String selectQuery = "SELECT * FROM " + TABLE_JOURNEY; 

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

     // looping through all rows and adding to list 
     if (cursor.moveToFirst()) { 
      do { 
       Journey journey = new Journey(); 
       journey.setPkey(Integer.parseInt(cursor.getString(0))); 
       journey.setId(String.valueOf(cursor.getString(1))); 
       journey.setMpg(String.valueOf(cursor.getString(2))); 
       journey.setDistance(String.valueOf(cursor.getString(3))); 
       journey.setCost(String.valueOf(cursor.getString(4))); 
       // Adding contact to list 
       journeyList.add(journey); 
      } while (cursor.moveToNext()); 
     } 

     // return contact list 
     return journeyList; 
    } 
} 

Hier ist, wo ich die Details in eine Datenbank von einer Taste auf eine andere Aktivität hinzufügen,

db.addJourneyData(new Journey(1,timeStamp, distanceLabel, mpgAnswer, pplAnswer)); 

ich an den Punkt gelangen, wo wird es füge den ersten ein, aber von da an wird es sagen, dass der Primärschlüssel nicht eindeutig ist - daher wird die Datenbank nicht aktualisiert.

Auch ich möchte die Daten in absteigender Reihenfolge, um dies zu tun, verwende ich DESC, aber wo soll ich das platzieren?

Jede Hilfe dankbar,

Vielen Dank,

Antwort

8

Um die Datenbank automatisch generieren den Primärschlüssel für Sie sein würde, gebe es nur nicht sich selbst. Entfernen Sie diese Zeile aus dem Insert Code:

values.put(KEY_P, journey.getpKey()); 

Sie die erzeugte ID aus dem Rückgabewert von insert() erfassen kann.

Auch möchte ich die Daten in absteigender Reihenfolge, um dies zu tun, verwende ich DESC, aber wo soll ich das platzieren?

Unter der Annahme, dies zu getAllJourneys() gilt, wenn Sie eine rawQuery() tun, fügen Sie einfach die ORDER BY direkt in der SQL:

String selectQuery = "SELECT * FROM " + TABLE_JOURNEY + " ORDER BY " + KEY_P + " DESC"; 
0

Keine Notwendigkeit für values.put(KEY_P, journey.getpKey());

Die SQL wird, dass für Sie tun. Die PRIMARY KEY Funktion wird jeden Datensatz mit einer eindeutigen ID automatisch erhöhen.

Sie können ORDER BY in SQL verwenden, um die Reihenfolge anzugeben. Look here für weitere Informationen.

Sie sollten auch explizit angeben, dass Ihre Methoden private sind.

3

Gehen Sie durch die folgenden Schritte

wie diese

// Creating Tables 
@Override 
public void onCreate(SQLiteDatabase db) { 
    String CREATE_JOURNEY_TABLE = "CREATE TABLE " + TABLE_JOURNEY + "(" 
      + KEY_P + " INTEGER PRIMARY KEY AUTOINCREMENT DEFAULT 1 ," + KEY_ID + " TEXT," + KEY_DIST + " TEXT," 
      + KEY_MPG + " TEXT," + KEY_COST + " TEXT)"; 
    db.execSQL(CREATE_JOURNEY_TABLE); 
} 

unter Verwendung

INTEGER PRIMARY KEY AUTOINCREMENT DEFAULT 1 

Sie starten Zuwachs von 1 Ändern Sie bitte Ihre Erstellen von Code-Tabellen

können

Entfernen Sie dann den folgenden Code

values.put(KEY_P, journey.getpKey()); 
Verwandte Themen