VARCHAR 100 VARCHAR 100 VARCHAR 100
[ID][NAME][NICKNAME][FAVORITE_COLOR]
1约翰·约翰尼·瑞德
statement = "SELECT * FROM my_table WHERE name = ? AND nickname = ?"
prepared = connection.prepareStatement(statement)
prepared.setString(1, "Eric")
prepared.setString(2, null)
result = prepared.executeQuery()
我尝试的另一个选择是:
statement.setNull(2,java.sql.Types.VARCHAR)
这也不起作用,结果集为空。
最后,我尝试了一个不同的SQL,但它显然是错误的,返回了太多的行(因为它不够严格):
statement = "SELECT * FROM my_table WHERE name = ? AND (nickname IS NULL) OR (nickname = ?)"
所以我的问题是:如何使用Java PreparedStatement使用MySQL“is null”选择一行?
这是SQL数据库的一个众所周知的限制。对于大多数数据库,您必须编写······其中字段为空
以测试字段
的空值。都不...字段=null
,或者...field=:param
,其中:param
是匹配空值的参数化查询的参数。
因此,唯一的解决方案是明确地编写字段为null
是您的查询。换句话说,您需要两个不同的查询,一个用于非空值(并且只有一个参数),另一个用于空值(并且有两个参数)。
statement = "SELECT * FROM my_table WHERE name = ? AND nickname = ?";
statement = "SELECT * FROM my_table WHERE name = ? AND nickname IS NULL";
您可以使用这个技巧(如JBNizet所解释的,小心括号)
statement = "SELECT * FROM my_table WHERE name = ? AND (nickname = ? OR nickname IS NULL)";
问题内容: 我正在尝试将SQL与Python中准备好的语句一起使用。Python对此没有自己的机制,因此我尝试直接使用SQL: 然后,在循环中: 在循环中,我得到: 这是怎么回事? 问题答案: 例如,在http://zetcode.com/db/mysqlpython/上解释了如何在Python中使用MySQL准备好的语句- 在该页面中查找。 在您的情况下,例如: 然后,将其放入循环中: 无需进一
我有一个搜索查询,它必须使用包含搜索搜索表中的一列。列上有CTXSYS.Context类型索引。当使用prepared语句在表中获取数据时,搜索查询不能处理像-、/、_等特殊字符。
问题内容: 我有一个包含多个搜索条件的搜索页面 员工姓名 员工ID 入职日期 部门 等等 用户可以提供一个或多个搜索条件。我需要查询数据库以获取搜索结果。 使用纯JDBC,有两种方法可以实现此目的。 通过附加用户提供的搜索条件来准备SQL查询。 例如: 使用 例如: 此答案说明,像上面的ex 1一样,可以修改ex2,如下所示 然后仔细地(牢记参数索引)将输入设置为准备好的语句。听起来这不是一个非常
问题内容: 这是我的Java JDBC代码(例如,经过修改和简化): 因为字符串中有圆括号,所以它不起作用。 如何在准备好的语句中转义括号? 编辑:根据我的回答(见下文),我确实提出了问题。 问题答案: 会回答自己-问题出在“〜”(波浪号)中。 经过详细阐述,有一个有趣的发现: 如果是SQL代码(请参见SQL代码中的“等号”): 无需转义。但是,如果这是SQL代码(请参见SQL代码中的“波浪号”标
问题内容: 我只是想知道是否有一种方法可以在MySQL中使用某种形式的预处理语句,这样就不必逃避所有输入,也不必将所有文件从MySQL切换到MySQLi。我真的不相信转义功能,因此,如果在常规MySQL中有任何可行的替代方法,那就太好了。 问题答案: 使用PDO(PHP数据对象)连接到MySQL数据库。此方法将确保所有数据库输入将始终被视为文本字符串,并且您将不必进行任何手动转义。 结合正确使用h
在连接池中为使用Prepared语句是否良好。(在我的例子中,我使用Tomcat JDBC连接池) 它是否增加了任何优势(加速),或者会增加维护准备好的语句和连接的开销,并使它们保持活动状态,或者跟踪是否关闭池连接,因为池连接是在内部维护的,并且它们会根据此处指定的不同设置关闭 我正在使用获取连接,数据库是MariaDB 在阅读各种帖子、文档和示例时,大多数都是使用或查询构建的。它是否指出对于