【问题标题】:cannot insert into android sqlite database when creating database创建数据库时无法插入android sqlite数据库
【发布时间】:2015-03-24 11:14:52
【问题描述】:

我创建了一个 SQLite 数据库,我想在其中插入一些初始数据。所以我把插入“查询”放在“onCreate”方法中。 但它不会向数据库中插入任何值,创建后它是空的!

这是我的代码:

package com.example.db;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class MySQLiteHelper extends SQLiteOpenHelper {

  public static final String TABLE_GAME_LIST = "steps";
  public static final String COLUMN_ID = "_id";
  public static final String COLUMN_STATUS = "status";
  public static final String COLUMN_HELP_COUNT = "helpCount";
  public static final String COLUMN_EAREASED = "earased";
  public static final String COLUMN_SPEED = "speed";

  private static final String DATABASE_NAME = "earaser.db";
  private static final int DATABASE_VERSION = 1;

  // Database creation sql statement
  private static final String DATABASE_CREATE = "create table "
      + TABLE_GAME_LIST + "(" + COLUMN_ID
      + " integer, " 
      + COLUMN_STATUS
      +" integer, "
      + COLUMN_HELP_COUNT
      +" integer, "
      + COLUMN_EAREASED
      +" string, "
      + COLUMN_SPEED
      +" integer"
      + " );";


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

  @Override
  public void onCreate(SQLiteDatabase database) {
      database.execSQL(DATABASE_CREATE);


      database.execSQL("INSERT INTO "+TABLE_GAME_LIST+"("+COLUMN_ID + ","
                + COLUMN_STATUS + ","
                        + COLUMN_HELP_COUNT + ","
                                + COLUMN_EAREASED + ","
                                        + COLUMN_SPEED + ") VALUES(14, 1, 2, "+"third"+", 5)");
  }

  @Override
  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
      Log.w(MySQLiteHelper.class.getName(),
        "Upgrading database from version " + oldVersion + " to "
            + newVersion + ", which will destroy all old data");
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_GAME_LIST);
        onCreate(db);
  }

} 

【问题讨论】:

  • 试试这个database.execSQL("INSERT INTO steps(_id,status,helpCount,earased,speed) VALUES (14, 1, 2, 'third', 5));"
  • 你的意思是:database.execSQL("INSERT INTO steps(_id,status,helpCount,earased,speed) VALUES (14, 1, 2, +"+"third"+", 5)");我测试过,但它不起作用!

标签: java android mysql database sqlite


【解决方案1】:

SQL中有语法错误,比如字符串值需要'quoted',比如third

由于您没有遇到异常,因此 SQL 没有运行。卸载您的应用程序,以便删除旧版本的数据库并再次运行 onCreate()When is SQLiteOpenHelper onCreate() / onUpgrade() run?

【讨论】:

  • 耶!这么隐蔽的问题! onCreate 方法中的查询仅在安装时运行。所以卸载应用程序并重新安装后,它可以工作。谢谢亲爱的拉阿尔托;)
猜你喜欢
  • 2019-02-10
  • 2021-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多