1.存储过程
CallableStatement PrepareStatement的子类
CallableStatement cs = conn.preparedCall(...)
cs.registOutParameter(...)
cs.setXXX(...)
cs.execute();
cs.getXXX(...)
Connection ----> Statement,PrepareStatement,CallableStatement
Types
2.获得数据库自动生成的主键
ps =prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)
rs = ps.getGeneratedKeys //rs中 这里只能得到主键,其他的结果得不到了
if(rs.next()){
rs.getInt(1);
}
3.ResultSet 对结果集滚动
next()
previous()
absolute()
beforeFirst() //要想取 next
afterLast() //要想去 previous
可以实现分页 --> 数据库不支持分页的时候,使用结果集滚动来实现
性能差
4.数据库分页的实现:
MySQL分页的实现:
select * from table limit M, N;
M从什么开始(前面一个),N取几条
从0开始
1.拿到总记录数
select count(*) from user;
2.
Class.forName() ---> 在jar包中找Driver.class
db_1/jdbc/lib/ojdbc14.jar
5.J2EE 宠物商店
6.批处理
st.addBatch(sql)不同sql语句
ps.addBatch()相同sql语句,参数不同
executeBatch()
clearBatch()
分批 适当的分批
改JVM内存 -xmxn
7.处理LOB
Large Object 大对象
超大的二进制数据和文本数据
clob:文本
blob:二进制
MySQL 和 Oracle 对 clob和blob处理
MySQL:
clob--->text
blob--->blob
clob--->text:
ps.setCharacterStream(index, reader, length);
reader = rs.getCharacterStream(i);
reader = rs.getClob(i).getCharacterStream();
string = rs.getString(i); //不好,一次性将数据拿到内存
url --> path , file ---> 流
1.从数据库中读的是不是乱码 插入乱码,数据库中就是乱码
2.写出去是不是乱码 OutputStreamWriter 指定字符集
blob--->blob longblob
ps.setBinaryStream(i, is, length)
is = rs.getBinaryStream(i);
is = rs.getBlob(i).getBinaryStream();
Oracle:
blob---->blob
blob---->blob
指针 empty_blob()
insert into test(image) values (empty_blob());
select image from test where id=? for update //锁定该行
先插入指针,读取指针 ---> 流
blob = rs.getBlob()
blob.getBinaryStream()
二进制文件一般不放在数据库中,是放在文件中
实体中 有图片的地址
8.用JDBC操作多个表(实体)
部门 : 有多个员工
员工 : 属于一个部门
在面向对象中:对称的 你有我 我有你
在关系型数据库中:不对称的,在数据库中,两个表之间的关系是通过外键(不考虑非等值连接)
级联更新:把关联的数据都更新
外键约束:取值在外键的那个键的范围内
addBatch
save :更新两个表
find : 查两个表,因为department中有employee的set集合
第二十五天:听课笔记
最新推荐文章于 2021-02-24 00:58:58 发布