ResultSet 为空,尽管 sql 查询正常但事件
Posted
技术标签:
【中文标题】ResultSet 为空,尽管 sql 查询正常但事件【英文标题】:ResultSet is empty, event though the sql query is ok 【发布时间】:2016-05-28 10:55:46 【问题描述】:我有以下存储过程:
ALTER PROCEDURE Uspinformation3 (@TypeNr VARCHAR(50),
@Process VARCHAR(50),
@StartDate VARCHAR(50),
@EndDate VARCHAR(50))
AS
BEGIN try
SET dateformat dmy;
SELECT Count(rownr)
FROM diff_ct
WHERE type_number = @TypeNr
AND process = @Process
AND full_time_stamp BETWEEN @StartDate AND @EndDate
END try
如果我从 SQL Server 执行过程,它会给我想要的答案
EXEC uspInformation3 1137328582, 427,
ts '2015-05-24 12:00:00', ts ' 2015-05-24 16:00:00 '
但是,当我尝试从 Java 中执行此操作时,结果集始终为空。我在哪里做错了?我想这与我使用的数据类型有关?
try
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
Connection conn = DriverManager.getConnection(DB_Connection);
String partno = pn.getText();
String processname = procname.getText();
// String StartTime = DataStart.getText();
String StartTime = "ts " +"'"+ DataStart.getText() +"'";
String EndTime = "ts " +"'"+ DataFinal.getText()+"'";
System.out.println(StartTime);
Statement state = conn.createStatement();
CallableStatement cs = null;
cs = conn.prepareCall("call uspInformation3(?,?,?,?)");
cs.setString(1, partno);
cs.setString(2, processname);
cs.setString(3, StartTime);
cs.setString(4, EndTime);
cs.executeQuery();
ResultSet rs = cs.getResultSet();
System.out.println(rs);
if(rs.next())
String totalct = rs.getString(1);
System.out.println(totalct);
totalctno.setText(totalct);
【问题讨论】:
Full_Time_Stamp 列的类型是什么?为什么使用 StartDate & EndDate 作为 varchar 而不是 Date/Timestamp? Full_Time_Stamp 是一个日期时间。我将它们用作 varchar,因为从 java 中,我无法将它们作为日期时间值发送。 SQL Server 的日期时间映射到 java.sql.Timestamp。在此处查找可能的映射:msdn.microsoft.com/en-us/library/ms378878.aspx 感谢您的帮助 :) 在我将其设置为时间戳后,我能够解决它 你也应该学会正确地缩进你的代码。让阅读你的代码更容易。 【参考方案1】:您是否尝试将参数作为字符串发送?或者把参数类型改成datetime
第二次约会时也有多余的空间。
EXEC uspInformation3 1137328582, 427,
'2015-05-24 12:00:00', '2015-05-24 16:00:00';
【讨论】:
是的。如果我将其用作字符串,则会出现以下错误:将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。因为 Full_Time_Stamp 有一个 datetime 类型。 也许可以试试这个方法***.com/questions/6113674/…这里使用prepareStatement而不是prepare call 感谢您的帮助。我把参数改成时间戳后解决了。以上是关于ResultSet 为空,尽管 sql 查询正常但事件的主要内容,如果未能解决你的问题,请参考以下文章