我正在开发带有SQLite数据库的Android应用程序。它记录交易。 transactions
表具有以下列:
idTransaction INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT
date DATE NOT NULL
type INT NOT NULL
details VARCHAR(100) NOT NULL
notes VARCHAR(300) NOT NULL
amount DOUBLE NOT NULL
account INT NOT NULL
category INT NOT NULL
我还制作了一种获取所有事务的游标的方法:
// Select all Transactions
protected Cursor getTransactions() throws SQLException {
Cursor mCursor = null;
String[] colums = new String[]{"idTransaction", "date", "type", "details", "notes", "amount", "account", "category"};
mCursor = this.getReadableDatabase().query("Transactions", colums, null, null, null, null, "name ASC");
return mCursor;
}
在另一个类中,我创建了一种方法,该方法可以在调用getTransactions()
方法时在光标中移动。
但是例外发生在这一行:
mCursor = this.getReadableDatabase().query("Transactions", colums, null, null, null, null, "name ASC");
android.database.sqlite.SQLiteException:没有这样的列:name(Sqlite代码1):,同时编译:SELECT idTransaction,日期,类型,详细信息,注释,金额,科目,类别FROM事务ORDER BY名称ASC,(操作系统错误-2:无此类文件或目录)
我检查了表名和所有列名。我删除并重新安装了该应用程序,但不知道为什么会发生异常。
答案 0 :(得分:2)
您正在使用name ASC
的订单,但没有name
列。这就是错误消息中说no such column: name
答案 1 :(得分:1)
您使用的Query方法的格式为
query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy)
正如您提到 orderBy 作为“名称ASC” 一样,但是不幸的是,您的查询字符串不包含任何此类列,因此导致您提到的异常。
要解决此问题,请在列列表中也添加 name 列,否则将 orderBy 更改为任何现有列名称例如“日期ASC” 。