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);
参见:
我遇到了一个奇怪的错误,但我不明白它为什么会出现。基本上,我使用 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);
参见: