我有MSSQL程序:
my_proc
我从java获取数据
String sql = "exec my_proc '2016-01-01','2016-01-20','2016-01-01'";
stmt = connection.prepareStatement(sql);
rs = stmt.executeQuery();
并获得所有数据!
但如果我使用
String msisdn, String startDate, String endDate
String sql = "exec my_proc ?,?,?";
stmt = connection.prepareStatement(sql);
stmt.setString(1, msisdn);
stmt.setString(2, startDate);
stmt.setString(3, endDate);
rs = stmt.executeQuery();
我收到错误:
com.microsoft.sqlserver.jdbc.SQLServerException: Error converting data type varchar to datetime.
在程序中我有变量:
@Startdtin datetime,
@Enddtin datetime,
@msisdnin varchar(18)
我尝试过使用
stmt.setTimestamp(2, startDate); //startDate - convert to Timestamp
和
stmt.setDate(2, startDate); //startDate - convert to Date (sql and util)
没有帮助。如何正确地将日期传递给PreparedStatement
?
答案 0 :(得分:0)
startDate
类型为String
。因此,将其转换为Date
类型。
java.util.Date myDate = new java.util.Date(startDate);
java.sql.Date sqlDate = new java.sql.Date(myDate.getTime());
-------------------------------
stmt.setDate(5, sqlDate);
使用CallableStatement
执行程序。
答案 1 :(得分:0)
更正数据格式后,您必须更改代码。
要执行某个程序,您需要使用CallableStatement
,而不是PreparedStatement
。
如果您的日期是字符串格式,请先使用SimpleDateFormat将其转换为日期。
比在callableStatement上简单地设置为Date。
String dateString = ...;
Date date = ...;
myCallableStatement.setDate(1, date);