Statement.execute() 函数 return 布尔值

Statement.execute() function return Boolean value

我正在尝试做一件非常简单的事情:知道我的 SQLite DB 中是否存在一行。 Statement.execute(sqlquery) 函数应该允许我这样做,因为它在函数的描述中读到:如果 SQL 查询 returns 1 或更多行 return = true,如果SQL 查询 returns 0 行return = false。 我认为没有必要深入研究我的数据库或程序的结构。我这样做很简单 return

System.out.println("1---" + stat1.execute("SELECT EXISTS(SELECT 1 FROM " + TABLA_OFERTAS + " WHERE " + OFERTAS_COL_ID + " = '" + id + "' AND " + OFERTAS_COL_ASIGNADA + " = 'SI')"));

其中 id 是遍历 table 的每一行的变量。我只是过滤每一行,如果它有一个带有 YES 的列(应该 return 为真),如果那个特定的列有另一个东西 SQL 查询不应该匹配并且它应该 return 没有值所以它应该 return 一个 false.

如果我在外部 SQL 程序中使用相同的 select 句子,这实际上 returns 0 值,但出于某种原因,而在我自己的程序中 System.out 总是 returns true.

我检查了 "id" 变量,它工作正常。我不知道该怎么办。 提前感谢您提供的任何帮助。也许我误解了方法 Javadoc。我不知道。 如果需要更多信息,我愿意分享。

您的查询使用 EXISTS,如果满足条件则 return 为 1,否则为 0
所以,你总是得到 1 行。
此外,当 sql 语句是 SELECT 查询时,方法 execute() 总是 returns true

您需要检查查询结果是否 returned 10,但您可以在没有 EXISTS 的情况下使用PreparedStatement? 占位符在 sql 语句中,这是将参数传递给查询的安全方式:

String sql = "SELECT 1 FROM " + TABLA_OFERTAS + " WHERE " + OFERTAS_COL_ID + " = ? AND " + OFERTAS_COL_ASIGNADA + " = 'SI'";
PreparedStatement st = conn.prepareStatement(sql)); // conn is your connection object
st.setInt(1, id);
ResultSet rs  = st.executeQuery();
System.out.println("1---" + rs.next()); 

rs.next() 将 return true 如果查询 return 至少 1 行,或者 false 如果没有行。

我假设 id 是一个整数,但如果它是一个字符串更改为:

st.setString(1, id);