• 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;
    	}
    
  • 相关阅读:
    11.判断单链表是否有环
    10.从尾到头打印单链表
    9.单链表反转
    8.合并两个有序的单链表,合并之后的链表依然有序【出现频率高】
    【前端安全】JavaScript防http劫持与XSS (转)
    javascript Date format(js日期格式化)
    微信内置浏览器浏览H5页面弹出的键盘遮盖文本框的解决办法(转)
    document.visibilityState 监听浏览器最小化
    【19道XSS题目】不服来战!(转)
    一劳永逸的搞定 FLEX 布局(转)
  • 原文地址:https://www.cnblogs.com/luogg/p/5978862.html
Copyright © 2020-2023  润新知