Java 无法从数据库中获取数据
首先,我对Android开发还不熟悉。 我在从数据库获取数据时遇到一些问题。每当我试图获取数据时,光标都是空的 这是我的密码:Java 无法从数据库中获取数据,java,android,sqlite,android-sqlite,Java,Android,Sqlite,Android Sqlite,首先,我对Android开发还不熟悉。 我在从数据库获取数据时遇到一些问题。每当我试图获取数据时,光标都是空的 这是我的密码: public ArrayList<Word> getWords(){ SQLiteDatabase db = this.getReadableDatabase(); String query = "SELECT * FROM " + TABLE_NAME; Cursor cursor = db.rawQuery(query, nul
public ArrayList<Word> getWords(){
SQLiteDatabase db = this.getReadableDatabase();
String query = "SELECT * FROM " + TABLE_NAME;
Cursor cursor = db.rawQuery(query, null);
ArrayList<Word> List = new ArrayList<Word>();
if(cursor != null){
cursor.moveToFirst();
while (cursor.moveToNext()){
List.add(new Word(cursor.getString(cursor.getPosition())));
}
}
cursor.close();
db.close();
return List;
}
public ArrayList getWords(){
SQLiteDatabase db=this.getReadableDatabase();
String query=“SELECT*FROM”+表名称;
Cursor Cursor=db.rawQuery(查询,空);
ArrayList=新建ArrayList();
如果(光标!=null){
cursor.moveToFirst();
while(cursor.moveToNext()){
添加(新单词(cursor.getString(cursor.getPosition()));
}
}
cursor.close();
db.close();
退货清单;
}
光标的大小始终为1,但“List”变量的大小始终为0
我不明白这个问题,谢谢你的帮助。你将光标位置移动了两次。只需删除行光标。moveToFirst()当在第一次迭代中移动到第一个位置时,moveToNext方法就足够了。您可以使用以下代码: 1-如果您需要第一行:
if(cursor != null){
cursor.moveToFirst();
if(cursor.isAfterLast() == false){
List.add(new Word(cursor.getString(cursor.getPosition())));
}
}
2-如果需要多行:
if(cursor != null){
cursor.moveToFirst();
while (cursor.isAfterLast() == false) {
List.add(new Word(cursor.getString(cursor.getPosition())));
cursor.moveToNext();
}
}
我检查了所有东西,但你的建议不起作用。只是为了确保:我要获取所有行。像这样尝试
public ArrayList<Word> getWords(){
SQLiteDatabase db = this.getReadableDatabase();
String query = "SELECT * FROM " + TABLE_NAME;
Cursor cursor = db.rawQuery(query, null);
ArrayList<Word> list = new ArrayList<Word>();
if(cursor != null){
while (cursor.moveToNext()){
list.add(new Word(cursor.getString(cursor.getPosition())));
}
}
cursor.close();
db.close();
return list;
}
public ArrayList getWords(){
SQLiteDatabase db=this.getReadableDatabase();
String query=“SELECT*FROM”+表名称;
Cursor Cursor=db.rawQuery(查询,空);
ArrayList=新建ArrayList();
如果(光标!=null){
while(cursor.moveToNext()){
添加(新单词(cursor.getString(cursor.getPosition()));
}
}
cursor.close();
db.close();
退货清单;
}
我刚刚意识到,在我上面给出的代码中,程序没有进入while循环。我认为数据库有问题
我使用该查询创建数据库:
private static final String SQL_CREATE_ENTRIES =
"CREATE TABLE " + TABLE_NAME + " (" +
COLUMN_NAME_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
COLUMN_NAME_TURKISH + " TEXT, " +
COLUMN_NAME_ENGLISH + " TEXT, " +
COLUMN_NAME_GERMAN + " TEXT, " +
COLUMN_NAME_FRENCH + " TEXT, " +
COLUMN_NAME_ARABIC + " TEXT, " +
COLUMN_NAME_RUSSIAN + " TEXT, " +
COLUMN_NAME_SPANISH + " TEXT, " +
COLUMN_NAME_ITALIAN + " TEXT)";
我觉得自己像个白痴,因为我忘了在构造函数方法中键入数据库名称,如下所示: 旧的
super(context, null, null, 1);
现在
super(context, "database", null, 1);
谢谢你的帮助 也许您需要在查询的“;”末尾加上“+TABLE_NAME+”;”选项。如果需要所有行,请使用:Cursor Cursor=db.query(TABLE_NAME,null,null,null,null,null);欢迎来到堆栈溢出。如果这样格式化,代码的可读性更高。请参阅答案窗口右上角的“帮助”,了解如何格式化代码。我相信你在当前的答案中使用了粗体代码。谢谢@Gary99,我会查看帮助。