关于java中的调用存储过程!

来源:互联网 发布:找个大数据培训机构 编辑:程序博客网 时间:2024/05/28 05:17

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();
 }

}