2016-11-19 8 views
0

Ich bin sehr neu in Datenbanken, so dass ich einige Guides online sah und fing an, meine eigene Datenbank zu machen. Aus irgendeinem Grund funktioniert mein Add-Methode ist nicht und ich kann nicht herausfinden, warumKann Werte in meine SQLite-Datenbank einfügen

Diese meine Datenbank-Klasse ist

public class DBHandler extends SQLiteOpenHelper{ 

// Database Version 
private static final int DATABASE_VERSION = 2; 
// Database Name 
private static final String DATABASE_NAME = "DictionaryInfo"; 
// Contacts table name 
private static final String TABLE_WORDS = "Words"; 
// Shops Table Columns names 
private static final String KEY_ID ="id"; 
private static final String KEY_WORD = "word"; 
private static final String KEY_MEANING = "meaning"; 
private static final String CREATE_WORDS_TABLE = "CREATE TABLE " + TABLE_WORDS + "(" 
     + KEY_ID + " INTEGER PRIMARY KEY," + KEY_WORD + " TEXT," + KEY_MEANING + " TEXT " + ")"; 
public DBHandler(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
} 
@Override 
public void onCreate(SQLiteDatabase db) { 

    db.execSQL(CREATE_WORDS_TABLE); 
} 
@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

    db.execSQL("DROP TABLE IF EXISTS " + TABLE_WORDS); 

    onCreate(db); 
} 

public void addWord(Word word){ 

    SQLiteDatabase db = this.getReadableDatabase(); 
    ContentValues values = new ContentValues(); 

    values.put(KEY_ID,word.getId()); 
    values.put(KEY_WORD,word.getWord()); 
    values.put(KEY_MEANING,word.getMeaning()); 

    db.insert(TABLE_WORDS,null,values); 
    db.close(); 
} 

public Word getWord(int id){ 

    SQLiteDatabase db = this.getReadableDatabase(); 
    Cursor cursor = db.query(TABLE_WORDS,null,KEY_ID + " = ?",new String[]{String.valueOf(id)},null,null,null); 
    if (cursor != null) 
     cursor.moveToFirst(); 

    Word word = new Word(Integer.parseInt(cursor.getString(0)),cursor.getString(1),cursor.getString(2)); 
    return word; 

} 

}

Das ist mein "Wort" Klasse

public class Word { 
int _id; 
String word; 
String meaning; 


public Word(int id,String word, String meaning) 
{ 
    this._id = id; 
    this.word = word; 
    this.meaning = meaning; 
} 


public int getId() { 
    return this._id; 
} 

public void setId(int id) { 
    this._id = id; 
} 

public String getMeaning() { 
    return this.meaning; 
} 

public void setMeaning(String meaning) { 
    this.meaning = meaning; 
} 

public String getWord() { 
    return this.word; 
} 

public void setWord(String word) { 
    this.word = word; 
} 

}

Dies ist meine HauptAktivität

public class MainActivity extends AppCompatActivity { 

TextView tv1; 
TextView tv2; 
TextView tv3; 
TextView tv4; 
Button btn1; 



@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    tv1 = (TextView)findViewById(R.id.tv1); 
    tv2 = (TextView)findViewById(R.id.tv2); 
    tv3 = (TextView)findViewById(R.id.tv3); 
    tv4 = (TextView)findViewById(R.id.tv4); 
    btn1 = (Button)findViewById(R.id.btn1); 

    DBHandler db = new DBHandler(this); 
    db.addWord(new Word(1,"abc","def")); 
    Word word = db.getWord(1); 
    tv1.setText(word.getWord()); 
    tv2.setText(word.getMeaning()); 

} 

}

Ich habe versucht, die Werte Herausziehen der Datenbank aus und in eine Textview einsetzen zu überprüfen, ob ihre Arbeits aber durch die logcat kann ich offensichtlich seine irgendwo verursacht im Einsatz Prozess sehen, dass.

Mein logcat

com.example.android.psydictionary E/SQLiteLog: (1555) abbrechen bei 10 in [INSERT INTO Wörter (das heißt, Wort, id) VALUES (?,?,?)] : UNIQUE constraint ist fehlgeschlagen: Words.id 11-19 12: 34: 44.875 17853-17853/com.beispiel.android.psydictionary E/SQLiteDatabase: Fehler beim Einfügen von Bedeutung = def word = abc id = 1 android.database.sqlite. SQLiteConstraintException: UNIQUE-Einschränkung fehlgeschlagen: Words.id (Code 1555) bei android.database.sqlite.SQLiteConnection.nativeExecuteForLastInsertedRowId (systemeigene Methode) bei android.database.sql ite.SQLiteConnection.executeForLastInsertedRowId (SQLiteConnection.java:784) bei android.database.sqlite.SQLiteSession.executeForLastInsertedRowId (SQLiteSession.java:788) bei android.database.sqlite.SQLiteStatement.executeInsert (SQLiteStatement.java:86) bei android.database.sqlite.SQLiteDatabase.insertWithOnConflict (SQLiteDatabase.java:1471) bei android.database.sqlite.SQLiteDatabase.insert (SQLiteDatabase.java:1341) bei com.example.android.psydictionary.DBHandler.addWord (DBHandler. Java: 51) bei com.example.android.psydictionary.MainActivity.onCreate (MainActivity.java:31) bei android.app.Activity.performCreate (Activity.java: 5990) bei android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1106) bei android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2311) bei android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2420) bei android.app.ActivityThread.access $ 900 (ActivityThread.java:154) bei android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1321) bei android.os.Handler.dispatchMessage (Handler.java:102) bei android.os.Looper.loop (Looper.java:135) bei android.app.ActivityThread.main (ActivityThread.java:5294) bei java.lang.reflect.Method.invoke (native Methode) bei java.lang.reflect.Method.invoke (Methode.java:372) bei com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:904) bei com.android.internal.os.ZygoteInit.main (ZygoteInit.java:699)

Antwort

1

UNIQUE constraint failed sagt, was das Problem ist. Sie haben eine UNIQUE-Einschränkung für eine Spalte (dh Wörter, id) und versuchen, denselben Wert zweimal in diese Spalte einzufügen.

Es ist höchstwahrscheinlich die ID, die fehlschlägt. Vielleicht können Sie es einfach lassen und es wird während des Einfügens berechnet. Andernfalls überprüfen Sie Ihre Testdaten.

+1

Vielen Dank. Ich habe verstanden, dass ich dieselbe Add-Zeile immer und immer wieder ausgeführt habe, dies verursachte einen Fehler – Matan

Verwandte Themen