我正在尝试添加一个名为“ 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