MySql储存过程中传参和不传参以及java中调用代码
程序员文章站
2022-04-06 23:29:58
...
数据库表结构
1.mysql不传参写存储过程
create procedure product() -- product为存储过程名称
begin
select * from book;
end
调用此存储过程为
CALL product
2.有传参的存储过程
CREATE PROCEDURE updateInfo(
in b_new_name VARCHAR(100), -- 传入的字段类型为VARCHAR
in b_id BIGINT(20),
out b_result_name VARCHAR(100) -- 返回的字段类型为VARCHAR
)
BEGIN
UPDATE book t SET t.NAME= b_new_name WHERE t.book_id= b_id;
SELECT b.`name` from book b WHERE b.book_id=b_id INTO b_result_name; -- into到传入参数只有才可以在外部拿到值
End
3.使用java程序调带参数和不带参数的存储过程
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.*;
public class Main {
public static void main(String[] args) {
// selectDateFromMysql(conn()); //连接数据库
//unParamCall(); //执行无参存储过程
paramCall(); //执行有参数存储过程
}
/**
* 执行有参数存储过程
*/
private static void paramCall() {
Connection con = null;
CallableStatement csm = null;
ResultSet res = null;
try {
//创建一个一个数据库连接
con = conn();
//执行存储过程
csm = con.prepareCall("{ call updateInfo(?,?,?)}"); //传入参数和输出参数通配符,一种有三个参数
csm.setString(1, "语文"); //第一个参数为 字符串类型 语文
csm.setInt(2,2); //第二个参数为整型,Index 为2
csm.registerOutParameter(3,Types.VARCHAR); //第三个参数为输出结果,为数据库表中列的类型,即数据库的类型,Types类中有所有数据库的常见类型
csm.execute();
System.out.println(csm.getString(3)); //输入执行的第三个参数,为结果参数,打印出来
csm.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 执行无参储存过程
*/
private static void unParamCall() {
Connection con = null;
CallableStatement csm = null;
ResultSet res = null;
Book b = new Book();
try {
//创建一个一个数据库连接
con = conn();
//执行存储过程
csm = con.prepareCall("{ call product()}"); //存储过程和查数据区别在这里
res = csm.executeQuery();
while (res.next()) {
b.setId(res.getInt(1));
b.setName(res.getString("name"));
b.setNumber(res.getInt(3));
b.setDetail(res.getString(4));
System.out.println(b.toString());
}
res.close();
csm.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
}
}
/**
* 执行数据库连接和简单查询
*/
private void selectDateFromMysql(Connection con) {
Statement stm = null;
String sql = null;
ResultSet res = null;
Book b = new Book();
try {
stm = con.createStatement();
sql = "select * from book";
res = stm.executeQuery(sql);
while (res.next()) {
int id = res.getInt("book_id");
b.setId(id);
String name2 = res.getString("name");
b.setName(name2);
int number = res.getInt(3);
b.setNumber(number);
String detail = res.getString(4);
b.setDetail(detail);
System.out.println(b.toString());
}
res.close();
stm.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 建一个数据库连接
*
* @return
*/
private static Connection conn() {
String sql = null;
String name = "root";
String pass = "123456";
String url = "jdbc:mysql://127.0.0.1:3306/ssm?useUnicode=true&characterEncoding=utf8";
Connection con = null;
try {
System.out.println("开始进行登陆操作*************");
con = DriverManager.getConnection(url, name, pass);
} catch (Exception e) {
e.printStackTrace();
}
return con;
}
}
上一篇: 局域网IP电话的QoS策略