2016-06-14 4 views
0

У меня есть класс Java для создания и заполнения базы данных. У меня также есть активность, из которой я предоставляю информацию для добавления в базу данных. У меня есть метод для вставки данных в базу данных, но он не работает, хотя с моей точки зрения он должен работать. Вот код:Ошибка ввода базы данных Android

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; 
} 

И это код активности Java, из которого я называю метод:

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); 
    } 
} 

Я получаю следующее сообщение об ошибке,

SQL (запрос) или отсутствующая база данных. (Рядом с "ПАРОЛЬ": ошибка синтаксиса (код 1):, при компиляции: INSERT INTO СЧЕТА (EMAIL, PassPhrase, USERNAME, перепечатанные ПАРОЛЬ ПАРОЛЬ) VALUES (,,)????)

+0

Причина: Ошибка SQL (запрос) или отсутствующая база данных. \t (около "PASSWORD": синтаксическая ошибка (код 1): при компиляции: INSERT INTO ACCOUNT (EMAIL, PASSPHRASE, USERNAME, RETYPED PASSWORD, PASSWORD) ЗНАЧЕНИЯ (?,?,?,?,?)) ЭТО ОШИБКА I GET – Roberto

+2

Похоже, у вас есть пробел между RETYPED и PASSWORD - ваш 4-й параметр Если вам нужен разделитель, используйте символы подчеркивания «_» – mrkernelpanic

ответ

0

Ошибка в пространстве внутри имени столбца RETYPED PASSWORD. Просто добавьте цитату для имени: «RETYPED PASSWORD». Вы можете написать об этом here.

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

Если вы хотите иметь пробелы в именах столбцов SQL, вы должны поместить его в, например, "\"double quotes\"", но я бы не рекомендовал - Android-интерфейс sqlite Android ведет себя непоследовательно с такими именами названных столбцов.

Вместо этого просто укажите название столбца одним словом, например retypedPassword.


Я установил имя столбца, и теперь я получил эту ошибку. Вызвано: Ошибка SQL (запрос) или отсутствующая база данных. (Нет такой таблицы: СЧЕТ (код 1):, во время компиляции:??? ВСТАВИТЬ УЧЕТОМ (EMAIL, PassPhrase, RETYPEDPASSWORD, USERNAME, PASSWORD) VALUES (,,))

деинсталлировать приложение для воссоздания базы данных. Приращение версии db не будет работать, если вы не устраните недостающую проблему с пробелами в onUpgrade().

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

+0

Спасибо, что это сработало. Решение было переустановлено. – Roberto

0

вы сделали глупая ошибка просто изменить значение

private final static String col_4 = "RETYPED PASSWORD"; 

в

private final static String col_4 = "RETYPEDPASSWORD"; 

и скопировать это и заменить ваш OnCreate метод

@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)"); 
} 

и запустите его еще раз

Смежные вопросы