当前位置: 首页 > 知识库问答 >
问题:

准备声明

赵元白
2023-03-14

我正在使用PreparedStatement的setString方法来设置sql查询中开始日期和结束日期的值。

String sql = "..... " AND tableA.time BETWEEN ? " +
                    " AND ?";

PreparedStatement st = conn.prepareStatement(sql);
st.setString(1, startDate);
st.setString(2, endDate);

但是这些值没有被设置。我知道通常有一个等号:“tableA.member_id = ?" "

当我在sql语句中使用“Between”运算符时,如何调用setString方法?希望有人能提出建议。非常感谢。

共有3个答案

陆高峰
2023-03-14

BETWEEN期望其参数具有与正在测试的列兼容的类型。为日期列提供字符串参数将不起作用。

您可以向SQL中添加一个函数,以便将字符串转换为日期(我不知道您使用的是什么数据库,本例使用Oracle的to\u date函数):

from tableA.time BETWEEN to_date(?, 'yyyy/mm/dd') AND to_date(?, 'yyyy/mm/dd')

或者,您可以不使用SQL,而是在PreparedStatement上使用setDate,例如:

setDate(1, new SimpleDateFormat("yyyy/MM/dd").parse(startDate));

第二种方法更常见,它的优点是不必向SQL中添加日期转换函数(可能是非标准的)。

但你必须在一边或另一边进行转换。数据库的SQL解析器不会为您转换它。如果数据库负责转换,并且存在错误,它可能会悄悄地引入数据错误,那么更不容易出错的替代方法是让应用程序开发人员告诉数据库应该如何转换日期字符串。

马承
2023-03-14

使用setDate。

您的开始日期和结束日期是java吗。util。日期对象?

如果是,您可以使用此代码

st.setDate(1, new java.sql.Date(startDate.getTime()));
st.setDate(2, new java.sql.Date(endDate.getTime()));

如果不是。转换第一个ro java。util。日期对象。

巫马俊力
2023-03-14

看见http://docs.oracle.com/cd/B28359_01/server.111/b28286/conditions011.htm

“BETWEEN”可以与datetime数据类型一起使用。然而,如果表A。时间是某种类型的日期时间字段(时间戳等),使用st.setString(…)行不通。您需要使用setDate(dt)或setTimestamp(ts)。有关更多信息,请参阅在PreparedStatement中使用setDate。

 类似资料:
  • 我(试图)将我的查询从未准备好的语句移到MySQLi准备好的语句。到目前为止,我所学到的应该在下面的模式中发生: 编辑:如果我在准备语句后print_r,我将得到: 如果我在bind_param后面print_r得到的语句: 如果我在执行语句后print_r,我会得到: 但是我如何循环计算结果呢? 这似乎不起作用:-/

  • 问题内容: 何时使用语句而不是准备语句。我想在没有参数的查询中使用语句,但是为什么不使用预处理语句呢?对于没有参数的查询,哪一个更快。 问题答案: 我想在没有参数的查询中使用语句,但是为什么不使用预处理语句呢? 还差得远 对于返回结果集或更新计数的INSERT,UPDATE和DELETE语句,使用PreparedStatement。正如Joachim所指出的,它们不适用于DDL语句,也不适用于应使

  • 我用的是c3p0。我建立了一个池,如下所示, 我有一个对象,准备初始化的几个准备好的语句。为了做到这一点,我从PooledDataSource中抓取一个连接(),然后准备一个语句(例如,)。准备好的语句作为私有变量存储在对象中,当前连接在初始化结束时关闭()。准备好的语句用于对象的方法中。 对于更新数据库的准备好的语句,这很好。但是,当我调用一个使用预处理语句()来查询数据库的方法时,我会得到以下

  • 我们可以在使用Java的PreparedStatement中使用OR子句吗?

  • 我有一个网站,点击量很大。我遇到过一些问题,包括JDBC连接错误。 我对结束PreparedStatement有点困惑。我需要关闭PreparedStatement吗?还是只需要关闭语句就足够了? 另外,呢?我也需要关闭它吗?

  • 本书大部分篇幅会用来关注MongoDB的核心功能。所以我们基本上使用的是MongoDB的外壳(shell)。shell在学习MongoDB还有管理数据库的时候很有用,不过您的实际代码还是会用相应的语言来驱动mongoDB的。 这也引出了关于MongoDB您首先需要了解的东西:它的驱动。MongoDB有许多针对不同语言的官方驱动。可以认为这些驱动和您所熟知的各种数据库驱动是一样的。基于这些驱动,Mo