簡體   English   中英

說該表在android sqlite中不存在

[英]Says that the table does not exist in android sqlite

我收到以下錯誤:

08-04 20:31:10.788  30724-30724/com.lifttrackplus.jason.lifttrackplus 

E/SQLiteLog﹕ (1) no such table: exercise_data_table
08-04 20:31:10.799  30724-30724/com.lifttrackplus.jason.lifttrackplus E/SQLiteDatabase﹕ Error inserting date=2015-08-04 name=bench press repCount=1 setCount=1 weight=1
    android.database.sqlite.SQLiteException: no such table: exercise_data_table (code 1): , while compiling: INSERT INTO exercise_data_table(date,name,repCount,setCount,weight) VALUES (?,?,?,?,?)
            at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
            at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
            at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
            at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
            at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
            at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
            at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1527)
            at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1399)
            at com.lifttrackplus.jason.lifttrackplus.ExerciseDataDBHelper.addRow(ExerciseDataDBHelper.java:56)
            at com.lifttrackplus.jason.lifttrackplus.AddExerciseInstanceActivity.onClick(AddExerciseInstanceActivity.java:79)
            at android.view.View.performClick(View.java:4793)
            at android.view.View$PerformClick.run(View.java:19919)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5499)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:942)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:737)

這是.java文件

DBContract.java

public class DBContract implements BaseColumns {

    public static final String TABLE_NAME_DATA = "exercise_data_table";
    public static final String TABLE_NAME_LIST = "exercise_name_table";
    public static final String COLUMN_NAME_LIST_NAME = "name";
    public static final String COLUMN_NAME_DATA_NAME = "name";
    public static final String COLUMN_NAME_DATA_WEIGHT = "weight";
    public static final String COLUMN_NAME_DATA_SET = "setCount";
    public static final String COLUMN_NAME_DATA_REP = "repCount";
    public static final String COLUMN_NAME_DATA_DATE = "date";

}

ExerciseDataDBHelper.java

public class ExerciseDataDBHelper extends SQLiteOpenHelper {

    private static final String TAG = "ListDBHelper";

    public static final String DATABASE_NAME = "exercise_data.db";
    public static final int DATABASE_VERSION = 1;

    private static final String NUM_TYPE = " INTEGER";
    private static final String STRING_TYPE = " TEXT";
    private static final String COMMA_SEP = ", ";

    private static final String DELETE_TABLE = "DROP TABLE IF EXISTS " + DBContract.TABLE_NAME_DATA;
    private static final String CREATE_TABLE = "CREATE TABLE " + DBContract.TABLE_NAME_DATA + "(" +
            DBContract._ID + " INTEGER PRIMARY KEY, " +
            DBContract.COLUMN_NAME_DATA_NAME + STRING_TYPE + COMMA_SEP +
            DBContract.COLUMN_NAME_DATA_WEIGHT + NUM_TYPE + COMMA_SEP +
            DBContract.COLUMN_NAME_DATA_SET + NUM_TYPE + COMMA_SEP +
            DBContract.COLUMN_NAME_DATA_REP + NUM_TYPE + COMMA_SEP +
            DBContract.COLUMN_NAME_DATA_DATE + STRING_TYPE + ")";

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

    @Override
    public void onCreate(SQLiteDatabase db) {
        Log.i(TAG, "Table created");
        db.execSQL(CREATE_TABLE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL(DELETE_TABLE);
        db.execSQL(CREATE_TABLE);
    }

    public void addRow(SQLiteDatabase db, Exercise exercise) {
        ContentValues contentValues = new ContentValues();
        contentValues.put(DBContract.COLUMN_NAME_DATA_NAME, exercise.getNAME());
        contentValues.put(DBContract.COLUMN_NAME_DATA_WEIGHT, exercise.getWEIGHT());
        contentValues.put(DBContract.COLUMN_NAME_DATA_SET, exercise.getSET());
        contentValues.put(DBContract.COLUMN_NAME_DATA_REP, exercise.getREP());
        contentValues.put(DBContract.COLUMN_NAME_DATA_DATE, exercise.getDATE());
        db.insert(DBContract.TABLE_NAME_DATA, null, contentValues);
    }

    public Exercise exerciseByName(SQLiteDatabase db, String name) {
        Exercise exercise = new Exercise();
        Cursor cursor = db.rawQuery("SELECT * FROM " + DBContract.TABLE_NAME_DATA + " WHERE " + DBContract.COLUMN_NAME_DATA_NAME + "=" + "'" + name + "'", null);
        cursor.moveToFirst();
        while (!cursor.isAfterLast()) {
            exercise.setNAME(cursor.getString(cursor.getColumnIndex(DBContract.COLUMN_NAME_DATA_NAME)));
            exercise.setWEIGHT(cursor.getInt(cursor.getColumnIndex(DBContract.COLUMN_NAME_DATA_WEIGHT)));
            exercise.setSET(cursor.getInt(cursor.getColumnIndex(DBContract.COLUMN_NAME_DATA_SET)));
            exercise.setREP(cursor.getInt(cursor.getColumnIndex(DBContract.COLUMN_NAME_DATA_REP)));
            exercise.setDATE(cursor.getString(cursor.getColumnIndex(DBContract.COLUMN_NAME_DATA_DATE)));
            cursor.moveToNext();
        }
        cursor.close();
        return exercise;
    }

}

AddExerciseInstanceActivity.java

public class AddExerciseInstanceActivity extends Activity implements View.OnClickListener {

    private Button addInstanceButton;
    private Button toGraphButton;
    private EditText weight;
    private EditText set;
    private EditText rep;
    private ExerciseDataDBHelper dataDBHelper;
    private SQLiteDatabase db;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add_exercise_instance);

        addInstanceButton = (Button) findViewById(R.id.add_exercise_instance_btn);
        toGraphButton = (Button) findViewById(R.id.to_graph_btn);
        weight = (EditText) findViewById(R.id.weight);
        set = (EditText) findViewById(R.id.set);
        rep = (EditText) findViewById(R.id.rep);

        dataDBHelper = new ExerciseDataDBHelper(AddExerciseInstanceActivity.this);
        db = dataDBHelper.getWritableDatabase();

        addInstanceButton.setOnClickListener(this);

        toGraphButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(AddExerciseInstanceActivity.this, ExerciseGraphActivity.class));
            }
        });


    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_add_exercise_instance, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.action_settings:
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

    @Override
    public void onClick(View v) {
        Exercise exercise = new Exercise();
        exercise.setNAME(getIntent().getExtras().getString("NAME"));
        exercise.setWEIGHT(Integer.parseInt(weight.getText().toString()));
        exercise.setSET(Integer.parseInt(set.getText().toString()));
        exercise.setREP(Integer.parseInt(rep.getText().toString()));
        exercise.setDATE(new SimpleDateFormat("yyyy-MM-dd").format(new Date()));

        dataDBHelper.addRow(db, exercise);

        dataDBHelper.close();
        db.close();
    }

}

我已經嘗試卸載應用程序並重新啟動Android Studio,但是我一直收到相同的錯誤。 CREATE_TABLE String因為這似乎是標准問題,但是我看不到我的語句出了什么問題。 我知道這可能是一個愚蠢的小錯誤。 我今天早上開始了這個項目,我認為它需要新的眼光。 謝謝。

我的頭上有兩件事:

  1. 在您的create語句中,我認為您需要在表名和左括號之間留一個空格。
  2. 像#1中那樣進行更改之后,或者如果您懷疑數據庫中的損壞並想重新開始,請增加數據庫版本號。 onUpgrade將被調用,在onUpgrade您只需刪除並重新創建表。 如果執行此操作,您(以及使用您的應用程序的任何人)將丟失表中的所有數據,但是從現在起,您無論如何都無法使用它。 因此,一旦投入生產,建議您使用onUpgrade級聯if語句對數據庫進行非破壞性更新(如果需要更改某些內容,例如添加列或表)。

好的,這段代碼沒有錯。 我將代碼復制並粘貼到另一個類中並進行了編輯,但是我忘了在新的幫助器類中更改DATABASE_NAME……我知道那是很愚蠢的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM