从现有的SQLite数据库Android查询数据

时间:2014-04-12 20:55:40

标签: java android sql database sqlite

我遵循了本教程:http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/使用SQLite数据库浏览器创建数据库,将db文件放在“assets”文件夹中等。

这里我的数据库结构使用SQLite数据库浏览器创建,并附带教程链接中的说明; db structure

然后我将此方法添加到DataBaseHelper类的末尾;

public ArrayList<market> getMarkets() {

    String table = "markets";
    ArrayList<market> markets = new ArrayList<market>();
    market mrkt = new market();

    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery("SELECT * FROM " + table, null);

    if(cursor.moveToFirst()) {
        cursor.moveToNext();
        do {
            mrkt.market_id = cursor.getInt(cursor.getColumnIndex("marketid"));
            mrkt.market_name = cursor.getString(cursor.getColumnIndex("name"));
            mrkt.market_telno = cursor.getInt(cursor.getColumnIndex("telno"));
            mrkt.market_location = cursor.getString(cursor.getColumnIndex("location"));
            mrkt.market_hours = cursor.getString(cursor.getColumnIndex("hours"));
            markets.add(mrkt);
        }while(cursor.moveToNext());
    }

    cursor.close();
    db.close();
    return markets;
}

我尝试用活动类中的这些行显示textview的第一个市场信息:

     myDbHelper = new DataBaseHelper(this);
     markets = new ArrayList<market>();

     myDbHelper.createDataBase();
     myDbHelper.openDataBase();
     markets = myDbHelper.getMarkets();

     id.setText(markets.get(0).getMarket_id());
     name.setText(markets.get(0).getMarket_name());
     telno.setText(markets.get(0).getMarket_telno());
     loc.setText(markets.get(0).getMarket_location());
     hours.setText(markets.get(0).getMarket_hours());

但是我遇到了logcat错误:

04-12 23:40:24.477:E / SQLiteLog(30698):( 1)没有这样的表:市场

我检查了数据/数据文件,但没有我的db文件 我一行一行地跟着教程,但我不知道为什么我不能正确创建表或sqlite数据库? 我试过.db,.sqlite3扩展..如果我错了那么我的db文件扩展名应该是什么? 请帮忙..

(注意:我的手机上有cyanogenmod 11.0)

2 个答案:

答案 0 :(得分:0)

我不确定问题是什么,但是这段代码:

if(cursor.moveToFirst()) {
    cursor.moveToNext();
    do {
        mrkt.market_id = cursor.getInt(cursor.getColumnIndex("marketid"));
        mrkt.market_name = cursor.getString(cursor.getColumnIndex("name"));
        mrkt.market_telno = cursor.getInt(cursor.getColumnIndex("telno"));
        mrkt.market_location = cursor.getString(cursor.getColumnIndex("location"));
        mrkt.market_hours = cursor.getString(cursor.getColumnIndex("hours"));
        markets.add(mrkt);
    }while(cursor.moveToNext());
}

跳过查询的第一行。使用cursor.moveToFirst(),您已经指向表格中的第一行,但是您执行了额外的cursor.moveToNext()跳过第一行,然后转到第二行。

答案 1 :(得分:0)

您没有定义表格。我在假设,因为它不在教程中。这是该行,它应该在DATABASE_NAME和DATABASE_VERSION之后,并且在行之前标识列:

public static final String TABLE_NAME = "markets";

如果您使用其他代码修复它,请告诉我们!我一直在做某事