• Junit单元测试


    ###使用单元测试,测试代码

    1. 定义一个类, TestXXX , 里面定义方法 testXXX.

    2. 添加junit的支持。

      右键工程 --- add Library --- Junit --- Junit4

    3. 在方法的上面加上注解 , 其实就是一个标记。

      @Test public void testQuery() { ... }

    4. 光标选中方法名字,然后右键执行单元测试。 或者是打开outline视图, 然后选择方法右键执行。

    ###Dao模式

    Data Access Object 数据访问对象

    1. 新建一个dao的接口, 里面声明数据库访问规则
    /**
    	 * 定义操作数据库的方法
    	 */
    	public interface UserDao {
    	
    		/**
    		 * 查询所有
    		 */
    		void findAll();
    	}
    1. 新建一个dao的实现类,具体实现早前定义的规则
    public class UserDaoImpl implements UserDao{
    
    	@Override
    	public void findAll() {
    		Connection conn = null;
    		Statement st = null;
    		ResultSet rs = null;
    		try {
    			//1. 获取连接对象
    			conn = JDBCUtil.getConn();
    			//2. 创建statement对象
    			st = conn.createStatement();
    			String sql = "select * from t_user";
    			rs = st.executeQuery(sql);
    			
    			while(rs.next()){
    				String userName = rs.getString("username");
    				String password = rs.getString("password");
    				
    				System.out.println(userName+"="+password);
    			}
    			
    		} catch (Exception e) {
    			e.printStackTrace();
    		}finally {
    			JDBCUtil.release(conn, st, rs);
    		}
    	}
    
    }
    1. 直接使用实现

      @Test public void testFindAll(){ UserDao dao = new UserDaoImpl(); dao.findAll(); }

    ##Statement安全问题

    1. Statement执行 ,其实是拼接sql语句的。 先拼接sql语句,然后在一起执行。
    String sql = "select * from t_user where username='"+ username  +"' and password='"+ password +"'";
    
    	UserDao dao = new UserDaoImpl();
    	dao.login("admin", "100234khsdf88' or '1=1");
    
    	SELECT * FROM t_user WHERE username='admin' AND PASSWORD='100234khsdf88' or '1=1'
    前面先拼接sql语句, 如果变量里面带有了 数据库的关键字,那么一并认为是关键字。 不认为是普通的字符串。 
    	rs = st.executeQuery(sql);

    PrepareStatement

    该对象就是替换前面的statement对象。

    1. 相比较以前的statement, 预先处理给定的sql语句,对其执行语法检查。 在sql语句里面使用 ? 占位符来替代后续要传递进来的变量。 后面进来的变量值,将会被看成是字符串,不会产生任何的关键字。
    String sql = "insert into t_user values(null , ? , ?)";
    		 ps = conn.prepareStatement(sql);
    		 
    		 //给占位符赋值 从左到右数过来,1 代表第一个问号, 永远你是1开始。
    		 ps.setString(1, userName);
    		 ps.setString(2, password);
  • 相关阅读:
    C++对象模型
    Session、Application、Cache
    JavaScript事件的几个细节
    algorithm(算法)
    【REST WCF】30分钟理论到实践
    实践Scrum
    调试PostSharp DEMO 遇到的问题
    6.8 按字符串中的部分内容排序
    QObject就有eventFilter,功能很强(随心所欲的进行处理,比如用来QLineEdit分词)
    QPainter就是手里的作图工具,只需要三洋东西:笔(颜色,宽度,样式),字体(写字),刷子(大面积作画),这里有三个典型例子
  • 原文地址:https://www.cnblogs.com/PXJ0103/p/10504803.html
Copyright © 2020-2023  润新知