这个问题类似于:Mysql - Stored procedure OUT variable return null,遗憾的是他们的解决方案对我不起作用。
我有一个数据库,其中包含有关谁使用我的程序以及何时使用的数据,我正在尝试在MySql中创建一个存储过程来检索所有数据并将其发送到我的java servlet,在那里它将被处理。
这就是我目前的存储过程:
CREATE DEFINER=`root`@`localhost`
PROCEDURE `getTableData`(OUT time VARCHAR(45), OUT fName VARCHAR(45),
OUT lName VARCHAR(45), OUT rVar INT)
BEGIN
SELECT rqTime, name, lastName, requestVar FROM pdata.userlist;
END
以下是我用Java调用查询的方法:
CallableStatement stmt = null;
ResultSet rs = null;
String sqlQuery = "{call getTableData (?, ?, ?, ?)}";
stmt = conn.prepareCall(sqlQuery);
stmt.registerOutParameter(1, java.sql.Types.VARCHAR);
stmt.registerOutParameter(2, java.sql.Types.VARCHAR);
stmt.registerOutParameter(3, java.sql.Types.VARCHAR);
stmt.registerOutParameter(4, java.sql.Types.INTEGER);
stmt.execute();
当我尝试用Java调用此存储过程时(我尝试使用结果集和普通的getString()等),所有值都返回null。
我的桌面设计如下:
Request Time (millis), name, lastName, requestID
1402341252155, John, Doe, 11
非常感谢任何帮助。我觉得问题就在于存储过程本身,特别是我如何从表中选择变量并将它们分配给" out"参数。
谢谢!
答案 0 :(得分:0)
问题是您从未在过程中为out参数设置值。修复您的疑问:
SELECT
rqTime, name, lastName, requestVar
INTO
time, fName, lName, rVar
FROM pdata.userlist;
-- Probably you need a WHERE or another statement to make sure you only retrieve 1 row as result
-- Otherwise, this stored procedure will fail
此外,在Java方面,您应该注册out参数并直接从CallableStatement
检索结果,不要从ResultSet
检索它们。
答案 1 :(得分:-1)
public static List<MonhthyBranchWiseSalesPurchesesDTO> getMonBranWiseDetails(Connection con){
List<MonhthyBranchWiseSalesPurchesesDTO> monhthyBranchWiseSalesPurchesesDTOList = null;
ResultSet rset=null;
CallableStatement proc_stmt = null;
CachedRowSet cRowSet = null;
try{
MonhthyBranchWiseSalesPurchesesDTO objTarget = new MonhthyBranchWiseSalesPurchesesDTO();
System.out.println("okkkkhhhh");
proc_stmt = con.prepareCall("xremit.dbo.p_getBHDMBReport");
//p_getBHDMBReport
//proc_stmt = con.prepareCall("uaeexdw.dbo.DBA.p_getBHDMBReport");
rset = proc_stmt.executeQuery();
System.out.println("after ------");
cRowSet = new CachedRowSetImpl();
cRowSet.populate(rset);
System.out.println("lll");
monhthyBranchWiseSalesPurchesesDTOList = (List) ResultSetUtils.getCollection(objTarget, cRowSet);
}