找不到这样的表错误SQLite Android Studio

时间:2018-10-11 13:37:46

标签: android button android-sqlite sqliteopenhelper

我正在尝试添加一个名为“ view”的按钮以查看表“ transactions”中的所有记录,但是当我按下该按钮时,logcat表示未找到此类表。

在扩展SQLiteOpenHelper的DatabaseHelper中,我已经初始化了该特定表的所有字符串,如下所示:

    private static final String TRANSACTION_TABLE = "transactions";
    private static final String ID_TRANSACTION = "transaction_id";
    private static final String AMOUNT = "amount";
    private static final String CATEGORY = "category";
    private static final String NOTE = "note";

DatabaseHelper类中的onCreate&onUpgrade方法可创建“交易”表:-

    @Override
    public void onCreate(SQLiteDatabase db) {

        db.execSQL("CREATE TABLE " + TRANSACTION_TABLE + "(ID INTEGER PRIMARY KEY AUTOINCREMENT, AMOUNT DOUBLE, CATEGORY TEXT, NOTE TEXT)");
    }

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

以及从“交易”表中检索数据的方法:-

//Retrieve transaction records
    public Cursor getTransactionData(){
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor result = db.rawQuery("select * from transactions",null);
        return result;
    }

访问“事务”数据库的活动中的“添加”按钮和“查看”按钮如下。

public void AddTransactions () {
        button_add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                boolean isInserted = myDb.insertTransactionData(amount.getText().toString(), category, note.getText().toString());

                if (isInserted = true) {
                    Toast.makeText(AddExpenses.this, "Transaction Inserted !", Toast.LENGTH_LONG).show();
                    clearText();
                }
                else {
                    Toast.makeText(AddExpenses.this, "Transaction not Inserted !", Toast.LENGTH_LONG).show();
                }

            }
        });
    }

    public void ViewAllTransactions () {
        button_view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Cursor result = myDb.getTransactionData();
                if (result.getCount() == 0) {
                    // if no data found, message below is showned
                    showMessage("Error ! "," No data found !");
                    return;
                }
                StringBuffer buffer = new StringBuffer();
                while (result.moveToNext()) {
                    buffer.append("Transaction No: "+result.getString(0)+"\n");
                    buffer.append("Amount: "+result.getString(1)+"\n");
                    buffer.append("Category: "+result.getString(2)+"\n");
                    buffer.append("Note: "+result.getString(3)+"\n\n");
                }

                //Show all data
                showMessage("Expenses", buffer.toString());
            }
        });
    }

从DatabaseHelper类插入数据方法:-

public boolean insertTransactionData(String amount, String category, String note) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();

        contentValues.put(AMOUNT, amount);
        contentValues.put(CATEGORY, category);
        contentValues.put(NOTE, note);

        long result = db.insert(TRANSACTION_TABLE, null, contentValues);

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

当我向表中添加数据时没有出现错误,但是当我尝试通过单击“查看”按钮查看数据时,以下日志显示:-

10-11 21:33:49.652 11136-11136/project.myapplication E/SQLiteLog: (1) no such table: transactions
10-11 21:33:49.698 11136-11136/project.myapplication E/SQLiteDatabase: Error inserting note=Wagyu Beef amount=70 category=Food and Drinks
    android.database.sqlite.SQLiteException: no such table: transactions (code 1): , while compiling: INSERT INTO transactions(note,amount,category) VALUES (?,?,?)
        at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
        at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:890)
        at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:501)
        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:1546)
        at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1417)
        at project.myapplication.DatabaseHelper.insertTransactionData(DatabaseHelper.java:189)
        at project.myapplication.AddExpenses$2.onClick(AddExpenses.java:145)
        at android.view.View.performClick(View.java:6294)
        at android.view.View$PerformClick.run(View.java:24770)
        at android.os.Handler.handleCallback(Handler.java:790)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6494)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

因为这是我第一次在Android上使用SQLite数据库,所以我不太确定代码中哪里出错了,或者我应该更改些什么来解决它,但请务必告诉我!太感谢了 ! :D

0 个答案:

没有答案
相关问题