gpt4 book ai didi

android - 无法写入 Android 中的 SQLite 数据库

转载 作者:搜寻专家 更新时间:2023-10-30 23:38:41 25 4
gpt4 key购买 nike

在我的应用程序中,我有一个 SQLite 数据库来存储信息。在开始我的主要 Activity 时,我会初始化数据库。这是数据库的 onCreate 代码:

@Override
public void onCreate(SQLiteDatabase db) {
String query = "CREATE TABLE " + TABLE_OWES + "(" +
COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
COLUMN_DESC + " TEXT, " +
COLUMN_VALUE + " INTEGER" + ");";
db.execSQL(query);
}

我有一个按钮和两个 editText 字段,用于将信息发送到数据库并添加它。按下按钮时触发的 Activity 代码:

 public void addAnOwe(View v){
EditText description = (EditText) findViewById(R.id.descriptionAdd);
EditText value = (EditText) findViewById(R.id.valueAdd);
Owe newOwe = new Owe(description.getText().toString(), Integer.parseInt(value.getText().toString()));
DB.addOwe(newOwe);
Log.i(TAG, "Attempting to add Owe");

updateLists();
}
public void updateLists(){
descriptionList = DB.DBtoArray("desc");
valueList = DB.DBtoArray("value");
oweAdapter.updateValues(valueList);
oweAdapter.updateDescriptions(descriptionList);
updateTotalViewText();
}

DBManager中的代码:

public void addOwe(Owe owe){
ContentValues values = new ContentValues();

String description = owe.get_desc();
String value = String.valueOf(owe.get_value());

values.put(COLUMN_DESC, description);
values.put(COLUMN_VALUE, value);

Log.i(TAG, "Attempting to add: " + description + " - " + value);
SQLiteDatabase db = getWritableDatabase();
db.insert(TABLE_OWES, null, values);
db.close();
}

此时所有日志消息都显示 DBManager 正在正确接收描述和值。但是,我使用两种方法从数据库中读取信息。第一个,我自己写的:

public String[] DBtoArray(String column){
SQLiteDatabase db = getWritableDatabase();
Cursor c = db.rawQuery("SELECT * FROM " + TABLE_OWES + " WHERE 1", null);
String[] array = new String[c.getCount()];
int i = 0;
while(c.moveToNext()){
array[i] = c.getString(c.getColumnIndex(column));
i++;
}
Log.i(TAG, "String of db is " + databaseToString());
Log.i(TAG, "Array Log is " + Arrays.toString(array));
return array;
}

第二个是在方法 databaseToString() 中调用的,这是我从别处复制的,以防我的方法写错了。

 public String databaseToString(){
String dbString = "";
SQLiteDatabase db = getWritableDatabase();
String query = "SELECT * FROM " + TABLE_OWES + " WHERE 1";

//Cursor points to a location in your results
Cursor c = db.rawQuery(query, null);
//Move to the first row in your results
c.moveToFirst();

//Position after the last row means the end of the results
while (!c.isAfterLast()) {
if (c.getString(c.getColumnIndex(COLUMN_DESC)) != null) {
dbString += c.getString(c.getColumnIndex(COLUMN_DESC));
}
c.moveToNext();
}
db.close();
return dbString;
}

DBtoArray 中的记录器都显示数据库为空。从 addAnOwe() 方法中可以看出,这些方法一个接一个地被调用。为什么不保存数据?

最佳答案

为什么不简单地传递 DB.addOwe(String description, Integer x) 并可能在 DBHelper 类中接受!?您正在存储一个字符串和一个整数,但您希望将它们放入您打算在 DBHelper 中检索的另一个对象中,以使用另一种方法取回该对象内的参数值。我相信直接传递值会减少很多复杂性和运行时间。 :)

关于android - 无法写入 Android 中的 SQLite 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38002200/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com