2016-06-14 20 views
0

Ich habe eine Java-Klasse zum Erstellen und Füllen einer Datenbank. Ich habe auch eine Aktivität, von der ich Informationen zur Verfügung stelle, um sie der Datenbank hinzuzufügen. Ich habe eine Methode zum Einfügen von Daten in die Datenbank, aber es funktioniert nicht, obwohl es aus meiner Sicht funktionieren sollte. Hier ist der Code:Android-Datenbank einfügen Fehler

public class AccountDatabase extends SQLiteOpenHelper { 
private final static String DB_Name="ACCOUNT_DATABASE"; 
private final static int DB_VERSION=1; 
private final static String TABLE_NAME="ACCOUNT"; 
private final static String col_1="ID"; 
private final static String col_2="USERNAME"; 
private final static String col_3="PASSWORD"; 
private final static String col_4="RETYPED PASSWORD"; 
private final static String col_5="EMAIL"; 
private final static String col_6="PASSPHRASE"; 
AccountDatabase(Context context) { 
    super(context, DB_Name, null, DB_VERSION); 
} 
@Override 
public void onCreate(SQLiteDatabase db) { 
    db.execSQL("CREATE TABLE "+ TABLE_NAME+"(ID INTEGER PRIMARY KEY AUTOINCREMENT,USERNAME TEXT,PASSWORD TEXT,RETYPED PASSWORD TEXT,EMAIL TEXT,PASSPHRASE TEXT)"); 
} 
@Override 
public void onUpgrade(SQLiteDatabase db,int oldVersion, int newVersion){ 
    db.execSQL("DROP TABLE IF EXISTS"+TABLE_NAME); 
    onCreate(db); 
} 
public boolean insertData(String username,String password,String retypedPassword,String email,String passphrase){ 
    SQLiteDatabase db=this.getWritableDatabase(); 
    ContentValues profileValues=new ContentValues(); 
    profileValues.put(col_2,username); 
    profileValues.put(col_3,password); 
    profileValues.put(col_4,retypedPassword); 
    profileValues.put(col_5,email); 
    profileValues.put(col_6,passphrase); 
    long result=db.insert(TABLE_NAME,null,profileValues);//this produces result -1 and I don't know why 
    if(result==-1) 
     return false; 
    else 
     return true; 
} 

Und das ist der Code für die Java-Aktivität aus dem ich den Aufruf der Methode:

public void submitAccount(View view){ 
    EditText info1=(EditText)(findViewById(R.id.username_edit_text)); 
    String message1=info1.getText().toString(); 
    EditText info2=(EditText)(findViewById(R.id.password_edit_text)); 
    String message2=info2.getText().toString(); 
    EditText info3=(EditText)(findViewById(R.id.retype_password_edit_text)); 
    String message3=info3.getText().toString(); 
    EditText info4=(EditText)(findViewById(R.id.email_edit_text)); 
    String message4=info4.getText().toString(); 
    EditText info5=(EditText)(findViewById(R.id.passphrase_edit_text)); 
    String message5=info5.getText().toString(); 
    if(!message1.isEmpty()) 
     counter++; 
    if(!message2.isEmpty()) 
     counter++; 
    if(!message3.isEmpty()) 
     counter++; 
    if(!message4.isEmpty()) 
     counter++; 
    if(!message5.isEmpty()) 
     counter++; 
    if(counter==5) { 
     mydb.insertData(message1,message2,message3,message4,message5);//this is where I call the method 
     Toast.makeText(CreateAccountActivity.this, "Data inserted:" + message1 + "\n" + message2 + "\n" + message3 + "\n" + message4 + "\n" + message5, Toast.LENGTH_LONG).show(); 
     Intent send = new Intent(this, WelcomeActivity.class); 
     String value = "true"; 
     send.putExtra(WelcomeActivity.EXTRA_MESSAGE, value); 
     counter = 0; 
     startActivity(send); 

    } 
    else{ 
     Intent send=new Intent(this,CreateAccountActivity.class); 
     Log.i(msg,"Still in CreateAccountActivity"); 
     counter=0; 
     startActivity(send); 
    } 
} 

ich die folgende Störung erhalte,

SQL (Abfrage) Fehler oder fehlende Datenbank. (In der Nähe von "PASSWORD": Syntaxfehler (Code 1): Während der Zusammenstellung: INSERT INTO ACCOUNT (Email, Passphrase USERNAME- retyped Passwort, Passwort) VALUES (,,,,)?????)

+0

verursacht durch: SQL (Abfrage) Fehler oder fehlende Datenbank. \t (in der Nähe von "PASSWORD": Syntaxfehler (Code 1)), beim Kompilieren: INSERT IN ACCOUNT (EMAIL, PASSPHRASE, BENUTZERNAME, RETYPED PASSWORD, PASSWORD) WERTE (?,?,?,?,?)) DAS IST DER FEHLER, den ich erhalte – Roberto

+2

Sieht so aus, als hätten Sie ein Leerzeichen zwischen RETYPED und PASSWORD - Ihr 4. Parameter Wenn Sie ein Trennzeichen benötigen, verwenden Sie die Unterstriche "_" – mrkernelpanic

Antwort

0

Der Fehler liegt innerhalb des Spaltennamens RETYPED PASSWORD. Fügen Sie einfach eine Quotierung für den Namen hinzu: 'RETYPED PASSWORD'. Sie können darüber schreiben here.

1
private final static String col_4="RETYPED PASSWORD"; 

Wenn Sie Leerzeichen in der SQL-Spaltennamen haben wollen, würden Sie es in zum Beispiel setzen müssen "\"double quotes\"" aber ich würde das nicht empfehlen - die Android sqlite API verhält sich inkonsistent mit solchen zitierten Spaltennamen.

Stattdessen einfach den Spaltennamen ein einzelnes Wort wie retypedPassword.


Ich habe den Spaltennamen festgelegt und jetzt habe ich diesen Fehler. Verursacht durch: SQL (Abfrage) Fehler oder fehlende Datenbank. (Keine solche Tabelle: ACCOUNT (Code 1):, beim Kompilieren:???? INSERT INTO ACCOUNT (EMAIL, Paßphrase ein, RETYPEDPASSWORD, Benutzername, Passwort) VALUES (,,,,))

zu Deinstallieren App, um die Datenbank neu zu erstellen. Das Inkrementieren der DB-Version funktioniert nur, wenn Sie das fehlende Leerzeichen in onUpgrade() beheben.

When is SQLiteOpenHelper onCreate()/onUpgrade() run?

+0

Vielen Dank, dass es funktioniert hat. Neuinstallation der App war die Lösung. – Roberto

0

machte Sie ein dummer Fehler einfach den Wert von

ändern
private final static String col_4 = "RETYPED PASSWORD"; 

in

private final static String col_4 = "RETYPEDPASSWORD"; 

und kopieren Sie diese und ersetzen Sie Ihre onCreate Methode

@Override 
public void onCreate(SQLiteDatabase db) { 
    db.execSQL("CREATE TABLE " + TABLE_NAME + "(ID INTEGER PRIMARY KEY AUTOINCREMENT,USERNAME TEXT,PASSWORD TEXT,RETYPEDPASSWORD TEXT,EMAIL TEXT,PASSPHRASE TEXT)"); 
} 

und führen Sie es erneut