例子中用到的表t123及存储过程test_proc的创建见博文:
http://my.oschina.net/u/2245781/blog/646323
package www.zjptcc.wxw.jdbctest.syb;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Types;
public class TestSp1 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成的方法存根
try {
Class.forName("com.sybase.jdbc4.jdbc.SybDriver").newInstance();
String url = "jdbc:sybase:Tds:localhost:5000/testdb";// 数据库名
Connection conn = DriverManager.getConnection(url, "mymotif","wxwpxh");
/* test_proc(@id_min int, @num_t123 int output))是将表t123中的id字段中大于等于第一个参数@id_min
的数目统计好,放到第二个参数@num_t123(输出参数) */
String procedure = "{ call test_proc(?, ?)}";
CallableStatement statement = conn.prepareCall(procedure);
//通过 setXXX 方法将IN参数传给@id_min,其中第一个1是参数的索引值,第二个1是传给@id_min的值
statement.setInt(1, 1);
//registerOutParameter注册输出参数@num_t123,输出参数的索引值是2
//参数的索引值是根据占位符?出现的次序从左到右由1开始计,不管其是输入还是输出参数
statement.registerOutParameter(2,Types.INTEGER);
statement.execute();
//打印输出参数@num_t123的值
System.out.print(statement.getInt(2));
conn.close();
} catch (SQLException sqe) {
System.out.println("Unexpected exception : " + sqe.toString()
+ ", sqlstate = " + sqe.getSQLState());
System.exit(1);
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}