不要立即标记我重复的问题。我的问题有所不同,因为我有一个格式正确的 SQL 查询。
public static final String TABLE_NAME = "log";
public static final String COLUMN_ID = "_id";
public static final String LOG_TEXT = "logtext";
private static final String TABLE_CREATE = "CREATE TABLE " + TABLE_NAME + " (" +
COLUMN_ID + " integer primary key autoincrement, " +
LOG_TEXT + " TEXT not null);";
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(TABLE_CREATE);
}
Run Code Online (Sandbox Code Playgroud)
我在这里查询
String[] columns = {LOG_TEXT,COLUMN_ID};
Cursor cursor = helper.getReadableDatabase().query(TABLE_NAME, columns, null, null, null, null, COLUMN_ID + " desc");
Run Code Online (Sandbox Code Playgroud)
我抓住了这个包含sql查询的异常。
catch(Exception e){
Log.D("sql Exception",e.getMessage());}
Run Code Online (Sandbox Code Playgroud)
它返回
no such column: _id: , while compiling: SELECT logtext, _id FROM log ORDER BY _id desc
Run Code Online (Sandbox Code Playgroud)
我一般熟悉 Oracle SQL 和关系数据库。是我的 ORDER BY 子句吗?我确定您可以始终使用 order by。它与 GROUP BY 的行为不同。
关于为什么例外的任何想法?如果有人想看到我正在更新我的 ArrayAdaptor 语句。我在列表视图中使用光标
String[] data = query();
adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, android.R.id.text1, data);
listView.setAdapter(adapter);}
Run Code Online (Sandbox Code Playgroud)
改写
每当您更改架构时,TABLE_CREATE您必须将这些更改通知您的应用程序,它们不会在您更改时自动发生TABLE_CREATE。最简单的方法是database_version在扩展的 SQLiteOpenHelper 类中增加您的值。您发现您也可以卸载/重新安装该应用程序,以获得相同的结果。如果您精通 SQL,则可以更改表。但是无论使用何种方法,您都必须确保您的应用程序在尝试访问新列之前更改架构......
也适用于 SQLite:
_id integer primary key
Run Code Online (Sandbox Code Playgroud)
是同义词:
_id integer primary key autoincrement not null
Run Code Online (Sandbox Code Playgroud)
并且查询使用降序作为默认顺序,因此ORDER BY _id与ORDER BY _id DESC.
| 归档时间: |
|
| 查看次数: |
3930 次 |
| 最近记录: |