【发布时间】:2019-03-15 12:21:40
【问题描述】:
我正在 android 中创建一个 SQLite 数据库。但是每当我调用方法“displayDatabase()”时就会出现一些错误。
请帮忙!!
这里是 displayDatabase() 方法:
public void displayDatabase() {
DataDbHelper mDbHelper = new DataDbHelper(this);
SQLiteDatabase db = mDbHelper.getReadableDatabase();
String[] projection = {DataContract.DataEntry.COLUMN_PROJECT_NAME,
DataContract.DataEntry.COLUMN_HEAD,
DataContract.DataEntry.COLUMN_CITY,
DataContract.DataEntry.COLUMN_COST};
Cursor c = db.query(DataContract.DataEntry.TABLE_NAME,
projection,
null,
null,
null,
null,
null);
TextView textView = (TextView) findViewById(R.id.textview);
try {
//textView.setText("The database contains - " + c.getColumnCount() + "Columns containing data");
textView.setText("Hello Welcome\n");
textView.append("-" + DataContract.DataEntry._ID
+ "---" + DataContract.DataEntry.COLUMN_PROJECT_NAME
+ "---" + DataContract.DataEntry.COLUMN_HEAD
+ "---" + DataContract.DataEntry.COLUMN_CITY
+ "---" + DataContract.DataEntry.COLUMN_COST + "\n");
int currentId = c.getColumnIndex(DataContract.DataEntry._ID);
int projectNameId = c.getColumnIndex(DataContract.DataEntry.COLUMN_PROJECT_NAME);
int headId = c.getColumnIndex(DataContract.DataEntry.COLUMN_HEAD);
int cityId = c.getColumnIndex(DataContract.DataEntry.COLUMN_CITY);
int costId = c.getColumnIndex(DataContract.DataEntry.COLUMN_COST);
while (c.moveToNext()) {
int id = c.getInt(currentId);
String projectName = c.getString(projectNameId);
String head = c.getString(headId);
String city = c.getString(cityId);
String cost = c.getString(costId);
textView.append("-" + id
+ "---" + projectName
+ "---" + head
+ "---" + city
+ "---" + cost);
}
} finally {
c.close();
}
}
这是出现在 logcat 中的错误:
CursorWindow:无法从 CursorWindow 读取第 0 行第 -1 列 它有 11 行,4 列。 03-15 10:00:58.359 6348-6348/? E/AndroidRuntime: 致命异常: main 进程:com.example.student.sampledatabase,PID:6348 java.lang.IllegalStateException:无法读取第 0 行,列 -1 光标窗口。确保光标在之前正确初始化 从中访问数据。
【问题讨论】:
-
您正在尝试获取未包含在 Select 语句中的列索引
-
另外,作为直接使用 SQLite 的更好替代方案,请尝试使用 Google 的 Room Persistence Library(2017 年推出)。阅读此处:developer.android.com/topic/libraries/architecture/room 并观看此内容以获得快速想法:youtube.com/watch?v=SKWh4ckvFPM Room 通过为您自动生成它来减少所有 SQLite 样板代码和任何可能的错误。您可以直接将您的数据对象类与数据库进行映射。
标签: android sqlite android-sqlite android-database