从java中的mysql存储过程中获取参数
Posted
技术标签:
【中文标题】从java中的mysql存储过程中获取参数【英文标题】:getting out parameter from mysql stored procedure in java 【发布时间】:2013-03-11 10:42:55 【问题描述】:我在从 java 中的 mysql 存储过程中检索 OUT 参数时遇到问题。
CALL proc_after_topic_add('newtest',@result);
SELECT @result;
这个查询给了我想要的输出参数,但我将如何在 java 中检索它。我尝试使用 CallableStatement 但我得到了
java.sql.SQLException: Callable statments not supported.
错误。请大家帮帮我。 我试过关注
String sql = "CALL proc_after_topic_add(?,?);";
CallableStatement cstmt = conn.prepareCall(sql);
cstmt.setString(1, topicname);
cstmt.registerOutParameter(2, java.sql.Types.INTEGER);
ResultSet rs = cstmt.executeQuery();
if (rs.next())
if (rs.getInt(1) == 1)
res = 0;
else
res = -1;
我没有发布存储过程代码,因为它没有任何问题。
PS:I a using mysql 5.5.21 and yes i should probably mention i am using mysql connector 3.0.15
好的,这样就解决了。遇到同样问题的朋友,请下载最新版本的mysql连接器。
【问题讨论】:
【参考方案1】:这一行出错
cstmt.registerOutParameter(2, java.sql.Types.INTEGER);
这样改
String sql = "CALL proc_after_topic_add(?,?);";
cstmt.registerOutParameter(2, java.sql.Types.INTEGER);
【讨论】:
但我仍然收到 callable statement not supported 错误。是 mysql 连接器或 mysql 版本有问题。我正在使用 mysql 5.5.21 可以调试这段代码,并检查是否从Sql Procedure中抛出错误,我认为不会有任何版本相关的问题。但是请检查一下,即使您可以访问 Callable 语句,也会从 sql 过程中发出。能否请您发布Sql过程【参考方案2】:Create a schema test and create a table employee in schema with 2 columns.
id and employeename and insert some data.
Use this Stored Procedure.
DELIMITER $$
DROP PROCEDURE IF EXISTS `test`.`get_count_name1` $$
CREATE PROCEDURE `test`.`get_count_name1`(IN the_name VARCHAR(64),OUT
the_count INT)
BEGIN
SELECT COUNT(*) INTO the_count from employee where employeename=the_name;
END$$
DELIMITER ;
使用这个例子。 用户名和密码对我来说是 root 和 root。根据您的更改 要求。在这里,我正在计算 employeename="deepak"
的出现import java.sql.*;
public class JDBCExample
// JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost/test";
// Database credentials
static final String USER = "root";
static final String PASS = "root";
public static void main(String[] args)
Connection conn = null;
CallableStatement stmt = null;
try
//STEP 2: Register JDBC driver
Class.forName("com.mysql.jdbc.Driver");
//STEP 3: Open a connection
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL,USER,PASS);
//STEP 4: Execute a query
System.out.println("Creating statement...");
String sql = "call get_count_name1 (?, ?)";
stmt = conn.prepareCall(sql);
//Bind IN parameter first, then bind OUT parameter
String name = "Deepak";
stmt.setString(1, name); // This would set ID as 102
// Because second parameter is OUT so register it
stmt.registerOutParameter(2, java.sql.Types.INTEGER);
//Use execute method to run stored procedure.
System.out.println("Executing stored procedure..." );
stmt.execute();
int count=stmt.getInt(2);
System.out.println(count);
stmt.close();
conn.close();
catch(SQLException se)
//Handle errors for JDBC
se.printStackTrace();
catch(Exception e)
//Handle errors for Class.forName
e.printStackTrace();
finally
//finally block used to close resources
try
if(stmt!=null)
stmt.close();
catch(SQLException se2)
// nothing we can do
try
if(conn!=null)
conn.close();
catch(SQLException se)
se.printStackTrace();
//end finally try
//end try
System.out.println("Goodbye!");
//end main
//end JDBCExample
【讨论】:
以上是关于从java中的mysql存储过程中获取参数的主要内容,如果未能解决你的问题,请参考以下文章