心得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);

      }

  

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值