2013-07-03 7 views
26

dostaję ten błąd - 07-03 12:29:18.643: E/SQLiteLog(5181): (1) table accounts has no column named otherNotesAndroid SQLite problem - stół ... ma kolumnę o nazwie

To jest mój kod:

private static final int DATABASE_VERSION = 1; 
private static final String DATABASE_NAME = "accountsManager"; 
private static final String TABLE_ACCOUNTS = "accounts"; 

private static final String KEY_ID = "id"; 
private static final String KEY_TITLE = "title"; 
private static final String KEY_USERID = "userId"; 
private static final String KEY_PASSWORD = "password"; 
private static final String KEY_LOGINURL = "loginUrl"; 
private static final String KEY_OTHERNOTES = "otherNotes"; 

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

public void onCreate(SQLiteDatabase db) { 
    String CREATE_ACCOUNTS_TABLE = "CREATE TABLE " + TABLE_ACCOUNTS + "(" 
      + KEY_ID + " INTEGER PRIMARY KEY," + KEY_TITLE + " TEXT," 
      + KEY_USERID + " TEXT," + KEY_PASSWORD + " TEXT," + KEY_LOGINURL + " TEXT," 
      + KEY_OTHERNOTES + " TEXT" + ");"; 
db.execSQL(CREATE_ACCOUNTS_TABLE); 
} 


public void addAccount(AccountDetails account) { 
    SQLiteDatabase db = this.getWritableDatabase(); 
    System.out.println("Hello!"); 


    ContentValues values = new ContentValues(); 
    values.put(KEY_TITLE, account.getTitle()); // Account Title 
    values.put(KEY_USERID, account.getUserId()); // account userid 
    values.put(KEY_PASSWORD, account.getPassword()); // account password 
    values.put(KEY_LOGINURL, account.getLoginUrl()); // account loginurl 
    values.put(KEY_OTHERNOTES, account.getOtherNotes()); // account othernotes 
    Log.v("title", KEY_TITLE); 


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

Ponadto, kiedy usunąć następujące oświadczenie:

values.put(KEY_OTHERNOTES, account.getOtherNotes()); // account othernotes 

Następnie pojawia się ten sam problem z hasłem ... itd. tj. (1) kont na stole nie ma kolumny o nazwie hasło

Proszę o pomoc!

+3

wyciągnąć ty db i sprawdzić, czy wymienione kolumny są tworzone w tych tabelach .. – CRUSADER

+5

Potencjalnie pracujesz ze starą wersją swojej db. Spróbuj wejść w ustawienia/aplikacje i "wyczyść dane" w swojej aplikacji. Możesz też odinstalować i zainstalować ponownie. –

+2

Zmień numer wersji bazy danych i ponownie uruchom kod. !! –

Odpowiedz

64

Wygląda na to, że dodałeś kilka kolumn później w bazie danych. Zgadzam się z Kenem Wolfem i powinieneś rozważyć odinstalowanie i ponowne zainstalowanie aplikacji. Lepszym rozwiązaniem jest upuszczenie i odtworzenie wszystkich tabel w metodzie onUpdate i zwiększenie wersji bazy danych przy każdej zmianie schematu.

+2

Tak, to działało. Poszedłem do ustawień i wyczyściłem wszystkie poprzednie dane. Po tym wszystko działało idealnie. Dziękujemy! –

1

Tutaj jest twoje zapytanie..TRY to.

String CREATE_ACCOUNTS_TABLE = "CREATE TABLE "+TABLE_ACCOUNTS+"(KEY_ID INTEGER PRIMARY KEY,KEY_TITLE TEXT,KEY_USERID TEXT,KEY_PASSWORD TEXT,KEY_LOGINURL TEXT,KEY_OTHERNOTES TEXT);"; 
+0

Czy możesz opracować, jakie zmiany wykonane i dlaczego? –

+0

KEY_USERID, KEY_PASSWORD itp. Są już zadeklarowane zmiennymi łańcuchowymi. Twój kod jest absolutnie bez sensu –

+0

Po prostu wstawia KEY_ID i pisze ograniczenie w "", więc możemy również dać constarint, jak pokazuję .... On może spróbować tego raz .. Myślę, że popełnił błąd w napisaniu jego zapytania. –

2

Kod SQL wygląda dobrze. Myślę, że zapomniałeś zadzwonić pod numer open() do utworzonego obiektu bazy danych.

dodać to do ciebie metody SQL klasy:

private DbHelper ourHelper; 
    private final Context ourContext; 
    private SQLiteDatabase ourDatabase; 

    public DataBaseMain open() throws SQLException{ //open the database to make her writeable, must be called before writing to database 
      ourHelper = new DbHelper(ourContext); 
      ourDatabase = ourHelper.getWritableDatabase(); 
      return this; 
     } 
     public void close(){    //closing the database for writing, avoids error. 
      ourHelper.close(); 
     } 

I użyć, gdy chcesz zadzwonić DB.

1

Jest to możliwe, jeśli popełnił błąd w zapytaniu tworzenia, a następnie naprawić,

Więc w systemie plików masz db, ale to db prawdopodobnie nie ma takiej kolumny.

Rozwiązanie: w emulatorze znajdź plik db: data/data/com.somecompany.tworzeń/bazy danych/db i usuń go, a następnie spróbuj ponownie.

Możliwe jest również otwarcie tego pliku w niektórych eksploratorach sql i sprawdzenie, czy istnieje ta kolumna.

8

dobrze, jeśli jesteś confindent o składni do tworzenia tabeli, niż może się zdarzyć podczas dodawania nowej kolumny w tym samym stole, na które ...

1) unistall z urządzenia i uruchomić go jeszcze raz.

LUB

2) Setting -> app -.> ClearData

LUB

3) Zmiana DATABASE_NAME w swojej klasie "DatabaseHandler" (I w obliczu tego samego problemu, ale Udało mi się zmienić, zmieniając DATABASE_NAME.)

LUB

4) Zmiana Database_Version w "DatabaseHandler" klasy (Jeśli dodaliśmy nową kolumnę niż będzie uaktualnić autimatically)

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

Try "Wyczyść dane" na swoim Aplikacja z Ustawień. Dla mnie ten problem występował, ponieważ przechowywałem dane na karcie SD, a później dodałem kilka kolumn. Więc jeśli zapisujesz na karcie SD, usuń poprzednie dane.

1

można tylko określić wersję takiego:

private static final int VERSION = 4; 
Powiązane problemy