插入初始数据记录到SQL精简版的android精简版、数据、SQL、android

2023-09-04 03:50:04 作者:叼着奶瓶的仙女

我发展,我想填充数据库有一些记录,当应用程序首次启动费用跟踪。我试图调用的方法在我的溅活动,并添加数据。!但是,当我清楚我的应用程序数据和启动应用程序在第一次时出现错误,说没有这样的列。

日志猫误差如下所示。

  06-30 18:09:58.834:E / SQLiteLog(18380):(1)没有这样的列:exp_type
06-30 18:10:00.826:D / AndroidRuntime(18380):关闭虚拟机
06-30 18:10:00.826:W / dalvikvm(18380):主题ID = 1:螺纹退出与未捕获的异常(组= 0x416b8318)
06-30 18:10:00.856:E / AndroidRuntime(18380):致命异常:主要
06-30 18:10:00.856:E / AndroidRuntime(18380):java.lang.RuntimeException的:无法启动的活动ComponentInfo {com.sliit.expenseanalyzer / com.sliit.expenseanalyzer.SplashActivity}:android.database.sqlite.SQLiteException :没有这样的列:exp_type(code 1):在编制:SELECT * FROM expense_type ORDER BY exp_type DESC
06-30 18:10:00.856:E / AndroidRuntime(18380):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2063)
06-30 18:10:00.856:E / AndroidRuntime(18380):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2088)
06-30 18:10:00.856:E / AndroidRuntime(18380):在android.app.ActivityThread.access $ 600(ActivityThread.java:134)
06-30 18:10:00.856:E / AndroidRuntime(18380):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1199)
06-30 18:10:00.856:E / AndroidRuntime(18380):在android.os.Handler.dispatchMessage(Handler.java:99)
06-30 18:10:00.856:E / AndroidRuntime(18380):在android.os.Looper.loop(Looper.java:137)
06-30 18:10:00.856:E / AndroidRuntime(18380):在android.app.ActivityThread.main(ActivityThread.java:4744)
06-30 18:10:00.856:E / AndroidRuntime(18380):在java.lang.reflect.Method.invokeNative(本机方法)
06-30 18:10:00.856:E / AndroidRuntime(18380):在java.lang.reflect.Method.invoke(Method.java:511)
06-30 18:10:00.856:E / AndroidRuntime(18380):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:786)
06-30 18:10:00.856:E / AndroidRuntime(18380):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
06-30 18:10:00.856:E / AndroidRuntime(18380):在dalvik.system.NativeStart.main(本机方法)
06-30 18:10:00.856:E / AndroidRuntime(18380):android.database.sqlite.SQLiteException:没有这样的列:产生的原因exp_type(code 1):在编制:SELECT * FROM expense_type ORDER BY exp_type DESC
06-30 18:10:00.856:E / AndroidRuntime(18380):在android.database.sqlite.SQLiteConnection.native prepareStatement(本机方法)
06-30 18:10:00.856:E / AndroidRuntime(18380):在android.database.sqlite.SQLiteConnection.acquire preparedStatement(SQLiteConnection.java:882)
06-30 18:10:00.856:E / AndroidRuntime(18380):在android.database.sqlite.SQLiteConnection prepare(SQLiteConnection.java:493)
06-30 18:10:00.856:E / AndroidRuntime(18380):在android.database.sqlite.SQLiteSession prepare(SQLiteSession.java:588)
。06-30 18:10:00.856:E / AndroidRuntime(18380):在android.database.sqlite.SQLiteProgram< INIT>(SQLiteProgram.java:58)
。06-30 18:10:00.856:E / AndroidRuntime(18380):在android.database.sqlite.SQLiteQuery< INIT>(SQLiteQuery.java:37)
06-30 18:10:00.856:E / AndroidRuntime(18380):在android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
06-30 18:10:00.856:E / AndroidRuntime(18380):在android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1314)
06-30 18:10:00.856:E / AndroidRuntime(18380):在android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1161)
06-30 18:10:00.856:E / AndroidRuntime(18380):在android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1032)
06-30 18:10:00.856:E / AndroidRuntime(18380):在android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1200)
06-30 18:10:00.856:E / AndroidRuntime(18380):在com.sliit.expenseanalyzer.util.DatabaseHandler.getAllExpenseTypes(DatabaseHandler.java:218)
06-30 18:10:00.856:E / AndroidRuntime(18380):在com.sliit.expenseanalyzer.SplashActivity.onCreate(SplashActivity.java:29)
06-30 18:10:00.856:E / AndroidRuntime(18380):在android.app.Activity.performCreate(Activity.java:5008)
06-30 18:10:00.856:E / AndroidRuntime(18380):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
06-30 18:10:00.856:E / AndroidRuntime(18380):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2027)
06-30 18:10:00.856:E / AndroidRuntime(18380):11 ...更多
 

我怎样才能填充数据的应用程序启动时的第一次!它只有几个记录,所以我并不担心性能。

这将是一个很大的帮助!

感谢你。

DATABASE code

 公共无效的onCreate(SQLiteDatabase DB){

        //创建用户表
        字符串CREATE_USER_TABLE =CREATE TABLE+ TABLE_USER +(+ KEY_ID
                +INTEGER PRIMARY KEY AUTOINCREMENT,+ KEY_NAME +TEXT
                + KEY_EMAIL +TEXT+ KEY_PW +TEXT+ KEY_SESSION
                +整数+);

        字符串CREATE_EXPENSE_TYPE_TABLE =CREATE TABLE+ TABLE_EXPENSE_TYPE
                +(+ KEY_EXPENSE_ID +INTEGER自动增量+ KEY_EXPENSE_TYPE +TEXT主键+);

        db.execSQL(CREATE_USER_TABLE);
        db.execSQL(CREATE_EXPENSE_TYPE_TABLE);
    }
 
orcale SQL如何在插入数据时覆盖原始数据

方法我用它来添加记录

 众长addExpenseType(字符串费用){
        SQLiteDatabase DB = this.getWritableDatabase();

        ContentValues​​值=新ContentValues​​();
        values​​.put(KEY_EXPENSE_TYPE,费用);

        龙行= db.insert(TABLE_EXPENSE_TYPE,空,价值观);
        db.close();

        返回行;
    }
 

字符串值:

 私有静态最终诠释DATABASE_VERSION = 1;
    私有静态最后弦乐DATABASE_NAME =expenseManager;

    //数据库表
    私有静态最后弦乐TABLE_USER =用户;
    私有静态最后弦乐TABLE_EXPENSE_TYPE =expense_type;

    //用户表列
    私有静态最后弦乐KEY_ID =ID;
    私有静态最后弦乐KEY_NAME =FULL_NAME;
    私有静态最后弦乐KEY_PW =密码;
    私有静态最后弦乐KEY_EMAIL =电子邮件;
    私有静态最后弦乐KEY_SESSION =会议;

    //支出类型的表列
    私有静态最后弦乐KEY_EXPENSE_ID =ID;
    私有静态最后弦乐KEY_EXPENSE_TYPE =exp_type;
 

解决方案

请格式化你的code很好的习惯。最后一列的定义不具​​有逗号:

 字符串CREATE_USER_TABLE =CREATE TABLE+ TABLE_USER
            +(
            + KEY_ID +INTEGER PRIMARY KEY AUTOINCREMENT,
            + KEY_NAME +TEXT
            + KEY_EMAIL +TEXT
            + KEY_PW +TEXT
            + KEY_SESSION +整数
            +);

    字符串CREATE_EXPENSE_TYPE_TABLE =CREATE TABLE+ TABLE_EXPENSE_TYPE
            +(
            + KEY_EXPENSE_ID +INTEGER AUTOINCREMENT,
            + KEY_EXPENSE_TYPE +TEXT PRIMARY KEY
            +);
 

I'm developing an expense tracker where I want to populate the DB with a few records when the application first start. I tried to call the method in my splash activity and add the data.! But when I clear my application data and start the application for the first time an error occurs saying that there is no such column.

The log cat error is as shown below.

06-30 18:09:58.834: E/SQLiteLog(18380): (1) no such column: exp_type
06-30 18:10:00.826: D/AndroidRuntime(18380): Shutting down VM
06-30 18:10:00.826: W/dalvikvm(18380): threadid=1: thread exiting with uncaught exception (group=0x416b8318)
06-30 18:10:00.856: E/AndroidRuntime(18380): FATAL EXCEPTION: main
06-30 18:10:00.856: E/AndroidRuntime(18380): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.sliit.expenseanalyzer/com.sliit.expenseanalyzer.SplashActivity}: android.database.sqlite.SQLiteException: no such column: exp_type (code 1): , while compiling: SELECT * FROM expense_type Order BY exp_type DESC
06-30 18:10:00.856: E/AndroidRuntime(18380):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2063)
06-30 18:10:00.856: E/AndroidRuntime(18380):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2088)
06-30 18:10:00.856: E/AndroidRuntime(18380):    at android.app.ActivityThread.access$600(ActivityThread.java:134)
06-30 18:10:00.856: E/AndroidRuntime(18380):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1199)
06-30 18:10:00.856: E/AndroidRuntime(18380):    at android.os.Handler.dispatchMessage(Handler.java:99)
06-30 18:10:00.856: E/AndroidRuntime(18380):    at android.os.Looper.loop(Looper.java:137)
06-30 18:10:00.856: E/AndroidRuntime(18380):    at android.app.ActivityThread.main(ActivityThread.java:4744)
06-30 18:10:00.856: E/AndroidRuntime(18380):    at java.lang.reflect.Method.invokeNative(Native Method)
06-30 18:10:00.856: E/AndroidRuntime(18380):    at java.lang.reflect.Method.invoke(Method.java:511)
06-30 18:10:00.856: E/AndroidRuntime(18380):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
06-30 18:10:00.856: E/AndroidRuntime(18380):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
06-30 18:10:00.856: E/AndroidRuntime(18380):    at dalvik.system.NativeStart.main(Native Method)
06-30 18:10:00.856: E/AndroidRuntime(18380): Caused by: android.database.sqlite.SQLiteException: no such column: exp_type (code 1): , while compiling: SELECT * FROM expense_type Order BY exp_type DESC
06-30 18:10:00.856: E/AndroidRuntime(18380):    at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
06-30 18:10:00.856: E/AndroidRuntime(18380):    at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:882)
06-30 18:10:00.856: E/AndroidRuntime(18380):    at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:493)
06-30 18:10:00.856: E/AndroidRuntime(18380):    at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
06-30 18:10:00.856: E/AndroidRuntime(18380):    at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
06-30 18:10:00.856: E/AndroidRuntime(18380):    at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
06-30 18:10:00.856: E/AndroidRuntime(18380):    at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
06-30 18:10:00.856: E/AndroidRuntime(18380):    at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1314)
06-30 18:10:00.856: E/AndroidRuntime(18380):    at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1161)
06-30 18:10:00.856: E/AndroidRuntime(18380):    at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1032)
06-30 18:10:00.856: E/AndroidRuntime(18380):    at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1200)
06-30 18:10:00.856: E/AndroidRuntime(18380):    at com.sliit.expenseanalyzer.util.DatabaseHandler.getAllExpenseTypes(DatabaseHandler.java:218)
06-30 18:10:00.856: E/AndroidRuntime(18380):    at com.sliit.expenseanalyzer.SplashActivity.onCreate(SplashActivity.java:29)
06-30 18:10:00.856: E/AndroidRuntime(18380):    at android.app.Activity.performCreate(Activity.java:5008)
06-30 18:10:00.856: E/AndroidRuntime(18380):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
06-30 18:10:00.856: E/AndroidRuntime(18380):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2027)
06-30 18:10:00.856: E/AndroidRuntime(18380):    ... 11 more

How can I populate the data when the application starts for the first time! It's only few records so I'm not worried about performance.

It would be a great help!

Thank you.

DATABASE CODE

public void onCreate(SQLiteDatabase db) {

        // Create user table
        String CREATE_USER_TABLE = "CREATE TABLE " + TABLE_USER + "(" + KEY_ID
                + " INTEGER PRIMARY KEY AUTOINCREMENT," + KEY_NAME + " TEXT,"
                + KEY_EMAIL + " TEXT," + KEY_PW + " TEXT," + KEY_SESSION
                + " INTEGER" + ")";

        String CREATE_EXPENSE_TYPE_TABLE = "CREATE TABLE " + TABLE_EXPENSE_TYPE
                + " (" + KEY_EXPENSE_ID + " INTEGER AUTOINCREMENT" + KEY_EXPENSE_TYPE + " TEXT PRIMARY KEY" + ")";

        db.execSQL(CREATE_USER_TABLE);
        db.execSQL(CREATE_EXPENSE_TYPE_TABLE);
    }

Method I use to add records

public Long addExpenseType(String expense) {
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(KEY_EXPENSE_TYPE, expense);

        Long row = db.insert(TABLE_EXPENSE_TYPE, null, values);
        db.close();

        return row;
    }

String Values:

    private static final int DATABASE_VERSION = 1;
    private static final String DATABASE_NAME = "expenseManager";

    // Database Tables
    private static final String TABLE_USER = "user";
    private static final String TABLE_EXPENSE_TYPE = "expense_type";

    // User table columns
    private static final String KEY_ID = "id";
    private static final String KEY_NAME = "full_name";
    private static final String KEY_PW = "password";
    private static final String KEY_EMAIL = "email";
    private static final String KEY_SESSION = "session";

    // Expense type table columns
    private static final String KEY_EXPENSE_ID = "id";
    private static final String KEY_EXPENSE_TYPE = "exp_type";

解决方案

Make a habit of formatting your code well. The last column definition does not have a comma :

    String CREATE_USER_TABLE = "CREATE TABLE " + TABLE_USER 
            + "(" 
            + KEY_ID      + " INTEGER PRIMARY KEY AUTOINCREMENT, " 
            + KEY_NAME    + " TEXT, "
            + KEY_EMAIL   + " TEXT, " 
            + KEY_PW      + " TEXT, "
            + KEY_SESSION + " INTEGER "
            + ")";

    String CREATE_EXPENSE_TYPE_TABLE = "CREATE TABLE " + TABLE_EXPENSE_TYPE
            + "(" 
            + KEY_EXPENSE_ID   + " INTEGER AUTOINCREMENT, "
            + KEY_EXPENSE_TYPE + " TEXT PRIMARY KEY "
            + ")";