package test;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import org.apache.log4j.Logger;
import sun.util.logging.resources.logging;
import com.util.*;
public class TestCall {
/**
* @param args
*/
private static final Logger LOG = Logger.getLogger(TestCall.class);
// 测试存储过程,参见同包中的sql.sql
public void testCall() {
Connection conn = Database.getConnection();
CallableStatement cs = null;
ResultSet rs = null;
// 方式一
// String sql ="{?=call test_p('tom','tom',?)}";
// String sql = "{call test_p('tom','tom',?)}";//有输出参数时
// 方式二
// String sql = "{call test_p 'tom','tom',?}";
// String sql = "{call test_p ?,'tom',?}"; //错误,?是第一个参数时要加上小括号。
String sql = "{call test_p (?,'tom',?)}";//ms sql
//String sql = "{call test_p (?,?)}";// mysql
try {
cs = conn.prepareCall(sql);
// ms sql
// jdbc没有<实现>setString(String,String);,只有setString(int,String)
cs.setString(1, "tom");//ms sql server & mysql
//cs.setString("p1", "tom");// mysql
// 注册输出参数 the first parameter is 1
cs.registerOutParameter(2, Types.VARCHAR);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
rs = cs.executeQuery();
while (rs.next()) {
System.out.println(rs.getString("name"));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if (cs.getMoreResults()) {
rs = cs.getResultSet();
while (rs.next()) {
System.out.println(rs.getString("name"));
}
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// dbms可能有限制,先检索返回值,再检索输出参数
try {
String out = cs.getString(2);
System.out.println("存储过程的输出参数:" + out);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static synchronized void test() {
// java.lang.reflect.Modifier
}
public static void main(String[] args) {
LOG.info(5 / 2);
LOG.error("error");
LOG.warn("warn");
LOG.info("info");
LOG.fatal("fatal");
new TestCall().testCall();
}
}