gpt4 book ai didi

android - 我如何在 Spatialite Android 中使用准备好的语句?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:37:38 25 4
gpt4 key购买 nike

我正在查看 tutorial for Spatialite-Android ,我注意到以下代码示例:

String query = "SELECT AsText(Transform(MakePoint(" + TEST_LON + ", " + TEST_LAT + ", 4326), 32632));";
sb.append("Execute query: ").append(query).append("\n");
try {
Stmt stmt = db.prepare(query);
if (stmt.step()) {
String pointStr = stmt.column_string(0);
sb.append("\t").append(TEST_LON + "/" + TEST_LAT + "/EPSG:4326").append(" = ")//
.append(pointStr + "/EPSG:32632").append("...\n");
}
stmt.close();
} catch (Exception e) {
e.printStackTrace();
sb.append(ERROR).append(e.getLocalizedMessage()).append("\n");
}

特别是,我注意到糟糕的做法是简单地将 SQL 查询串在一起,而不是使用更合适的方法,例如 Android SQLite 库所使用的方法。有没有办法让 Spatialite 使用真正的准备好的语句?

明确一点,我正在寻找类似这样的东西,使用 Android 中的标准 SQLite 数据库:

String query="SELECT * FROM table WHERE _id=?";
Cursor data=db.rawQuery(query,new String[]{id});

最佳答案

有一些技巧。他们都使用 exec() 调用,这个版本有 3 个参数。来自 the source code 的声明是:

public void exec(String sql, jsqlite.Callback cb, String args[])

一个 jsqlite.Callback 是一个接口(interface),它可以有多个。但最好的方法似乎是使用 db.get_table(query,args) 函数。 %q 是 Android SQLite 表示中 ? 的有效替代品。这是给定代码的转换:

String query = "SELECT AsText(Transform(MakePoint(%q, %q, 4326), 32632));";
TableResult result=db.get_table(query,new String[]{""+TEST_LONG,""+TEST_LAT});

从那里,您只需从 TableResult 中获取结果。没有从这里获取结果的方法调用,您实际上必须获取公开声明的变量并手动解析它。这是一个如何做到这一点的例子。

TableResult result=db.get_table(query,new String[]{""+lng,""+lat});
Vector<String[]> rows=result.rows;
for (String[] row:rows)
{
for (String val:row)
{
Log.v(TAG,val);
}
}

如果您没有进行选择,请尝试这样的操作:

TableResult result=new TableResult();
db.exec("ATTACH DATABASE %q AS newDb",result,new String[]{path});

我假设相同的模式适用于插入等

关于android - 我如何在 Spatialite Android 中使用准备好的语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20013844/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com