第二十五天:总结

1.JDBC执行存储过程
  1)MySQL
  2)Oracle
 
  得到CallableStatement,调用存储过程
  CallableStatement cs = conn.prepareCall(...)
  设置参数,注册返回值,得到输出
  cs.registerOutParameter(...);
  cs.execute();
  cs.getXXX(...);
  Types定义用于标识一般 SQL 类型(称为 JDBC 类型)的常量的类。
 
  Connection ----> Statement, PreparedStatement, CallableStatement ---> ResultSet
 
 
2.获得数据库自动生成主键 
  1)MySQL
  2)Oracle
 
  ps = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
  试验:insert以外的
 
 
3.结果集ResultSet
  next, previous, absolute(...), beforeFirst(), afterLast()
  注意:利用结果集的滚动实现分页时,由于需要把表中所有数据先拿到resultset中,
  数据量大时对内存的消耗太多,因此不推荐采用此种方案。
 

4.数据库分页
  1)MySQL中:
  select * from table limit M,N;
  M:记录开始索引位置
  N:取多少记录
 
  2)Oracle中:
  select * from (
                                  select rownum r_, row_.* from (
                                                                                                  select * from student order by id
                                                                                              ) row_  where rownum<=5
                              )where r_>=0;
    
   
    
                                
  0位置:起始索引位置。
    5位置:结束索引位置。
   
   
5.批处理                                 
    st.addBatch(sql)不同sql语句
    ps.addBatch()   相同sql语句,参数不同
    executeBatch()
    clearBatch() 
   
    想MySQL和Oracle中分别插入数量很到的记录,对比时间 
    批处理插入数据的时候,要适当分批,
       不用全部作为一批,那样数据库受不了
      
    改变JVM的内存默认值64M:java --->  -xmxn
   
   
6.LOB(Large Objects)大对象:二进制数据和文本数据
  Clob 和 Blob
 
  1)MySQL
  Text和Blob(longblob)
  ps.setCharacterStream(index, reader, length);
  reader = rs.getCharacterStream(i);
  reader = rs.getClob(i).getCharacterStream();
  string = rs.getString(i);  //不好,一次性将数据拿到内存
 
  ps.setBinaryStream(i, is, length)
  is = rs.getBinaryStream(i);
  is = rs.getBlob(i).getBinaryStream();
 
  2)Oracle     
  Oracle中定义了blob字段,但不能用它存放真正的二进制数据,
    只能向这个字段存放一个指针,然后把数据放到指针所指向的Oracle的lob
    因而在操作Oracle的Blob之前,必须获得指针(定位器)才能进行Blob数据的读取和写入
   
    empty_blob()  empty_clob()
   
    步骤:
    1、插入空blob insert into test(id,image) values(?,empty_blob());
        2、获得blob的cursor select image from test where id= ? for update; 注意:  须加for update,锁定该行,直至该行被修改完毕,保证不产生并发冲突。
        3、利用 io,和获取到的cursor往数据库读写数据
        注意:以上操作需开启事务。
       

7.使用JDBC操作多个实体
  部门和员工(一对多)
  部门 : 有多个员工
    员工 :  属于一个部门
   
    在面向对象中:对称的 你有我 我有你
    在关系型数据库中:不对称的,在数据库中,两个表之间的关系是通过外键(不考虑非等值连接)       
   
    addBatch,获得数据主键自动增长的值

  save :更新两个表
  find : 查两个表,因为department中有employee的set集合

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值