znl_12 2013-10-09 08:32 采纳率: 0%
浏览 899

column没有创建成功出现异常

下面是 DatabaseHelper 类:

public class DatabaseHelper extends SQLiteOpenHelper {

    static final String dbName="demoDB";

    public DatabaseHelper(Context context) {
            super(context, dbName, null, 1);
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
            String sql = "CREATE TABLE IF NOT EXISTS players (" +
                                            "id INTEGER PRIMARY KEY AUTOINCREMENT, " + 
                                            "playerName TEXT)";
            db.execSQL(sql);

            ContentValues values = new ContentValues();

            values.put("playerName", "John");
            db.insert("players", "playerName", values);

            values.put("playerName", "George");
            db.insert("players", "playerName", values);

            values.put("firstName", "Marie");
            db.insert("players", "playerName", values);
            System.out.println("Hello");

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

在 main activity 中我获取数据的方法:

if (cursor!= null) {
            if (cursor.moveToFirst()) {
                do {
                     System.out.println(cursor.getString(cursor.getColumnIndexOrThrow("playerName")));            
                } while (cursor.moveToNext());
            }
        }

为什么column没有创建?异常如下:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mkyong.android/com.mkyong.android.Stats}: java.lang.IllegalArgumentException: column 'playerName' does not exist
  • 写回答

1条回答 默认 最新

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-02-25 18:47
    关注

    该回答引用ChatGPT

    根据你提供的信息,看起来出现了两个问题:

    • 创建表时,只添加了 id 和 playerName 两个列,但在插入数据时却尝试插入 firstName。这可能会导致异常,因为该列在表中不存在。你需要将插入语句更改为只包含现有列:

      values.put("playerName", "John");
      db.insert("players", null, values);
      values.put("playerName", "George");
      db.insert("players", null, values);
      
    • 在查询时,你尝试访问一个名为 playerName 的列,但表中不存在该列。这可能是由于你已经修改了表结构,但应用程序仍在使用旧的数据库版本。你可以尝试删除应用程序的数据,然后重新运行以重置数据库。或者,你可以更新 onUpgrade() 方法以更新表结构并保存现有数据。

      @Override
      public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("ALTER TABLE players ADD COLUMN firstName TEXT");
      }
      

    这将向表中添加一个名为 firstName 的新列。注意,这将删除现有的 players 表,因此你需要确保在添加新列之前将数据备份到另一个位置。

    评论

报告相同问题?

悬赏问题

  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式