Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么语句在java、jdbc和oracle中工作但不准备语句?_Java_Oracle_Jdbc - Fatal编程技术网

为什么语句在java、jdbc和oracle中工作但不准备语句?

为什么语句在java、jdbc和oracle中工作但不准备语句?,java,oracle,jdbc,Java,Oracle,Jdbc,我正在尝试使用java和jdbc编写一个查询并从oracle db获得结果。我的问题是,如果我尝试使用语句,相同的查询会工作,但如果我使用preparedStatement,相同的查询不会工作。 语句代码:(这里我得到了实际的计数值) PreparedStatement代码:(这里我得到的计数值为零) 当我把sqlDate打印出来时,比如:2015-09-24 我在其他一些问题上也有同样的问题。 有人知道这里出了什么问题吗?该函数将字符串转换为给定格式的日期。因此,传递给prepared语句的参

我正在尝试使用java和jdbc编写一个查询并从oracle db获得结果。我的问题是,如果我尝试使用语句,相同的查询会工作,但如果我使用preparedStatement,相同的查询不会工作。 语句代码:(这里我得到了实际的计数值)

PreparedStatement代码:(这里我得到的计数值为零)

当我把sqlDate打印出来时,比如:2015-09-24

我在其他一些问题上也有同样的问题。 有人知道这里出了什么问题吗?

该函数将字符串转换为给定格式的日期。因此,传递给prepared语句的参数应该是要由Oracle函数转换的
字符串

pstmt.setString(1, sqlDate.toString());
或者您可以更改查询,使参数为日期本身,并将
java.sql.date
对象传递给准备好的语句:

sqlString = "SELECT COUNT(*) CNT FROM DB.TABLE WHERE DAY = ?";
pstmt.setDate(1, sqlDate());
请注意,对于普通语句查询:

String sql = "SELECT COUNT(*) CNT FROM DB.TABLE WHERE DAY = TO_DATE('" + sqlDate + "','YYYY-MM-DD')";
字符串连接将附加对象的字符串表示形式,即它等效于:

String sql = "SELECT COUNT(*) CNT FROM DB.TABLE WHERE DAY = TO_DATE('" + sqlDate.toString() + "','YYYY-MM-DD')";

为什么在执行查询后要分配
sqlString
?我没有分配它,我只是想告诉您我的sqlString值是多少。I@sstan编辑了我的问题,谢谢,因为您应该只使用
java.sql.Date
!您认为这对???@TheGuest来说是什么?因为当您执行串联查询时,所有变量都转换为
字符串
,您的
to_DATE
函数然后在数据库端将其转换回
日期
。当您使用
PreparedStatement
时,您传递键入的数据,即您将
sqlDate
作为
DATE
传递,因此您不再需要转换。我说的是双赢。谢谢你的回复。我的sqlDate不是字符串,它也是java.sql.Date和DAY类型date@TheGuest
sqlDate.toString()。请参阅第二个更好的解决方案。
String sql = "SELECT COUNT(*) CNT FROM DB.TABLE WHERE DAY = TO_DATE('" + sqlDate + "','YYYY-MM-DD')";
String sql = "SELECT COUNT(*) CNT FROM DB.TABLE WHERE DAY = TO_DATE('" + sqlDate.toString() + "','YYYY-MM-DD')";