从java中的mysql存储过程中获取参数
问题描述:
我在从java中的mysql存储过程中检索OUT参数时出现问题。从java中的mysql存储过程中获取参数
CALL proc_after_topic_add('newtest',@result);
SELECT @result;
此查询给了我想要的输出参数,但如何将我找回它在java.I使用CallableStatement的尝试,但我得到
java.sql.SQLException: Callable statments not supported.
error.Please人帮助我。 我曾尝试以下
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
好吧,这是任何人都solved.For遇到谁了同样的问题,只要下载最新版本的MySQL连接器。
答
错误在这行
cstmt.registerOutParameter(2, java.sql.Types.INTEGER);
改变这样
String sql = "CALL proc_after_topic_add(?,?);";
cstmt.registerOutParameter(2, java.sql.Types.INTEGER);
答
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 ;
使用这个例子。 用户名和密码是我的根和根。根据您的要求更改
。在这里,我就指望employeename =“迪派”
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
的发生,但我仍然得到调用语句不支持error.Is这问题,MySQL连接或MySQL version.i上午uing MySQL的21年5月5日 – ntstha 2013-03-11 10:54:18
Canu酒店调试这段代码,并检查是否错误抛出Sql过程,我不认为不会有任何与版本相关的问题。但请检查一下,即使你可以访问Callable语句,然后从sql过程中发出问题。你可以请张贴Sql程序 – 2013-03-11 10:59:00