我正在构建一个Android应用程序,它使用包含4列的910,000条记录的大型预填充数据库。这些列是windspeed,纬度,经度和_id。我想要做的是构建一个sqlite查询,它在纬度列中找到一个lav值,在经度中找到long(经度)值,以及这两列相遇的风速。
所以表格看起来像这样:
_id ..............纬度经度.................. ............ ..WindSpeed
1 ..................- 9.4869363 ............. 61.3704805 .............. 7
2 .................- 7.6257292 ............... 60.9958851 .............. 8
3 .................- 9.4869363 ................ 60.9958851 ............. .10
所以,如果我使用上表,我想要找到的纬度值为-9.4869363,长值为60.9958851,因此风速将是这两条线路相遇的线路,例如从表格线3开始,因此风速为10
要做到这一点,我尝试使用这行代码,但我不认为这是正确的
public class MyDatabase extends SQLiteAssetHelper {
private static final String DATABASE_NAME = "WindSpeed.sqlite";
private static final int DATABASE_VERSION = 1;
private static final String LAT_VAL = "Latitude";
private static final String LONG_VAL = "Longitude";
private static final String WIND_SPEED= "Speed10m";
private static final String ROW_ID= " _id";
double lat= 3.52;
double Long = 65.42;
public MyDatabase(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public Cursor getWindSpeed2(){
SQLiteDatabase db = getReadableDatabase();
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
String [] sqlSelect = {WIND_SPEED,};
String sqlTables = "noabl_10m_out";
String whereClause = "LAT_VAL = ? AND LONG_VAL = ?";
String[] whereArgs = new String[] {
"lat",
"Long"
};
qb.setTables(sqlTables);
Cursor d = qb.query(db, sqlSelect, whereClause, whereArgs,
null, null, null);
d.moveToFirst();
return d;
}
}
这是错的,我搜索得很远,我只是一直感到困惑,所以任何帮助都会非常感谢
答案 0 :(得分:0)
您似乎没有使用列名,而是使用变量名。
尝试将whereClause更改为:
String whereClause = LAT_VAL + "=? AND " + LONG_VAL + "=?";
whereArgs也是:
String[] whereArgs = new String[] {
String.valueOf(lat),
String.valueOf(Long)
};
您的代码中存在许多错误,我开始认为您不知道自己在做什么。这里不必要的逗号:
String [] sqlSelect = {WIND_SPEED,};
答案 1 :(得分:0)
更改
String whereClause = "LAT_VAL = ? AND LONG_VAL = ?";
到
String whereClause = LAT_VAL+" = ? AND "+LONG_VAL+" = ?";
和
String[] whereArgs = new String[]
{
"-9.4869363",
"60.9958851"
};
到
String[] whereArgs = new String[]
{
"lat",
"Long"
};
LAT_VAL
和LONG_VAL
是您用来存储列名称的变量,因此它们应该在引号之外,并且whereArgs
需要包含您要比较的值