2016-11-10 121 views
0

我访问一个存储过程具有一个参数的SQL服务器上,我可以很容易地在SQL客户端上运行如下:调用MSSQL存储过程中的Java

exec sp_name "2016/11/01" 

现在我想做的事在java中同样的事情。

PreparedStatement ps = conn.prepareStatement("sp_name ?"); 
ps.setString(1, "2016/11/01"); 
ResultSet rs = ps.executeQuery(); 

rs我可以看到列的名称,但返回零行。我想这是因为存储过程的参数。我在这里错过了什么吗?

+0

什么是一个参数的类型?无论如何,我会建议你使用[CallableStatement](https://docs.oracle.com/javase/7/docs/api/java/sql/CallableStatement.html)。此外,问题可能出现在SP本身...... PS:更好地使用ISO格式化日期格式,在SQL Server调用中使用格式“YYYYMMDD”或“YYYY-MM-DD”。 –

+0

嗯,我不知道这个类型,因为我没有访问SP的来源。 –

+0

也许尝试使用'(java.sql。)date'参数? –

回答

0

下面是最终的工作代码:

String date= "2016/11/01" 
String queryString "exec sp_dmp_pub_status ?"; 
PreparedStatement ps = conn.prepareStatement(queryString);   
SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd"); 
Date parsed = format.parse(date); 
java.sql.Date sqlDate = new java.sql.Date(parsed.getTime()); 
ps.setDate(1, sqlDate);   
ResultSet rs = ps.executeQuery();