【问题标题】:Why my SQLite cannot create table ID column?为什么我的 SQLite 无法创建表 ID 列?
【发布时间】:2018-07-12 06:39:00
【问题描述】:

我在 android studio 中创建应用程序,我创建了一个表来存储用户的姓名、电子邮件、密码,以及用户的ID。用户名、电子邮件和密码是通过用户输入传递的,而 ID 是由计算机自动生成的,当我为这些信息创建表时,上述 3 列工作正常,但我无法创建用户 ID 列。

这是我创建数据库表的代码:

public class DatabaseHelper extends SQLiteOpenHelper {

private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME ="contacts.db";
private static final String TABLE_NAME ="contacts";
private static final String COLUMN_ID ="id";
private static final String COLUMN_NAME ="name";
private static final String COLUMN_EMAIL ="email";
private static final String COLUMN_PASS ="pass";
SQLiteDatabase db;
private static final String TABLE_CREATE = "create table contacts (id INTEGER primary key NOT NULL ," +
        "name text not null, email text not null, pass text not null);";

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

@Override
public void onCreate(SQLiteDatabase db) {  // create database
    db.execSQL(TABLE_CREATE);
    this.db = db;
}

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

public void insertContact(Contact c){
    db = this.getWritableDatabase();
    ContentValues values = new ContentValues();

    String query = "select * from contacts";
    Cursor cursor = db.rawQuery(query, null);

    int count = cursor.getCount();

     values.put(COLUMN_ID, count);
    values.put(COLUMN_NAME, c.getUser_name());
    values.put(COLUMN_EMAIL, c.getUser_email());
    values.put(COLUMN_PASS, c.getUser_password());

    db.insert(TABLE_NAME, null, values); // insert into database
    db.close();
}

public String searchPass(String uname){
    db = this.getReadableDatabase();
    String query = "select uname, pass from " + TABLE_NAME;
    Cursor cursor = db.rawQuery(query, null);
    String a, b;
    b = "not found";

    if (cursor.moveToFirst()){
        do {
            a = cursor.getString(0);

            if (a.equals(uname)){
                b = cursor.getString(1);
                break;
            }
        }while (cursor.moveToNext());
    }
    return b;
}

当我测试我的应用程序时,我输入了“name =abc,email=abc,password=abc”,它显示以下问题:

07-12 15:26:27.621 7943-7943/com.example.haoch.myapplication E/SQLiteLog: (1) 表联系人没有名为 id 的列 07-12 15:26:27.625 7943-7943/com.example.haoch.myapplication E/SQLiteDatabase:插入电子邮件时出错=abc name=abc pass=abc id=0 android.database.sqlite.SQLiteException:表联系人没有名为的列 id (code 1): , 编译时: INSERT INTO contacts(email,name,pass,id) 值 (?,?,?,?)

【问题讨论】:

  • 你能试试 values.put("id", count);
  • 这个其实是一样的,COLUMN_ID等于“id”
  • 好像是在建表后加上id。重新安装应用,然后再次插入数据

标签: android mysql database sqlite android-studio


【解决方案1】:

您是否更改了数据库结构? 如果是这种情况,每次更改数据库结构时都必须增加 DB 版本:

private static final int DATABASE_VERSION = 2;

或者,您可以重新安装应用程序或清除设备上的应用程序数据

【讨论】:

  • 请注意,OP 在 opUpgrade() 中存在 NPE 问题,因此单独修改版本是行不通的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-04
  • 2014-08-27
  • 2012-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多