JDBC_part4_大对象_DAO_Bean_DButi

本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用.

转载请注明 出自 : luogg的博客园 谢谢配合!

JDBCday04_大对象_Dao_DBUtil_JavaBean

大对象 (一般不用)

clob(海量文字,如图书)
blob(二进制数据,如图片,音乐,电影)

clob海量文字存入数据库 : FileReader(读文本) + PreparedStatement的setCharacterStream方法(以字符输入)

blob图片,音乐存入数据库 : FileInputStream(字节读) + PreparedStatement的setBinaryStream的方法(以二进制输入)

clob海量文字从数据库写到本地磁盘 : FileWriter(文本写出) + PreparedStatement的getCharacterStream(先读再写)方法返回给Reader + FileWrite的write方法

clob图片音频从数据库写到本地磁盘 : FileOutputStream(字节写出) + ResultSet的getBinaryStream获取字节文件传给InputStream,然后创建byte数组,FileOutputStream的write方法写入.

往数据库中存大文本或图片 :

setCharacterStream(int parameterIndex,Reader x)将指定参数设置为给定输入流


    File file = new File("D:\\mianshiti.txt");
    //图片FileInputStream
    FileReader fr = new FileReader(file);

    Connection conn = DBUtil.getConnection();
    String sql = "insert into t_book(book_id,book_name,book_content) values(?,?,?)";
    PreparedStatement pstmt = conn.prepareStatement(sql);
    pstmt.setString(1, "1");
    pstmt.setString(2,"面试题");

    //图片pstmt.setBinaryStream
    pstmt.setCharacterStream(3, fr);
    int i = pstmt.executeUpdate();
    System.out.println(i);
    DBUtil.close(pstmt);
    DBUtil.close(conn);
    fr.close();

2. 将数据库中的大文件存放到本地

        File file = new File("D:\\HA.png");
        //输出图片FileOutputStream fos = new FileOutputStream(file);
        FileWriter fw = new FileWriter("D:\\haha.txt");
        Connection conn = DBUtil.getConnection();
        String sql = "select * from t_book";
        Statement stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery(sql);
        if(rs.next()) {

            /*  
                图片读取
                InputStream is = rs.getBinaryStream(4);
                byte[] b = new byte[23000];
            */

            Reader reader = rs.getCharacterStream(3);
            char[] ch = new char[1024];
            int length = 0;
            //作为整数读取的字符,如果已到达流的末尾,则返回 -1 
            while((length=reader.read(ch))!=-1) {
                fw.write(ch, 0, length);
            }   
        }
        fw.close();
        DBUtil.close(rs, stmt, conn);

DAO(Database Access Object)数据库访问对象

  • 使用数据库访问对象来抽象和封装对数据库的所有访问
  • 将底层的数据库访问和上层的业务逻辑分开

Dao怎么用
DAO操作数据库:即在DAO中封装了一个数据表在一个项目中的增、删、改、查的全部动作。

JavaBean

1.JavaBean是一个public类
2.JavaBean提供公共的无参构造方法
3.JavaBean内的属性(字段)都是私有的.这些属性只能通过

优点
1.减少了数据传递间的碎片
2.代码结构清晰
3.便于维护和程序扩展
4.节约了开发周期,避免了重复代码

DBUtil

将数据库的连接和关闭封装在一个类里,在其他类里如果需要开启或者关闭连接,只需要调用DBUtil里的方法,返回一个连接即可。不需要在当前类里写繁琐的代码。

优点
1.代码结构清晰
2.便于维护和程序扩展
3.节约了开发周期,避免了重复代码

查询工资在1-10的员工信息 (分页显示)

SELECT * FROM(
SELECT ROWNUM r,a.* FROM(
SELECT copy_emp.* FROM copy_emp WHERE salary IS NOT NULL ORDER BY salary DESC)a)
WHERE r>0 AND r<=10

分页代码

/**
     * 分页显示
     */
    public List<EmpBean> showEmpMagByPage(int page,int pageSize) {
        Connection conn = DBUtil.getConnection();
        String sql = "SELECT * FROM ( " +
                " SELECT ROWNUM r,a.* FROM ( " +
                " SELECT copy_emp.* FROM copy_emp"+ 
                " WHERE salary IS NOT NULL ORDER BY salary DESC ) a ) " +
                " WHERE r>? AND r<=?";  //字符串前边要加空格
        PreparedStatement pstmt = null;
        //int pageSize = 10;//每页显示条数
        int startPage = (page - 1) * pageSize;
        int endPage = pageSize * page;
        ResultSet rs = null;
        List<EmpBean> list = new ArrayList<EmpBean>();
        try {
            pstmt = conn.prepareStatement(sql);
            pstmt.setInt(1, startPage);
            pstmt.setInt(2, endPage);
            rs = pstmt.executeQuery();
            while(rs.next()) {
                EmpBean bean = new EmpBean();
                //bean.getFirstName(rs.getString(1));
                bean.setRownum(rs.getInt(1));
                bean.setEmpID(rs.getInt(2));
                bean.setFirstName(rs.getString(3));
                bean.setLastName(rs.getString(4));
                bean.setSalary(rs.getDouble(9));
                list.add(bean);
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            //DBUtil.close(rs, pstmt, conn);
            DBUtil.close(rs);
            DBUtil.close(pstmt);
            DBUtil.close(conn);
        }
        return list;
    }

转载于:https://www.cnblogs.com/luogg/p/5978862.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值