繁体   English   中英

Android SQLite错误:插入数据

[英]Android SQLite error: Inserting data

当我尝试访问数据库中的数据时,我的应用程序崩溃。 我怀疑我没有将数据正确插入数据库中,下面是我使用的类和方法。

public class MySQLiteHelper extends SQLiteOpenHelper {

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

    public static final String TABLE_QUICK_STOP = "quick_stop";

    public static String[] QUICK_STOP_FIELDS = {
        "_id", // autoincrement
        "quick_stop_stop_id", // stop id
        "quick_stop_name",
        "quick_stop_types", // ex. 1111 or 0101. Underground Train Bus Ferry, used to filter some specific stations
        "quick_stop_position"
        //TODO should there be a "stop_name" here?
    };

    private static final String DATABASE_CREATE = "create table "
        + TABLE_QUICK_STOP + "("
        + QUICK_STOP_FIELDS[0] + " long primary key, " // id (same stop can be added multiple times with different filters)
        + QUICK_STOP_FIELDS[1] + " integer not null, " // stop id
        + QUICK_STOP_FIELDS[2] + " varchar not null, " // stop name
        + QUICK_STOP_FIELDS[3] + " integer not null, " // stop types
        + QUICK_STOP_FIELDS[4] + " integer not null);"; // stop position            array[4] = cursor.getInt(4); // stop position

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

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

    @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_QUICK_STOP);
        onCreate(db);
    }
}

我用它来插入:

public Boolean insertStop(int stopId, String name, int types, int position) {
    ContentValues values = new ContentValues();
    values.put(MySQLiteHelper.QUICK_STOP_FIELDS[1], stopId);
    values.put(MySQLiteHelper.QUICK_STOP_FIELDS[2], name);
    values.put(MySQLiteHelper.QUICK_STOP_FIELDS[3], types);
    values.put(MySQLiteHelper.QUICK_STOP_FIELDS[4], position);
    long insertId = database.insert(MySQLiteHelper.TABLE_QUICK_STOP, null, values);
    if(insertId == -1)
        return false;
    return true;
}

如前所述,Android Studio提供信息以进行调试非常可怕。

第一次运行后是否更改了表结构?

如果是这样,则更改DATABASE_VERSION = 1; 到DATABASE_VERSION = 2; 或更高的数字,以便触发onUpgrade()。

或者,尝试从/data/data/...路径中删除(或重命名)数据库,以便在下次运行时重新创建它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM