jdbc如何创建存储过程

现在采用的方式如下:
[code="java"]
Connection conn = DBCenter.getConnection();
String sql="CREATE OR REPLACE PROCEDURE P_1() AS BEGIN select * from dual; END P_1; ";
Statement stmt = null;
stmt = conn.createStatement();
stmt.execute(sql);
[/code]

执行成功了。数据库中也存在对的P_1对象

但是这个对象是无效的,根本无法使用。。。。

请教各位达人,如何通过java来创建一个有效的存储过程?

//创建存储过程,记住关闭对象

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class UseSQLDataBase3 {
Connection con;
Statement state;
ResultSet rs;
CallableStatement cs;//调用存储过程使用的接口
String url = "jdbc:microsoft:sqlserver://localhost:1433; DatabaseName=test";
String user = "sa";
String password = "";
public void connectSQL(){

try {
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
} catch (ClassNotFoundException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}

try {
con = DriverManager.getConnection(url, user, password);
state = con.createStatement();

//创建存储过程SQL语句
String createProcedure = " create procedure SHOW_SUPPLIERS " +
  "as "+
  " select SUPPLIERS.SUP_NAME,COFFEES.COF_NAME "+
  "from suppliers,coffees"+
  "where suppliers.sup_id = coffees.sup_id "+
  "order by sup_name";
//创建存储过程
state.executeUpdate("USE TEST");
state.executeUpdate(createProcedure);

//调用存储过程
cs = con.prepareCall("{call SHOW_SUPPLIERS}");//创建一个 CallableStatement 对象来调用数据库存储过程
//返回调用的结果集
rs = cs.executeQuery();

//输出结果
System.out.println("SUPPLIERS.SUP_NAME            COFFEES.COF_NAME");
while(rs.next()){
 String sup_name = rs.getString(1);
 String coffees_name = rs.getString(2);
 System.out.println(sup_name + "      " + coffees_name);
}
con.close();
state.close();   

} catch (SQLException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}

}

使用这句就能获取到存储过程的对象,再用executeUpdate执行
[code="java"]
PreparedStatement pstmt = conn.prepareCall(sql);
pstmt.executeUpdate();
[/code]