2016-06-14 63 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 (查询)错误或缺少数据库。 (近 “PASSWORD”:语法错误(码1):在编译:INSERT INTO帐号(电子邮件,PASSPHRASE,USERNAME,重新输入的密码,密码)VALUES(,,,,)?????)

+0

原因:SQL(查询)错误或缺少数据库。 (?,?,?,?,?)在编译时:插入到帐户(EMAIL,PASSPHRASE,USERNAME,RETYPED PASSWORD,PASSWORD)值为“012”。))这是我得到的错误 – Roberto

+2

看起来你在RETYPED和PASSWORD之间有一个空格 - 你的第四个参数 如果你需要一个分隔符,使用下划线“_” – mrkernelpanic

回答

0

错误出现在列名称为RETYPED PASSWORD的空格内。 只需为名称添加引号:'重新输入密码'。 你可以写一下here

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

如果你想有空格在您的SQL列名,你需要把它放在如"\"double quotes\""但我不会推荐 - Android sqlite API的行为与引用的列名称不一致。

相反,只需将列名称设置为一个单词,如retypedPassword


我有固定的列名,现在我得到这个错误。造成者:SQL(查询)错误或缺少数据库。 (没有这样的表:帐户(代码1):在编译:?????INSERT INTO帐号(电子邮件,密码,RETYPEDPASSWORD,用户名,密码)VALUES(,,,,))

卸载你的应用程序来重新创建数据库。除非您修复了onUpgrade()中缺失的空白问题,否则增加db版本将不起作用。

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

并再次运行它