存储过程返回空

时间:2014-06-13 15:37:33

标签: java mysql stored-procedures jdbc resultset

这个问题类似于: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"参数。

谢谢!

2 个答案:

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


    }