在2d数组中获取SQLite DB数据并在android中返回

时间:2014-01-29 14:48:08

标签: java android arrays sqlite

我有以下函数用于查询SQLite Db,将检索到的记录放入数组并将其返回。

public String[][] getrecords(){

    Log.i("SENDSERVER", "Get Records Called");
    SQLiteDatabase sampleDB = this.getReadableDatabase();
    Cursor c = sampleDB.rawQuery("SELECT id,welawa,lati,longi FROM " +
        TABLE_LOCATIONS + " LIMIT 5", null);
    String[][] aryDB = new String[5][4];
    int i = 0;
    if (c != null ) {
        if  (c.moveToFirst()) {
            do {
                String db_id = c.getString(c.getColumnIndex("id"));
                String welawa = c.getString(c.getColumnIndex("welawa"));
                String latitude = c.getString(c.getColumnIndex("lati"));
                String longitude = c.getString(c.getColumnIndex("longi"));
                aryDB[i][0] = db_id;
                aryDB[i][1] = welawa;
                aryDB[i][2] = latitude;
                aryDB[i][3] = longitude;
                Log.i("SENDSERVER", "Record Added"); //This doesn't get logged
                i++;
           }while (c.moveToNext());
         } 
    }
    Log.i("SENDSERVER", "Return Records");
    return aryDB;

}

我尝试检索记录并从我的服务类中使用它们。

String aryDB[][] = dbh.getrecords();
Log.i("SENDSERVER", "GET DB RECORDS");
int i = 0;
int id = 0;
String welawa = "";
String lati = "";
String longi = "";
while(i < 5){
    id = Integer.parseInt(aryDB[i][0]);
    welawa = aryDB[i][1];
    lati = aryDB[i][2];
    longi = aryDB[i][3];
    Log.i("SENDSERVERDB", id + " - " + welawa + " - " + lati + " - " + longi);
    i++;
}

由于某种原因,没有返回数组。 我可能的猜测是, 1.功能的定义是错误的。我的目的是返回数组。 2.我得到数据库连接/我的检索代码是错误的。 3.我的noob大脑无法理解的其他一些事情。

非常感谢你的帮助。

------ EDIT 添加更多日志后,应用程序崩溃

Cursor c = sampleDB.rawQuery("SELECT id,welawa,lati,longi FROM " +
                TABLE_LOCATIONS + " LIMIT 5", null);

我的查询中有任何问题吗?

2 个答案:

答案 0 :(得分:1)

这是一个数据库问题。使用了错误的ColumnName。

答案 1 :(得分:0)

当没有请求条件的行时,Cursor永远不会返回null,只返回一个空的Cursor。

当rawQuery返回0行时,代码仍有问题,游标不会为null,而while循环将至少执行一次。 因此,当光标为空时,此行上会出现问题

c.getString(c.getColumnIndex("id"));

将您的代码更改为:

c.moveToFirst();
while (c.moveToNext())
          {
                String db_id = c.getString(c.getColumnIndex("id"));
                String welawa = c.getString(c.getColumnIndex("welawa"));
                String latitude = c.getString(c.getColumnIndex("lati"));
                String longitude = c.getString(c.getColumnIndex("longi"));
                aryDB[i][0] = db_id;
                aryDB[i][1] = welawa;
                aryDB[i][2] = latitude;
                aryDB[i][3] = longitude;
                Log.i("SENDSERVER", "Record Added"); //This doesn't get logged
                i++;
           }