存储过程代码如下
delimiter//
create procedure test2(out b varchar(20))
begin
set b='CYL';
end//
delimiter;java代码如下
package SQL_Connection;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Types;
import java.util.Properties;public class Test {
public static void main(String[] args) {
Properties properties=new Properties();
try {
properties.load(new FileInputStream("SQL_Connection/database.properties"));
System.setProperty("jdbc.drivers", properties.getProperty("jdbc.drivers"));
Connection con=DriverManager.getConnection(properties.getProperty("jdbc.url"));
Statement stat=con.createStatement();
String sql="use test";
stat.execute(sql);
sql="{call test2(?)}";
CallableStatement callAble=con.prepareCall(sql);
callAble.registerOutParameter(1, Types.VARCHAR);
callAble.execute();
System.out.println(callAble.getString(1));
con.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}但我运行的时候总是会出如下SQLException: [MySQL][ODBC 3.51 Driver][mysqld-5.0.51b-community-nt]OUT or INOUT argument 1 for routine test.test2 is not a variable or NEW pseudo-variable in BEFORE trigger
at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.SQLExecute(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcPreparedStatement.execute(Unknown Source)
at SQL_Connection.Test.main(Test.java:29)
献上50分望高人解答
delimiter//
create procedure test2(out b varchar(20))
begin
set b='CYL';
end//
delimiter;java代码如下
package SQL_Connection;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Types;
import java.util.Properties;public class Test {
public static void main(String[] args) {
Properties properties=new Properties();
try {
properties.load(new FileInputStream("SQL_Connection/database.properties"));
System.setProperty("jdbc.drivers", properties.getProperty("jdbc.drivers"));
Connection con=DriverManager.getConnection(properties.getProperty("jdbc.url"));
Statement stat=con.createStatement();
String sql="use test";
stat.execute(sql);
sql="{call test2(?)}";
CallableStatement callAble=con.prepareCall(sql);
callAble.registerOutParameter(1, Types.VARCHAR);
callAble.execute();
System.out.println(callAble.getString(1));
con.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}但我运行的时候总是会出如下SQLException: [MySQL][ODBC 3.51 Driver][mysqld-5.0.51b-community-nt]OUT or INOUT argument 1 for routine test.test2 is not a variable or NEW pseudo-variable in BEFORE trigger
at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.SQLExecute(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcPreparedStatement.execute(Unknown Source)
at SQL_Connection.Test.main(Test.java:29)
献上50分望高人解答
callAble.registerOutParameter(1, Types.VARCHAR2)试一下
create procedure test2(out b varchar(20))
begin
set b='CYL';
end//
sql="{call test2(?)}"; //1
CallableStatement callAble=con.prepareCall(sql); //2
callAble.registerOutParameter(1, Types.VARCHAR); //3
......
你最好用debug看一下执行的时候错误出现在第几句.我猜测是会出现在第3句,因为参数里面的1在sql中没有跟他相匹配的。
是callAble.execute();这句错了。
但参数为什么没匹配我就想不通了。
改为outin吧,可出可入喵~~`
callAble.registerOutParameter(1, Types.VARCHAR);
不就是吗?
sql="{call test2(?)}";
callAble=con.prepareCall(sql);
callAble.registerOutParameter(1, Types.VARCHAR);
callAble.execute();
System.out.println(callAble.getString(1));这个代码测试没问题!
public class GenerateSampleData {
public void select() {
String sql="";
Connection con = null;
CallableStatement callAble=null;
try{
Class.forName("com.mysql.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/test";
con = DriverManager.getConnection(url, "abc", "abc");
sql="{call test2(?)}";
callAble=con.prepareCall(sql);
callAble.registerOutParameter(1, Types.VARCHAR);
callAble.execute();
System.out.println(callAble.getString(1));
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
try {
callAble.close();
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
GenerateSampleData g = new GenerateSampleData();
g.select(); }}测试正常,输出CYL
谢谢这位美女,我唯一与你不同的就是数据库驱动不同,我用的是"jdbc/odbc桥",你用的是mysql的"jdbc"驱动,可能是驱动的问题。我再观望下。