将参数设置为PreparedStatement时出错

时间:2016-02-12 11:20:09

标签: java prepared-statement mssql-jdbc

我有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

2 个答案:

答案 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);