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一样