android - 如何在 Android Studio 的 SQLite 中解决语法错误?

标签 android sqlite android-studio

这是我在代码中遇到的错误

::01-16 13:28:23.029    2782-
2782/com.example.innovative.firstapp E/SQLiteLog﹕ (1) near "add": syntax error
01-16 13:28:23.049    2782-2782/com.example.innovative.firstapp E/SQLiteDatabase﹕ Error inserting lastName=chauhan phone=1224567890 add=chandigarh firstName=param email=er.param90@gmail.com password=12345
    android.database.sqlite.SQLiteException: near "add": syntax error (code 1): , while compiling: INSERT INTO Reg_User(lastName,phone,add,firstName,email,password) VALUES (?,?,?,?,?,?)
            at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
            at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1113)
            at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:686)
            at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
            at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
            at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
            at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1573)
            at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1445)
            at com.example.innovative.firstapp.dbHelper.insert(dbHelper.java:57)
            at com.example.innovative.firstapp.registrationForm.onClick(registrationForm.java:83)
            at android.view.View.performClick(View.java:4432)
            at android.view.View$PerformClick.run(View.java:18338)
            at android.os.Handler.handleCallback(Handler.java:725)
            at android.os.Handler.dispatchMessage(Handler.java:92)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5283)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
            at dalvik.system.NativeStart.main(Native Method)
01-16 13:28:23.119    2782-2782/com.example.innovative.firstapp I/brcm-gr﹕ [gralloc_lock]: new usage 0x933

这是我的 registrationForm.java 文件的代码 fragment

public class registrationForm extends ActionBarActivity implements View.OnClickListener {
    EditText e1, e2, e3, e4, e5, e6, e7;
    Button b1, b2;
    public static final Pattern EMAIL = Pattern.compile("[a-zA-Z0-9+._%-+]{1,100}" + "@" + "[a-zA-Z0-9][a-zA-Z0-9-]{0,10}" + "(" + "."
            + "[a-zA-Z0-9][a-zA-Z0-9-]{0,20}" + ")+");
    public static final Pattern FirstNAME = Pattern.compile("[a-zA-Z0-9]{1,10}");
    public static final Pattern LastNAME = Pattern.compile("[a-zA-Z0-9]{1,10}");
    public static final Pattern PASSWORD = Pattern.compile("[0-9]{4,16}");
    public static final Pattern PHONE = Pattern.compile("[0-9]{10}");
    public static final Pattern ADD = Pattern.compile("[A-Z a-z 0-9]{1,50}");
     dbHelper db;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_registration_form);
        e1 = (EditText) findViewById(R.id.editText);
        e2 = (EditText) findViewById(R.id.editText2);
        e3 = (EditText) findViewById(R.id.editText3);
        e4 = (EditText) findViewById(R.id.editText4);
        e5 = (EditText) findViewById(R.id.editText5);
        e6 = (EditText) findViewById(R.id.editText6);
        e7 = (EditText) findViewById(R.id.editText7);
        b1 = (Button) findViewById(R.id.button);
        b2 = (Button) findViewById(R.id.button2);
        b1.setOnClickListener(this);
        b2.setOnClickListener(this);
        db=new dbHelper(this);

    }

    @Override
    public void onClick(View v) {
        String firstName = e1.getText().toString();
        String lastName = e2.getText().toString();
        String password = e3.getText().toString();
        String confirm = e4.getText().toString();
        String email = e5.getText().toString();
        String phone = e6.getText().toString();
        String add = e7.getText().toString();


        if (v == b1) {

            if (firstName.equals("") || lastName.equals("") || password.equals("") || confirm.equals("")
                    || email.equals("") || phone.equals("") || add.equals(""))
            {
                Toast.makeText(this, "Field must not be null", Toast.LENGTH_SHORT).show();
            }

            if (!CheckFirst_name(firstName)) {
                Toast.makeText(this, "ENTER VALID FIRST NAME", Toast.LENGTH_LONG).show();
            }
            if (!CheckLast_name(lastName)) {
                Toast.makeText(this, "ENTER VALID LAST NAME", Toast.LENGTH_LONG).show();
            }
            if (!CheckPassword(password)) {
                Toast.makeText(this, "ENTER VALID PASSWORD", Toast.LENGTH_LONG).show();
            }
            if (!CheckEmail(email)) {
                Toast.makeText(this, "ENTER VALID EMAIL ID", Toast.LENGTH_LONG).show();
            }
            if (!CheckPhone(phone)) {
                Toast.makeText(this, "ENTER VALID PHONE NUMBER", Toast.LENGTH_LONG).show();
            }
            if (!CheckAddress(add)) {
                Toast.makeText(this, "ENTER VALID ADDRESS", Toast.LENGTH_LONG).show();
            }
            if (!confirm.equals(password)) {
                Toast.makeText(this, "Password doesn't Match", Toast.LENGTH_LONG).show();
            }
            else{
                    db.insert(firstName, lastName, password,email,phone,add);

                Toast.makeText(getApplicationContext(), "Account Successfully Created ", Toast.LENGTH_SHORT).show();
            }
        }
        if (v == b2) {
            Intent i1 = new Intent(this, Login.class);
            startActivity(i1);
        }
    }

    private boolean CheckEmail(String email) {

        return EMAIL.matcher(email).matches();
    }

    private boolean CheckPassword(String password) {

        return PASSWORD.matcher(password).matches();
    }

    private boolean CheckFirst_name(String firstName) {

        return FirstNAME.matcher(firstName).matches();
    }

    private boolean CheckLast_name(String lastName) {
        return LastNAME.matcher(lastName).matches();
    }

    private boolean CheckPhone(String phone) {
        return PHONE.matcher(phone).matches();
    }

    private boolean CheckAddress(String add) {
        return ADD.matcher(add).matches();
    }

}

这是 dbHelper 类文件代码::

public class dbHelper extends SQLiteOpenHelper {
    public static SQLiteDatabase db;

    static final String DATABASE_NAME = "User.db";
    static final int DATABASE_VERSION = 1;
    public static final String KEY_ID="ID";
    public static final String KEY_fname="firstName";
    public static final String KEY_lname="lastName";
    public static final String KEY_pass="password";
    public static final String KEY_email="email";
    public static final String KEY_phone="phone";
    public static final String KEY_add="add";
    public static final String Table_User="Reg_User";

    public dbHelper(Context context)
    {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase _db)
    {
        _db.execSQL("CREATE TABLE"+ Table_User+ "("+ KEY_ID+" integer primary key autoincrement,"+
                KEY_fname+" text,"+KEY_lname +" text,"+KEY_pass+" text,"+ KEY_email+" text,"+ KEY_phone+" text,"+KEY_add+"text)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase _db, int _oldVersion, int _newVersion)
    {

           _db.execSQL("DROP TABLE IF EXISTS " +Table_User);

        onCreate(_db);
    }


    public void insert(String firstName, String lastName, String password, String email, String phone, String add)
    {
        SQLiteDatabase db=this.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(KEY_fname, firstName);
        values.put(KEY_lname, lastName);
        values.put(KEY_pass,password);
        values.put(KEY_email,email);
        values.put(KEY_phone,phone);
        values.put(KEY_add, add);
       db.insert(Table_User, null, values);
        db.close();
    }
    public static String getSingleEntry(String email)
    {
        Cursor cursor=db.query("Reg_User", null, " KEY_email=?", new String[]{email}, null, null, null, null);
        if(cursor.getCount()<1)
        {
            cursor.close();
            return "NOT EXIST";
        }
        cursor.moveToFirst();
        String password= cursor.getString(cursor.getColumnIndex("KEY_pwd"));
        cursor.close();
        return password;
    }



}

我无法找出这段代码中的问题所在。

最佳答案

您不应该为 KEY_add 使用“add”,因为它是 SQL 的保留关键字。

关于android - 如何在 Android Studio 的 SQLite 中解决语法错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27979552/

相关文章:

android - 取拇指印象an​​droid

java - 检查设备是否支持 Unicode?

javascript - 在 React Native 中从应用程序本身的 web View 重定向到移动应用程序

sqlite - 将数组参数传递给 SQLiteObject.executeSql()

javascript - 我无法创建新项目 “Unable to resolve dependency for ':app @ debug/compileClasspath'”

android - 在 Android 2.0 中查找 UUID

swift - SQLite - 删除包含字符串的行

iphone - SQLite、iPhone 和版本控制

android - java.lang.RuntimeException : setAudioSource failed 错误

android - 如何确定 Google Play 服务的版本?