Java/Android。 int = 文本?

Java/Android. int = text?

我遇到了一个奇怪的错误,但我不明白它为什么会出现。基本上,我使用 SELECT 查询从数据库中获取一些数据,它会生成一个错误。 错误与"WHERE traseu = " + traseu + ";"有关。我的 PostgreSQL 数据库中的列 traseu 是 'text';

类型
protected void onProgressUpdate(String... values) {
            super.onProgressUpdate(values);

            String traseu = values[0];
            String sql = "SELECT id, ST_x(geom) AS x, ST_y(geom) AS y, tip AS tr, traseu, denumire, adresa, poza FROM modul WHERE traseu = " + traseu + ";";

它给我以下错误:

01-08 15:30:05.435  23635-23635/com.example.nsomething E/com.example.nsomething.main.Harta﹕ query failed to execute: org.postgresql.util.PSQLException: ERROR: operator does not exist: text = integer
    Hint: No operator matches the given name and argument type(s). You might need to add explicit type casts.
    Position: 112

任何提示。

尝试将参数用单引号引起来。

例如:

...WHERE traseu = '" + traseu + "';"

不要将用户提供的值连接到 SQL 文本中

这是危险和错误的:

String sql = "SELECT ... WHERE traseu = " + traseu + ";";
                                        ^^^^^^^^^^^^^^^
                                        Bad, don't do this

这对整数来说并不危险,但它仍然是一个可怕的习惯。别这样。

你应该 use parameterised statements.

String sql = "SELECT ... WHERE traseu = ?;";

PreparedStatement st = conn.createPrepared(sql);
st.setInt(1, traseu);

参见: