簡體   English   中英

在SQLite中創建數據庫時出錯

[英]Error creating database in SQLite

嘗試在SQLite數據庫中保存數據時出現錯誤。 我的應用程序有兩個EditText字段,當用戶點擊“保存”時,輸入的數據必須保存在數據庫中。

我正在使用android studio 3.0.1。 波紋管是我得到的錯誤:

16:13:01.270 12710-12710/com.vysh.gridlayoutmanagerrecyclerview 
E/SQLiteLog: (1) no such table: myTable
02-03 16:13:01.277 12710-12710/com.vysh.gridlayoutmanagerrecyclerview 
E/SQLiteDatabase: Error inserting Password=123 Name=luane

android.database.sqlite.SQLiteException: no such table: myTable (code 
1): , while compiling: INSERT INTO myTable(Password,Name) VALUES (?,?)

at 
android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native 
Method)

當用戶點擊“保存”按鈕時,將調用insertData()方法。 貝婁是包含此方法的類:

import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.widget.Toast;

class MyDbAdapter {
    MyDbHelper helper;

    public MyDbAdapter(Context context)
    {
        helper = new MyDbHelper(context);
    }

public long insertData(String name, String password)
{
    SQLiteDatabase db = helper.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put(MyDbHelper.NAME, name);
    contentValues.put(MyDbHelper.PASSWORD, password);
    long id = db.insert(MyDbHelper.TABLE_NAME, null , contentValues);
    //Toast.makeText(context, message, Toast.LENGTH_LONG).show();
    return id;
}

static class MyDbHelper extends SQLiteOpenHelper {
    private static final String DATABASE_NAME = "myDatabase";
    private static final String TABLE_NAME = "myTable";
    private static final int DATABASE_Version = 1;
    private static final String UID="_id";
    private static final String NAME = "Name";
    private static final String PASSWORD= "Password";
    private static final String CREATE_TABLE = "CREATE TABLE "+TABLE_NAME +
            "( "+UID+" INTEGER PRIMARY KEY AUTOINCREMENT ," +NAME+ "VARCHAR(225)" + PASSWORD+"VARCHAR(225));";
    // private static final String DROP_TABLE ="DROP TABLE IF EXISTS "+TABLE_NAME;
    private Context context;

    public MyDbHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_Version);
        this.context=context;
        Message.message(context,"Started...");
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        try {

            db.execSQL(CREATE_TABLE);
            Message.message(context,"TABLE CREATED");
        } catch (Exception e) {
            Message.message(context,""+e);
        }
      }
    }// end of MyDbHelper
}

歡迎任何幫助

您在列名和列類型之間省略了空格。 由於語法錯誤,這將導致無法創建表(列名不能包含( ))。

在單擊“保存”按鈕之前,未檢測到此問題的原因是,只有調用getReabableDatabasegetWriteableDatabase才能創建/打開數據庫。

您應該更改:-

private static final String CREATE_TABLE = "CREATE TABLE "+TABLE_NAME +
            "( "+UID+" INTEGER PRIMARY KEY AUTOINCREMENT ," +NAME+ "VARCHAR(225)" + PASSWORD+"VARCHAR(225));";

要像:-

private static final String CREATE_TABLE = "CREATE TABLE "+TABLE_NAME +
            "( "+UID+" INTEGER PRIMARY KEY AUTOINCREMENT ," +NAME+ " VARCHAR(225)" + PASSWORD+" VARCHAR(225));";

請注意,進行更改后,您將需要刪除應用程序的數據或卸載應用程序,以便刪除數據庫,從而允許運行onCreate方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM