我有用于创建和填充数据库的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 (查询)错误或缺少数据库。 (近 “PASSWORD”:语法错误(码1):在编译:INSERT INTO帐号(电子邮件,PASSPHRASE,USERNAME,重新输入的密码,密码)VALUES(,,,,)?????)
原因:SQL(查询)错误或缺少数据库。 (?,?,?,?,?)在编译时:插入到帐户(EMAIL,PASSPHRASE,USERNAME,RETYPED PASSWORD,PASSWORD)值为“012”。))这是我得到的错误 – Roberto
看起来你在RETYPED和PASSWORD之间有一个空格 - 你的第四个参数 如果你需要一个分隔符,使用下划线“_” – mrkernelpanic