Java SQLite数据库未插入数据

Java SQLite数据库未插入数据,java,android,sqlite,android-studio,singleton,Java,Android,Sqlite,Android Studio,Singleton,我正在尝试按照此链接中的说明进行操作: 在方法1下,从不同的活动访问我的数据库。但是数据没有被插入,我收到了一些错误 我用来插入数据的主类: import android.content.Intent; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.s

我正在尝试按照此链接中的说明进行操作: 在方法1下,从不同的活动访问我的数据库。但是数据没有被插入,我收到了一些错误

我用来插入数据的主类:

import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class newCharacter extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_new_character);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        Button submit_button = (Button) findViewById(R.id.char_submit);

        DatabaseHelper.getInstance(getApplicationContext());


        EditText name_text = (EditText) findViewById(R.id.nameText);
        EditText health_text = (EditText) findViewById(R.id.editText);
        EditText strength_text = (EditText) findViewById(R.id.editText2);
        EditText agility_text = (EditText) findViewById(R.id.editText3);
        EditText intelligence_text = (EditText) findViewById(R.id.editText4);
        EditText charisma_text = (EditText) findViewById(R.id.editText5);
        EditText endurance_text = (EditText) findViewById(R.id.editText6);
        EditText carry_weight_text = (EditText) findViewById(R.id.editText7);
        EditText zprep_text = (EditText) findViewById(R.id.editText8);
        EditText inventory_text = (EditText) findViewById(R.id.editText9);

        final String name = name_text.toString();
        final String health = health_text.toString();
        final String strength = strength_text.toString();
        final String agility = agility_text.toString();
        final String intelligence = intelligence_text.toString();
        final String charisma = charisma_text.toString();
        final String endurance = endurance_text.toString();
        final String carryweight = carry_weight_text.toString();
        final String zprep = zprep_text.toString();
        final String inventory = inventory_text.toString();

        submit_button.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

               ERROR HERE boolean isInserted = DatabaseHelper.getInstance(getApplicationContext()).insertData(name, health, strength,
                        endurance, carryweight, agility, intelligence, charisma, zprep, inventory);

                if (isInserted == true)
                    Toast.makeText(newCharacter.this, "Data Inserted", Toast.LENGTH_LONG).show();
                else
                    Toast.makeText(newCharacter.this, "Data NOT Inserted", Toast.LENGTH_LONG).show();



            }

        });
    }

}
我的数据库助手:

import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

/**
 * Created by Matt on 11/23/2015.
 */
public class DatabaseHelper extends SQLiteOpenHelper {

    private static DatabaseHelper sInstance;

    public static final String DATABASE_NAME = "character_info.db";
    public static final String TABLE_NAME = "characters_table";
    public static final String COL_1 = "NAME";
    public static final String COL_3 = "HEALTH";
    public static final String COL_2 = "STRENGTH";
    public static final String COL_4 = "ENDURANCE";
    public static final String COL_5 = "CARRY_WEIGHT";
    public static final String COL_6 = "AGILITY";
    public static final String COL_7 = "INTELLIGENCE";
    public static final String COL_8 = "CHARISMA";
    public static final String COL_9 = "ZPREP";
    public static final String COL_10 = "INVENTORY";

    public static synchronized DatabaseHelper getInstance(Context context) {

        if (sInstance == null) {
            sInstance = new DatabaseHelper(context.getApplicationContext());
        }
        return sInstance;
    }

    private DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, 1);

    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String SQL_String = "create table " + TABLE_NAME +" (NAME TEXT PRIMARY KEY, HEALTH TEXT, STRENGTH TEXT" +
                ", ENDURANCE TEXT, CARRY_WEIGHT TEXT, AGILITY TEXT, INTELLIGENCE TEXT, CHARISMA TEXT, ZPREP TEXT, INVENTORY TEXT)";

        db.execSQL(SQL_String);

    }

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

    public boolean insertData(String name, String health, String strength, String endurance, String carryweight,
                              String agility, String intelligence, String charisma, String zprep, String inventory) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(COL_1, name);
        contentValues.put(COL_2, health);
        contentValues.put(COL_3, strength);
        contentValues.put(COL_4, endurance);
        contentValues.put(COL_5, carryweight);
        contentValues.put(COL_6, agility);
        contentValues.put(COL_7, intelligence);
        contentValues.put(COL_8, charisma);
        contentValues.put(COL_9, zprep);
        contentValues.put(COL_10, inventory);
        ERROR HERE: long result = db.insert(TABLE_NAME, null, contentValues);

        if (result == -1)
            return false;
        else
            return true;

    }
}
日志:

12-01 01:05:45.049 274-274/proctor.csit.project E/Database: Error inserting INVENTORY=android.support.v7.widget.AppCompatEditText@45f78508 INTELLIGENCE=android.support.v7.widget.AppCompatEditText@45f9e0f0 CHARISMA=android.support.v7.widget.AppCompatEditText@45f7ab58 NAME=android.support.v7.widget.AppCompatEditText@45f663f0 ZPREP=android.support.v7.widget.AppCompatEditText@45f7ed60 HEALTH=android.support.v7.widget.AppCompatEditText@45f8dfd0 CARRY_WEIGHT=android.support.v7.widget.AppCompatEditText@45f634f0 ENDURANCE=android.support.v7.widget.AppCompatEditText@45f8ef60 STRENGTH=android.support.v7.widget.AppCompatEditText@45f7dda8 AGILITY=android.support.v7.widget.AppCompatEditText@45f9db10
12-01 01:05:45.049 274-274/proctor.csit.project E/Database: android.database.sqlite.SQLiteException: table characters_table has no column named INVENTORY: , while compiling: INSERT INTO characters_table(INVENTORY, INTELLIGENCE, CHARISMA, NAME, ZPREP, HEALTH, CARRY_WEIGHT, ENDURANCE, STRENGTH, AGILITY) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
12-01 01:05:45.049 274-274/proctor.csit.project E/Database:     at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
12-01 01:05:45.049 274-274/proctor.csit.project E/Database:     at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:91)
12-01 01:05:45.049 274-274/proctor.csit.project E/Database:     at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:64)
12-01 01:05:45.049 274-274/proctor.csit.project E/Database:     at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:80)
12-01 01:05:45.049 274-274/proctor.csit.project E/Database:     at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:36)
12-01 01:05:45.049 274-274/proctor.csit.project E/Database:     at android.database.sqlite.SQLiteDatabase.compileStatement(SQLiteDatabase.java:1145)
12-01 01:05:45.049 274-274/proctor.csit.project E/Database:     at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1536)
12-01 01:05:45.049 274-274/proctor.csit.project E/Database:     at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1410)
12-01 01:05:45.049 274-274/proctor.csit.project E/Database:     at proctor.csit.project.DatabaseHelper.insertData(DatabaseHelper.java:70)
12-01 01:05:45.049 274-274/proctor.csit.project E/Database:     at proctor.csit.project.newCharacter$1.onClick(newCharacter.java:55)
12-01 01:05:45.049 274-274/proctor.csit.project E/Database:     at android.view.View.performClick(View.java:2408)
12-01 01:05:45.049 274-274/proctor.csit.project E/Database:     at android.view.View$PerformClick.run(View.java:8816)
12-01 01:05:45.049 274-274/proctor.csit.project E/Database:     at android.os.Handler.handleCallback(Handler.java:587)
12-01 01:05:45.049 274-274/proctor.csit.project E/Database:     at android.os.Handler.dispatchMessage(Handler.java:92)
12-01 01:05:45.049 274-274/proctor.csit.project E/Database:     at android.os.Looper.loop(Looper.java:123)
12-01 01:05:45.049 274-274/proctor.csit.project E/Database:     at android.app.ActivityThread.main(ActivityThread.java:4627)
12-01 01:05:45.049 274-274/proctor.csit.project E/Database:     at java.lang.reflect.Method.invokeNative(Native Method)
12-01 01:05:45.049 274-274/proctor.csit.project E/Database:     at java.lang.reflect.Method.invoke(Method.java:521)
12-01 01:05:45.049 274-274/proctor.csit.project E/Database:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
12-01 01:05:45.049 274-274/proctor.csit.project E/Database:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
12-01 01:05:45.049 274-274/proctor.csit.project E/Database:     at dalvik.system.NativeStart.main(Native Method)
12-01 01:05:45.049 274-274/proctor.csit.project E/数据库:插入INVENTORY=android.support.v7.widget时出错。AppCompatEditText@45f78508INTELLIGENCE=android.support.v7.widget。AppCompatEditText@45f9e0f0CHARISMA=android.support.v7.widget。AppCompatEditText@45f7ab58NAME=android.support.v7.widget。AppCompatEditText@45f663f0 ZPREP=android.support.v7.widget。AppCompatEditText@45f7ed60HEALTH=android.support.v7.widget。AppCompatEditText@45f8dfd0CARRY_WEIGHT=android.support.v7.widget。AppCompatEditText@45f634f0耐力=android.support.v7.widget。AppCompatEditText@45f8ef60STRENGTH=android.support.v7.widget。AppCompatEditText@45f7dda8 AGILITY=android.support.v7.widget。AppCompatEditText@45f9db10
12-01 01:05:45.049 274-274/proctor.csit.project E/数据库:android.Database.sqlite.SQLiteException:表格字符没有名为INVENTORY的列,编译时:插入字符表格(库存、智力、魅力、姓名、ZPREP、健康、负重、耐力、力量、敏捷)值(?、、、、、、、、、、、?);
12-01 01:05:45.049 274-274/proctor.csit.project E/Database:at-android.Database.sqlite.SQLiteCompiledSql.native_compile(本机方法)
12-01 01:05:45.049 274-274/proctor.csit.project E/Database:at-android.Database.sqlite.SQLiteCompiledSql.compiled(SQLiteCompiledSql.java:91)
12-01 01:05:45.049 274-274/proctor.csit.project E/Database:at-android.Database.sqlite.SQLiteCompiledSql.(SQLiteCompiledSql.java:64)
12-01 01:05:45.049 274-274/proctor.csit.project E/Database:at-android.Database.sqlite.SQLiteProgram.(SQLiteProgram.java:80)
12-01 01:05:45.049 274-274/proctor.csit.project E/Database:at-android.Database.sqlite.SQLiteStatement.(SQLiteStatement.java:36)
12-01 01:05:45.049 274-274/proctor.csit.project E/Database:at-android.Database.sqlite.SQLiteDatabase.compileStatement(SQLiteDatabase.java:1145)
12-01 01:05:45.049 274-274/proctor.csit.project E/Database:at-android.Database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1536)
12-01 01:05:45.049 274-274/proctor.csit.project E/Database:at-android.Database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1410)
12-01 01:05:45.049 274-274/proctor.csit.project E/Database:at proctor.csit.project.DatabaseHelper.insertData(DatabaseHelper.java:70)
12-01 01:05:45.049 274-274/proctor.csit.project E/数据库:在proctor.csit.project.newCharacter$1.onClick(newCharacter.java:55)
12-01 01:05:45.049 274-274/proctor.csit.project E/Database:at-android.view.view.performClick(view.java:2408)
12-01 01:05:45.049 274-274/proctor.csit.project E/Database:at-android.view.view$PerformClick.run(view.java:8816)
12-01 01:05:45.049 274-274/proctor.csit.project E/数据库:位于android.os.Handler.handleCallback(Handler.java:587)
12-01 01:05:45.049 274-274/proctor.csit.project E/Database:at-android.os.Handler.dispatchMessage(Handler.java:92)
12-01 01:05:45.049 274-274/proctor.csit.project E/Database:at-android.os.Looper.loop(Looper.java:123)
12-01 01:05:45.049 274-274/proctor.csit.project E/数据库:位于android.app.ActivityThread.main(ActivityThread.java:4627)
12-01 01:05:45.049 274-274/proctor.csit.project E/Database:at java.lang.reflect.Method.invokenactive(本机方法)
12-01 01:05:45.049 274-274/proctor.csit.project E/Database:at java.lang.reflect.Method.invoke(Method.java:521)
12-01 01:05:45.049 274-274/proctor.csit.project E/数据库:com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
12-01 01:05:45.049 274-274/proctor.csit.project E/数据库:com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
12-01 01:05:45.049 274-274/proctor.csit.project E/数据库:位于dalvik.system.NativeStart.main(本机方法)

我在java代码中的明显错误旁边做了注释。我是第一次使用sqlite,对此我很迷茫,所以非常感谢您的帮助

如果您最近添加了
inventory
列,请从您使用的手机或模拟器中卸载应用程序,然后尝试新建

更改数据库架构时,需要增加版本号并在
onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion)
中实现升级。在您的情况下,它可能看起来像这样:

private static final int VERSION = 2; // increased from 1

private DatabaseHelper(Context context) {
    super(context, DATABASE_NAME, null, VERSION);
}

...

@Override
public void onUpdgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    switch (oldVersion) {
        case 1:
            db.execSQL("ALTER TABLE " + TABLE_NAME + " ADD COLUMN INVENTORY TEXT");
        // intentionally fall through to other cases
    }
}
这支持以下情况:用户下载应用程序的更新,而其数据库的架构已过期


如果你的应用程序还没有发布,你可以不做我上面写的事而更改模式,然后简单地清除应用程序数据(或者卸载并重新安装,效果相同)。这将导致重新创建您的数据库,因此它将再次执行创建sql。

转到设置,然后转到应用程序,然后转到所有选项卡,然后选择您的应用程序,然后单击清除数据,然后再次尝试运行应用程序。应该可以运行

发生此错误的原因是,在添加库存表后,没有调用sqliteopenhelper类的onCreate。当已经存在名为的数据库时,不会调用Sqliteopenheler的onCreate。onUpgrade也不会被调用,因为您没有增加sqliteopenhelper中的版本号,因此不会创建表清单,因此会出现错误

因此,通常情况下,如果您的应用程序仍在开发中,并且您是唯一在开发中工作的开发人员,那么您可以做的就是清除应用程序的数据,这将删除所有数据(包括您的数据库),因此当您再次运行应用程序时,将调用onCreate。但是如果你的申请在