【问题标题】:Android Studio SQLiteOpenHelper "DATABSE has no column named NAME"Android Studio SQLiteOpenHelper“DATABSE 没有名为 NAME 的列”
【发布时间】:2016-11-12 06:45:16
【问题描述】:

我知道这已被要求分配,但我检查了所有其他问题,但没有解决我的问题。

这是个例外:

E/SQLiteLog: (1) table Traust_Du_Dich_App has no column named name
E/SQLiteDatabase: Error inserting name=Loras gender=Male birthday=21
android.database.sqlite.SQLiteException: table Traust_Du_Dich_App has no column named name (code 1): , while compiling: INSERT INTO Traust_Du_Dich_App(name,gender,birthday) VALUES (?,?,?)
   at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
   at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:887)
   at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:498)
   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:1469)
   at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1341)
   at com.lukas.saufapp.MyDbHandler.addProduct(MyDbHandler.java:57)
   at com.lukas.saufapp.MainActivity$3.onClick(MainActivity.java:232)
   at android.view.View.performClick(View.java:5198)
   at android.view.View$PerformClick.run(View.java:21147)
   at android.os.Handler.handleCallback(Handler.java:739)
   at android.os.Handler.dispatchMessage(Handler.java:95)
   at android.os.Looper.loop(Looper.java:148)
   at android.app.ActivityThread.main(ActivityThread.java:5417)
   at java.lang.reflect.Method.invoke(Native Method)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

这是 HelperClass:

public class MyDbHandler extends SQLiteOpenHelper {
    private static final int DATABASE_VERSION = 2;
    private static final String DATABASE_NAME = "quadstudios_de";
    private static final String TABLE_PRODUCTS = "Traust_Du_Dich_App";

    public static final String COLUMN_ID = "id";
    public static final String COLUMN_NAME = "name";
    public static final String COLUMN_GENDER = "gender";
    public static final String COLUMN_BDAY = "birthday";

    public MyDbHandler(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, DATABASE_NAME, factory, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String CREATE_PRODUCTS_TABLE = "CREATE TABLE " + TABLE_PRODUCTS + "(" + COLUMN_ID + " INTEGER PRIMARY KEY," + COLUMN_NAME + " TEXT," + COLUMN_GENDER + " TEXT," + COLUMN_BDAY + " TEXT" + ")";

        db.execSQL(CREATE_PRODUCTS_TABLE);
    }

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

    public void AddUser(User user) {

        ContentValues values = new ContentValues();
        values.put(COLUMN_NAME, user.Name);
        values.put(COLUMN_GENDER, user.Gender);
        values.put(COLUMN_BDAY, user.Birthday);

        SQLiteDatabase db = this.getWritableDatabase();

        db.insert(TABLE_PRODUCTS, null, values);
        db.close();
    }
}

我在这里称呼它:

Btn_FaceBook.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        MyDbHandler handler = new MyDbHandler(MainActivity.this, null, null, 1);
        User user = new User("Thomas", "Male", "21");
        handler.AddUser(user);
}

【问题讨论】:

  • 您最近添加了列名吗?也许,您需要更新数据库版本才能添加列(尝试将 DATABASE_VERSION 更改为 3)。
  • 不,我在创建表格时直接添加了它

标签: java android mysql sql android-studio


【解决方案1】:

我能想到的唯一问题是没有更新您的版本号。每当您修改数据库中的列时,您也必须更新版本号。

而不是这个:

private static final int DATABASE_VERSION = 2;

试试这个:

private static final int DATABASE_VERSION = 3;

【讨论】:

  • 当数据库看起来像这样时,我这样命名 DATABSE_NAME 和 TABLE 是否正确? quadstudios.de/Unbenannt.PNG
  • 代码在哪里只知道插入插入的名称?
【解决方案2】:

从您正在测试它的设备上卸载该应用程序。这将删除数据库。现在重新安装应用程序,以便从头开始重新创建数据库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-18
    • 2022-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-16
    • 2022-01-01
    • 1970-01-01
    相关资源
    最近更新 更多