从android sqlite数据库中检索值的不一致

时间:2013-10-29 06:38:03

标签: android sql database sqlite android-sqlite

在我的Android应用程序中,我有一个存储在\ assets \ database \ myApp.sqlite下的sqlite数据库

在应用程序加载时,我将检查myApp.sqlite文件(数据库)是否在手机中可用,如果它不可用,我会将其存储在特定位置。

我的申请

我将检索用户的当前位置并将这些坐标传递给下面提到的查询。此查询将从myApp.sqlite(我的本地数据库)中的用户当前点搜索最近的位置,并检索最近的单个位置。

查询以查找特定点的最近位置:

SELECT *, MIN( (latitude - USER LATITUDE) * (latitude - USER LATITUDE) + (USER LONGITUDE- longitude)*(USER LONGITUDE- longitude) ) AS DISTANCE FROM my_nearest_location_table ORDER BY DISTANCE

我的问题是:

以上查询仅在某些设备中正常运行。但是,当我尝试在HTC ONE V等其他设备中执行我的应用程序(相同的查询)时,会检索到其他一些错误的值(位置)。我不确定上述查询调用是否有问题或从本地数据库中读取记录。

为了测试,我还加载了这个本地数据库,并在SQLite Manager(FireFox插件)中测试了上述相同的查询。正确检索最近的位置值。仅在某些特定设备(如HTC One V)中,三星Duos才会检索到错误的值。

我的代码如下:

    public final String DATABASE_NAME="myApp.sqlite";           
    database = new MySQLiteHelper(context, DATABASE_NAME, null, 1).getWritableDatabase();
    BASE_URL = "data/data/com.myApp.xxxx/databases/"+DATABASE_NAME; 

    //To get nearest area from user's location
    public List<Location> getRecordsByLatAndLong(Context theContext, double theLat, double theLng)
    {
            String aSelectQuery;
            List<Location> aLocationList = new ArrayList<Location>();

            aSelectQuery = "SELECT *, MIN((latitude - "+theLat+") * (latitude - "+theLat+")" +
                    " + ("+theLng+"- longitude)*("+theLng+"- longitude)) AS DISTANCE " +
                    "FROM train_stations ORDER BY DISTANCE";

            Cursor aCursor = database.rawQuery(aSelectQuery, null);
            try
            {
                if (aCursor.moveToFirst())
                {
                    do {
                        Location aLocation = new Location();
                        aLocation.setLocationId(aCursor.getInt(0));
                        aLocation.setLocationName(aCursor.getString(1));
                        aLocation.setLocationCode(aCursor.getString(2));
                        aLocation.setLat(aCursor.getDouble(3));
                        aLocation.setLng(aCursor.getDouble(4));
                        aLocationList.add(aLocation);
                    } while(aCursor.moveToNext());
                }
                aCursor.close();
            }
            catch (Exception theException) {
                System.out.println("Exception..."+ theException);
            }
            return aLocationList;
    }

有人可以指导我为什么在从特定数据库检索结果时存在这种不一致(对于同一查询)。

提前致谢。

1 个答案:

答案 0 :(得分:1)

嗯,你真的从光标中提取了最小的 DISTANCE 值吗?

实施例

    ...
    aLocation.setDistance(aCursor.getDouble(5));