java - Android:创建表时抛出错误

标签 java android

我在数据库中创建了 2 个表。 1 工作正常。 TABLE_NAME2 在创建时出错。

DatabaseHelper.java:

         public class DatabaseHelper extends SQLiteOpenHelper {
        public static final String DATABASE_NAME = "abc.db";
        public static final String TABLE_NAME1 = "table1";
    public static final String COL2 = "col1";
    public static final String COL3 = "Date";
    public static final String COL4 = "Cost";
    public static final String COL5 = "loc1";
    public static final String COL6 = "loc2";
    public static final String COL7 = "Description";

    public static final String TABLE_NAME2 = "signup";
    public static final String USER_NAME = "NAME";
    public static final String USER_EMAIL = "EMAIL";
    public static final String USER_MOBILE = "MOBILE";
    public static final String USER_PASS = "PASSWORD";

    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, 1);


    }@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("CREATE TABLE " + TABLE_NAME2 + "("
            + USER_NAME + "TEXT,"
            + USER_EMAIL + "TEXT,"
            + USER_MOBILE + "TEXT, "
            + USER_PASS + "TEXT)");
    db.execSQL("CREATE Table " + TABLE_NAME1 + "("// + COL1 + " INTEGER PRIMARY KEY AUTOINCREMENT,"
            + COL2 + " TEXT,"
            + COL3 + " TEXT,"
            + COL4 + " TEXT,"
            + COL5 + " TEXT,"
            + COL6 + " TEXT,"
            + COL7 + " TEXT)");
     }



    @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS " +TABLE_NAME1);
    db.execSQL("DROP TABLE IF EXISTS " +TABLE_NAME2);
    onCreate(db);


}

public boolean insertHomeDataDB(String locName, String date, String cost, String startLoc, String endLoc, String description){
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put(COL2, locName);
    contentValues.put(COL3, date);
    contentValues.put(COL4, cost);
    contentValues.put(COL5, startLoc);
    contentValues.put(COL6, endLoc);
    contentValues.put(COL7, description);
    //contentValues.put(COL8, userId);

    long result = db.insert(TABLE_NAME1, null, contentValues);
    if (result==-1){
        return false;
    }
    else
        return true;
}

public boolean insertSignupDataDB(String name, String email, String mobile, String pass){

    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put(USER_NAME, name);
    contentValues.put(USER_EMAIL, email);
    contentValues.put(USER_MOBILE, mobile);
    contentValues.put(USER_PASS, pass);

    long result = db.insert(TABLE_NAME2, null, contentValues);
    if (result==-1){
        return false;
    }
    else
        return true;
}

public Cursor getAllHomeData(SQLiteDatabase db){
    Cursor res;
    String[] projection = {COL2,COL3,COL4};
    res = db.query(TABLE_NAME1,projection,null,null,null,null,null);
    return res;

}

public Cursor getAllProfileData(SQLiteDatabase db){
    Cursor res;
    String[] projection={USER_NAME,USER_EMAIL,USER_MOBILE,USER_PASS};
    res = db.query(TABLE_NAME2, projection,null,null,null,null,null);
    return res;
}
}

从此页面中,我将数据发送到 DatabaseHelper 类以插入数据。它显示 toast“成功注册”,但在日志中显示错误,并且也没有导航到 LoginActivity 类。它正在导航到 MainActivity。即使其他部分也无法正常工作。当我输入不同的密码时,它会给出错误应用程序已停止。

if(etSignPass.getText().toString().equals(etSignConPass.getText().toString())){

                boolean queryResult = dbHelper.insertSignupDataDB(etSignName.getText().toString(),
                        etSignEmail.getText().toString(), etSignMobile.getText().toString(), etSignPass.getText().toString());
                if(queryResult=true){
                    Toast.makeText(SignUp.this, "Successfully Signed up", Toast.LENGTH_SHORT).show();

                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                        navigateUpTo(new Intent(SignUp.this,LoginActivity.class));
                    }

                }
                else{
                    Toast.makeText(SignUp.this, "Error", Toast.LENGTH_SHORT).show();
                }

            }

            else{
                etSignConPass.setBackgroundColor(Color.RED);
                onClicSignUp();
            }
        }

最佳答案

db.execSQL("CREATE TABLE " + TABLE_NAME2 + "("
        + USER_NAME + "TEXT,"
        + USER_EMAIL + "TEXT,"
        + USER_MOBILE + "TEXT, "
        + USER_PASS + "TEXT)");
db.execSQL("CREATE Table " + TABLE_NAME1 + "("// + COL1 + " INTEGER PRIMARY KEY AUTOINCREMENT,"
        + COL2 + " TEXT,"
        + COL3 + " TEXT,"
        + COL4 + " TEXT,"
        + COL5 + " TEXT,"
        + COL6 + " TEXT,"
        + COL7 + " TEXT)");

用于创建表 2 和表 1 的 SQL 之间有一个非常大且重要的区别。在创建表 1 时,SQL 的格式为 CREATE TABLE table1 (col1 TEXT, ...

但是,当您创建表 2 时,列名称和 TEXT 之间缺少空格。在 "TEXT" 字符串文字中添加一个空格,或者更好的是,使用准备好的语句(如果可用)。

关于java - Android:创建表时抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37842047/

相关文章:

java - Android Studio 虚拟设备连接到桌面 LAN 连接

java - lambda函数如何成为Comparator的compare()方法

java - List 值的 TreeMap 构造函数

java - Quickblox 登录无法使用 3.3.1 sdk

android - Android 版 Qt5 : incompatible ABI

Java 浮点精度问题

java - 发布构建 jnativehook

java - 什么时候递归回溯合适?

带有下拉列表的android按钮小部件,这个特定小部件的名称是什么?

android - 在 Android 上录制视频时添加覆盖