六、JDBC——CallableStatement

来源:互联网 发布:python simyou 编辑:程序博客网 时间:2024/06/04 10:48

    • CallableStatement
      • 一查询
          • 1创建Test5java
          • 2DBUtiljava
      • 二输入添加
          • 1创建Test5java
          • 2DBUtiljava
      • 三既有输入又有输出
          • 1创建Test5java
          • 2DBUtiljava

CallableStatement

CallableStatement继承PreparedStatement,提供了调用存储过程的能力

使用:

  • 调用简单的存储过程
  • 调用有输入参数的存储过程
  • 调用有输入、输出参数的存储过程

一、查询

调用mysql的命令行输入:

 create procedure all_c() select *from c

————其中 create procedure是创建存储。创建查询存储

1、创建Test5.java
package com;import java.io.Closeable;import java.sql.ResultSet;import java.sql.SQLException;import com.mysql.jdbc.CallableStatement;import com.mysql.jdbc.Connection;public class Test5 {    static void test1(){        Connection conn=DBUtil.open();        CallableStatement cSta=null;        try {        //通过CallableStatement,调用数据库存储            cSta=(CallableStatement) conn.prepareCall("{call all_c}");        ResultSet rSet=cSta.executeQuery();        while (rSet.next()) {            int id=rSet.getInt(1);            String name=rSet.getString(2);            String email=rSet.getString(3);            System.out.println(id+","+name+","+ email);        }        } catch (SQLException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        finally{            DBUtil.close(null, null, conn);        }    }    public static void main(String[] args) {        test1();    }}
2、DBUtil.java
package com;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.Reader;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.util.Properties;import com.mysql.jdbc.Connection;import com.mysql.jdbc.PreparedStatement;public class DBUtil {    //定义成不可修改的    private static String driver;    private static String url;    private static String username;    private static String password;    //把值都按要求填入    static {        Properties p=new Properties();        Reader reader;        try {            reader = new FileReader("src//config.properties");            p.load(reader);        } catch (Exception e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        driver="com.mysql.jdbc.Driver";        url="jdbc:mysql://localhost:3306/cxg2850105498";        username="root";        password="cxg200888";    }    //打开数据库    public static Connection open() {        try {            //注册加载驱动            Class.forName(driver);            //链接数据库            return (Connection) DriverManager.getConnection(url,username,password);        } catch (Exception e) {            e.printStackTrace();        }        return null;    }    //关闭数据库    public static void close(ResultSet rSet,PreparedStatement pSta,Connection conn) {        if(conn!=null)        {            try {                conn.close();            } catch (SQLException e) {                e.printStackTrace();            }        }        if(rSet!=null){            try {                rSet.close();            } catch (SQLException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }        }        if(pSta!=null){            try {                pSta.close();            } catch (SQLException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }        }    }}

二、输入添加

调用mysql的命令行输入:

create procedure insert_c ( in myname  varchar(20) , in  myemail  varchar(20) ) insert  into c(name,email)values(myname,myemail)

————其中 create procedure是创建存储。创建插入存储,其中“in”表示输入,“out”表示输出

1、创建Test5.java
package com;import java.io.Closeable;import java.sql.ResultSet;import java.sql.SQLException;import com.mysql.jdbc.CallableStatement;import com.mysql.jdbc.Connection;public class Test5 {    static void test2(){        Connection conn=DBUtil.open();        try {        //调用存储语句  "?"  为要输入的值            CallableStatement cSta=(CallableStatement) conn.prepareCall("{call insert_c(?,?)}");            cSta.setString(1, "13090302");            cSta.setString(2, "1999@gmail.com");            cSta.executeUpdate();           } catch (SQLException e) {            e.printStackTrace();        }finally{            DBUtil.close(null, null, conn);        }    }       public static void main(String[] args) {        test2();    }}
2、DBUtil.java

同上DBUtil.java一样

三、既有输入又有输出

调用mysql的命令行输入:

create procedure getnamebyid(in cid int ,out return_name varchar(20))select name into return_name from c where id=cid;

————其中 create procedure是创建存储。创建插入存储,其中“in”表示输入,“out”表示输出。

1、创建Test5.java
package com;import java.io.Closeable;import java.sql.ResultSet;import java.sql.SQLException;import javassist.bytecode.analysis.Type;import com.mysql.jdbc.CallableStatement;import com.mysql.jdbc.Connection;public class Test5 {    static void test3(){        Connection conn=DBUtil.open();        try {        //getnamebyid(输入,输出)            CallableStatement cSta=(CallableStatement)conn.prepareCall("{call getnamebyid(?,?)}");            cSta.setInt(1, 2);            //注册输出            cSta.registerOutParameter(2,0);            //执行语句            cSta.execute();            String name=cSta.getString(2);            cSta.execute();            System.out.println(name);        } catch (SQLException e) {            e.printStackTrace();        }        finally{            DBUtil.close(null, null, conn);        }    }    public static void main(String[] args) {        test3();    }}
2、DBUtil.java

同上DBUtil.java一样