gpt4 book ai didi

android - 游标返回不正确的值

转载 作者:行者123 更新时间:2023-11-29 22:21:17 25 4
gpt4 key购买 nike

我正在创建一个用于监控个人财务的应用程序。用户创建帐户、类别和交易。 dBHelper.java 类创建数据库,如下所示:

public void onCreate(SQLiteDatabase db) {
//executes only once
//create tables
Log.v("TAG", "creating table:" +racuniTable);
String sql = "create table " +racuniTable+" (" +colID+ " INTEGER PRIMARY KEY AUTOINCREMENT, "
+colName+ " TEXT, " +colValue+ " REAL, " +colAccType+ " TEXT);";

Log.v("TAG", "creating table:" +transakcijeTable);
String sql1 = "create table " +transakcijeTable+" (" +colTransID+ " INTEGER PRIMARY KEY AUTOINCREMENT, "
+colTransDate+ " DATE, " +colAmount+ " REAL, "
+colIDracuni+ " INTEGER, " +colIDkategorije+ " INTEGER);";

Log.v("TAG", "creating table:" +kategorijeTable);
String sql2 = "create table " +kategorijeTable+" (" +colCatID+ " INTEGER PRIMARY KEY AUTOINCREMENT, " +colCatName+ " TEXT);";
Log.v("TAG", "adding account:");

db.execSQL(sql);
db.execSQL(sql1);
db.execSQL(sql2);
}

这个函数创建了三个数据库。当我尝试获取所有事务的列表或由 SQL 语句配置的任何其他报告时,问题出现了:

private void getTransactions(){

try {
DbHelper dbHelper = new DbHelper(this.getApplicationContext());
newDB = dbHelper.getWritableDatabase();
m_transaction = new ArrayList<transaction>();
Cursor c = newDB.rawQuery("SELECT rac.Ime, trans.Znesek, trans.Datum, kate.Ime FROM Racuni AS rac, " + "Transakcije AS trans, Kategorije
as kate WHERE trans.ID_racuna=rac._id AND trans.ID_kategorije=kate._id", null);

if (c != null ) {
if (c.moveToFirst()) {
do {
String racun = c.getString(c.getColumnIndex("rac.Ime"));
double znesek = c.getDouble(c.getColumnIndex("trans.Znesek"));
String datum = c.getString(c.getColumnIndex("trans.Datum"));
String kategorija = c.getString(c.getColumnIndex("kate.Ime"));

transaction t1 = new transaction();
t1.setracun(racun);
t1.setznesek(znesek);
t1.setdatum(datum);
t1.setkategorija(kategorija);

m_transaction.add(t1);

}while (c.moveToNext());
}
}
} catch (SQLiteException se ) {
Log.e(getClass().getSimpleName(), "Could not create or Open the database");
}

我之前使用Cursor 来显示帐户列表并且效果很好。我不知道为什么它不再工作了。我没有在表中使用外键或类似的东西,它应该可以工作。如果我执行代码,我将得到错误的值和大量错误。我在这些特定行上收到错误:

String racun = c.getString(c.getColumnIndex("rac.Ime"));
double znesek = c.getDouble(c.getColumnIndex("trans.Znesek"));
String datum = c.getString(c.getColumnIndex("trans.Datum"));
String kategorija = c.getString(c.getColumnIndex("kate.Ime"));

应用程序将运行,我将打印信息。所有打印的信息都是正确的。字符串 racun 与字符串 kategorija 相同,但它们不应该相同。我不确定为什么我总是从 racun 列中得到错误的值。我使用带有 adb shell 的 SQLite 3 测试了我的 SQL,它运行良好。以下是来自 LogCat 的错误:

08-19 17:48:16.279: ERROR/Cursor(625): requesting column name with table name -- rac.Ime

08-19 17:48:16.331: ERROR/Cursor(625): requesting column name with table name -- trans.Znesek

08-19 17:48:16.359: ERROR/Cursor(625): requesting column name with table name -- trans.Datum

08-19 17:48:16.439: ERROR/Cursor(625): requesting column name with table name -- kate.Ime

是不是因为我在SQL中使用别名有什么问题?这是应该打印的:

SELECT rac.Ime, trans.Znesek, trans.Datum, kate.Ime FROM Racuni AS rac, Transakcije AS trans, Kategorije as kate WHERE trans.ID_racuna=rac._id AND trans.ID_kate
gorije=kate._id;
Tomaz|50.0|3911-08-18|placa
Tom|33.0|3912-07-18|placa
Tomaz|70.0|3800-07-17|zapravlanje
Tom|69.0|2010-07-17|placa
Tomaz|30.0|2011-08-18|placa
Tom|30.0|2011-08-12|zapravlanje
Tom|50.0|2011-08-01|placa
sqlite>

This是我收到的其余部分。关于如何解决这个问题有什么建议吗?

最佳答案

改变

SELECT rac.Ime, trans.Znesek, trans.Datum, kate.Ime FROM ...

到:

SELECT rac.Ime racun, trans.Znesek, trans.Datum, kate.Ime kategorja FROM ...

然后分别改变

c.getColumnIndex(...)

关于android - 游标返回不正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7125825/

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