首先需要建立一个存储过程
存在user表
插入一条信息做测试
设建立存储过程getUserNameAndSexById()用于根据id查询user表的name和sex 代码如下
可能会因为存在多条执行语句出现1064错误
Mysql解释器一遇到;号时就结束,回车以后就执行了。但是现在并不希望Mysql这么做,因为存储过程中可能包含很多分号的语句,所以怎么办了,很简单Mysql给我们提供了delimiter关键字,delimiter作用就是把;分号替换成指定的符号,比如//或 。 当 再 出 现 / / 或 。当再出现//或 。当再出现//或时,Mysql解释器才会执行命令。
解决方案再开始加上delimiter // 结尾加上//即可
完整代码:
通过sql可以查看你数据库的存储过程 代码show procedure status;
接下来就是使用Java语言调用存储过程实现增删改查了
直接上模板代码
首先这里采用调取DBConnection类连接数据库的方法 可以避免以后重复写连接代码实属一劳永逸
DBConnercion.java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class DBConnection {
private static final String driverName="com.mysql.jdbc.Driver";
private static final String url="jdbc:mysql://localhost:3306/javaweb";
private static final String user="root";
private static final String password="123456";
private DBConnection() {
}static {
try {
Class.forName(driverName);
}catch(ClassNotFoundException e) {
e.printStackTrace();
}
}
//get获取数据库连接信息
public static Connection getConnection()throws SQLException{
return DriverManager.getConnection(url,user,password);
}
//关闭数据库连接
public static void close(ResultSet rs,Statement st,Connection conn) {
try {
if(rs!=null)
rs.close();
}catch(SQLException e) {
e.printStackTrace();
}finally {
try {
if(st!=null)
st.close();
}catch(SQLException e) {
e.printStackTrace();
}finally{
try{
if(conn!=null)
conn.close();
}catch(SQLException e) {
e.printStackTrace();
}
}
}
}
}
Main.java
import java.sql.*;
public class Test {
public static void main(String[] args) {
getNAmeSex();
}
public static void getNAmeSex() {
//三大连接基础
Connection conn=null;
CallableStatement cs=null;
ResultSet rs=null;
try {
//调用DBConnection获取数据库连接信息
conn=DBConnection.getConnection();
//定义调用存储过程的sql语句
String sql="{call getUserNameAndSexById(?,?,?)}";
//获取CAllablestatement对象
cs=conn.prepareCall(sql);
//设置传入存储过程的参数
cs.setInt(1, 1);//in的参数
cs.registerOutParameter(2, Types.VARCHAR);//out参数
cs.registerOutParameter(3, Types.VARCHAR);//out参数
//执行存储过程
cs.execute();
//获得返回值 两种方式
String name=cs.getString(2);//通过位置索引调用
String sex=cs.getString("userSex");//通过名字
System.out.print(name+"+"+sex);
}catch(Exception e) {
e.printStackTrace();
}
}
}
注意!
这样下来的返回值只能有一条,如果你的sql语句返回多个记录,会产生SQL错误
需要在mysql设置临时表存储