心得8--JDBC回顾-存储过程与设置主键分析
一: 存储过程
1. mysql 命令回顾:
创建存储过程代码(纯岁的插入):
delimiter @@ //占位符,为了不让程序默认认为是‘;’结束
create procedure mypro(过程名)(in unamevarchar,in upassword char)
begin
insert into (name,password)values(uname,upassword);
//mysql语句,这里与其他地方mysql增删改查的语句一样,比如插入时如果不是全部字段则要显示(name,password);
end @@
delimiter ;//设置回来mysql系统默认的结束符
访问存储过程:
Call mypro1(‘杨凯’,‘123456’);
创建存储过程代码(输出)
delimiter @@
create procedure mypro1(过程名)(in uid int,outstr char)
begin
select name into str fromusers where id=uid;
//这里要特别注意一下into str语句,这里是把select输出的语句暂存在str变量中
end @@
delimiter ;
访问存储过程:
Callmypro1(1,@per); //这里的@per代表用个临时变量per存放输出的东西
Select @per; // 在cmd窗口显示要输出的内容
2. JDBC访问存储过程案例分析:
JDBC创建存储过程代码(纯岁的插入):
packagecom.code;
importjava.sql.CallableStatement;
importjava.sql.Connection;
importjava.sql.SQLException;
importjava.sql.Types;
importcom.Db.DbManager;
publicclass Demo4 {
public void insert(){
Connection con =DbManager.getConnection();
CallableStatement cs = null;
try {
cs = con.prepareCall("{call mypro(?,?)}");//记住这种特殊的格式,外面引号然后花括号,里面是语句
cs.setString(1,"gnb");
cs.setString(2,"gnb");
cs.execute();
System.out.println("成功了");
} catch (SQLException e) {
e.printStackTrace();
}finally{
DbManager.closeDB(con, cs, null);
}
}
JDBC创建存储过程代码(输出)
public void outs(){
Connection con =DbManager.getConnection();
CallableStatement cs = null;
try {
cs = con.prepareCall("{callmypro1(?,?)}");
cs.setString(1,"2");
cs.registerOutParameter(2,Types.CHAR);// 设置输出类型是char型的
cs.execute();
System.out.println(cs.getString(2));
} catch (SQLException e) {
e.printStackTrace();
}finally{
DbManager.closeDB(con, cs, null);
}
}
public static void main(String[] args){
Demo4 d = new Demo4();
d.outs();
}
}
二: 设置主键
你可能认为这个用途不大,但是仔细想来,当一个表的主键是另一个表的外键的时候,是不是就要用到这个小知识了啊!好,闲话少说马上进入正题,一个案例分析来解说
packagecom.code;
importjava.sql.Connection;
importjava.sql.PreparedStatement;
importjava.sql.ResultSet;
importjava.sql.SQLException;
importjava.sql.Statement;
importcom.Db.DbManager;
publicclass Demo6 {
publicstaticvoid main(String[] args) {
Demo6 d = new Demo6();
d.insert();
}
publicvoid insert(){
Connection con = DbManager.getConnection();
PreparedStatement st = null;
ResultSet rs = null;
try {
String sql = "insertinto users(name,password,email) values(?,?,?)";
st =con.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS); //创建对象,创建主键
st.setString(1,"呵呵呵");
st.setString(2,"5456");
st.setString(3,"asdf");
st.executeUpdate();
rs = st.getGeneratedKeys(); // 获取插入行的主键
if(rs.next()){
System.out.println(rs.getObject(1)); //获取第一列的内容,因为上一步获得主键的结果集只有一列所以获取第一列的长度就可以了
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
DbManager.closeDB(con, st, rs);
}
}
}