Java 无法将数据插入android studio sqlite数据库

Java 无法将数据插入android studio sqlite数据库,java,android,sqlite,android-sqlite,Java,Android,Sqlite,Android Sqlite,我目前正在做一个学校项目,试图创建一个食品配送服务,需要一个注册/登录数据库。但是我在创建/插入数据到数据库时遇到了问题。应用程序没有崩溃,但Toast消息告诉我“注册失败” 从错误日志来看,我似乎可以创建表,但无法将数据插入表中 如果有人能给我一些建议,我将不胜感激 DatabaseHelper.java public class DatabaseHelper extends SQLiteOpenHelper { public static final String DATABASE_NAME

我目前正在做一个学校项目,试图创建一个食品配送服务,需要一个注册/登录数据库。但是我在创建/插入数据到数据库时遇到了问题。应用程序没有崩溃,但Toast消息告诉我“注册失败”

从错误日志来看,我似乎可以创建表,但无法将数据插入表中

如果有人能给我一些建议,我将不胜感激

DatabaseHelper.java

public class DatabaseHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = " mylist.db ";
public static final String TABLE_NAME = " mylist ";
public static final String USER_NAME = " username ";
public static final String EMAIL = " email ";
public static final String PHONE_NUMBER = " phone ";
public static final String PASSWORD = " password ";

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

//CREATING THE DATABASE TABLE
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
    String createTable;
    createTable = "CREATE TABLE " + TABLE_NAME +
            " ( ID INTEGER PRIMARY KEY AUTOINCREMENT, "+
            USER_NAME + " username " +
            EMAIL + " email ," +
            PHONE_NUMBER + " phone ,"+
            PASSWORD + " password ) ";
    sqLiteDatabase.execSQL(createTable);
}

@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
}

public boolean addData(String username, String email, String phone, String password){
SQLiteDatabase sqLiteDatabase = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(USER_NAME, username);
contentValues.put(EMAIL, email);
contentValues.put(PHONE_NUMBER, phone);
contentValues.put(PASSWORD, password);
long result = sqLiteDatabase.insert(TABLE_NAME, null, contentValues);
    if (result == -1) return false;
else {return true;}
}
}

错误日志

    E/SQLiteLog: (1) table mylist has no column named email
E/SQLiteDatabase: Error inserting  phone =  email =  password =  username =j
    android.database.sqlite.SQLiteException: table mylist has no column named email (code 1): , while compiling: INSERT INTO  mylist ( phone , email , password , username ) VALUES (?,?,?,?)
        at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
        at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:890)
        at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:501)
        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:1546)
        at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1417)
        at com.example.doonfood.DatabaseHelper.addData(DatabaseHelper.java:45)
        at com.example.doonfood.signuppage.ADDDATA(signuppage.java:33)
        at com.example.doonfood.signuppage.Signup(signuppage.java:48)
        at java.lang.reflect.Method.invoke(Native Method)
        at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:409)
        at android.view.View.performClick(View.java:6294)
        at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:992)
        at android.view.View$PerformClick.run(View.java:24770)
        at android.os.Handler.handleCallback(Handler.java:790)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6494)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
}

  • 首先,不需要在数据库名称中写入.db

  • 在onCreate()中这样写

    String query=“创建不存在的表格”+表格名称+“(UESR_名称、电子邮件、电话号码、密码)”;
    execSQL(查询);
    

  • 创建在表中插入数据的方法,如下所示:
    
    public void insertData(字符串用户名、字符串电子邮件、字符串电话号码、字符串密码)
    {
    SQLiteDatabase db=getWritableDatabase();
    ContentValues=新的ContentValues();
    value.put(“用户名”,用户名);
    值。put(“EMAIL”,EMAIL);
    值。输入(“电话号码”,电话号码);
    值。put(“密码”,PASSWORD);
    db.insert(表名称,空,值);
    db.close();
    }
    


  • 首先,删除db/table/columns名称变量定义中的前导空格和尾随空格:

    public static final String DATABASE_NAME = "mylist.db";
    public static final String TABLE_NAME = "mylist";
    public static final String ID = "ID"; // I added this definition
    public static final String USER_NAME = "username";
    public static final String EMAIL = "email";
    public static final String PHONE_NUMBER = "phone";
    public static final String PASSWORD = "password";
    
    然后,修复表的
    CREATE
    语句,在该语句中,您没有定义列的数据类型,而是使用了列的名称两次,并且还忽略了两次之间的逗号:

    createTable = "CREATE TABLE " + TABLE_NAME + "(" +
                  ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                  USER_NAME + " TEXT," +
                  EMAIL + " TEXT," +
                  PHONE_NUMBER + " TEXT," +
                  PASSWORD + " TEXT)";
    

    进行这些更改后,您必须从设备上卸载应用程序,以便删除数据库并重新运行以重新创建数据库和表。

    有关CREATE语句的问题。SQLite代码(绿色)对间距敏感吗?@JoelDong JoeSuh你说的对间距敏感是什么意思?“文本”起作用,带有前导和尾随空格。而“文本”不起作用,用户将无法签名up@JoelDong-JoeSuh当您定义一个列时,您可以这样做:
    columnname数据类型
    ,因此列的名称(不能包含空格)和数据类型之间必须有空格。如果没有空格,则有类似的内容:
    IDTEXT
    ,这在SQLite中有效,但它被认为只是列的名称,没有数据类型。噢,这解释了很多,感谢您的解释。
    createTable = "CREATE TABLE " + TABLE_NAME + "(" +
                  ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                  USER_NAME + " TEXT," +
                  EMAIL + " TEXT," +
                  PHONE_NUMBER + " TEXT," +
                  PASSWORD + " TEXT)";