DBUtils+ajax

javaee的开发模式:
mvc,三层架构
web层:接收数据,用户交互
service层:写中间的逻辑
dao层:数据库访问代码
DBUtils如何使用
1.先导包
2.和正常的dao层一样书写
其中update还是增删改
query是查询
流程:
①创建方法
②获得JDBCUtils连接对象
③创建QueryRunner对象
④书写数据库
⑤(可以创建Object对象直接赋值),也可以(直接在update里面的可变参数书写)
⑥必写int row =qr.update(conn,sql.可变参数)
查询方法
①创建方法
②获得JDBCUtils连接对象
③创建QueryRunner对象
④书写数据库
⑤通过query方法,
书写第一条:Object [] obj=qr.query(conn, sql, new ArrayHandler());
list集合返回 ArrayListHandler所有的信息
BeanHandler第一条信息封装到javabean中
BeanListHandler封装所有javabean中
⑥必写int row =qr.update(conn,sql.可变参数)

第一queryRunner runner=new QueryRunner(DataSource dateSource存放的是调用的连接池工具类),省去了开头连接Connection的代码。

public class UserDao {
        //添加用户
    public void addUser() throws SQLException{
        //获得连接对象
        //创建QueryRunner对象
        QueryRunner qr=new QueryRunner(MyDBUtils.getDataSource());//自动穿一个空闲连接池对象
        String sql="insert into users (uid,username,password)values(?,?,?)";
        Object[] obj={"aaa","宋大树","123456"};
        int row=qr.update( sql, obj);
        System.out.println("row");
    }
    //修改用户
    public void updateUser() throws SQLException{
        Connection conn=JDBCUtils.getConn();
        QueryRunner qr=new QueryRunner();
        String sql="UPDATE users SET username=? WHERE username=?";
        Object[] obj={"礼物","李四"};
        int row =qr.update(conn, sql, obj);
        System.out.println(row);
    }
    //删除
    public void deleteUser() throws SQLException{
        Connection conn=JDBCUtils.getConn();
        QueryRunner qr=new QueryRunner();
        String sql=" delete  from users where  uid=?";
        //Object[] obj={"123"};
        int row =qr.update(conn, sql, "aaa");
        System.out.println(row);
    }
    //ArrayListHandlar
    //Object [] 查询所有用户信息(第一条)
    public void get1() throws SQLException{
        Connection conn=JDBCUtils.getConn();
        //创建QueryRunner
        QueryRunner qr=new QueryRunner();
        String sql="select * from users";
        Object [] obj=qr.query(conn, sql, new ArrayHandler());
        for(Object o:obj){
            System.out.println(o);
        }
    }
    
    public void get2() throws SQLException {
        Connection conn=JDBCUtils.getConn();
        //创建QueryRunner
        QueryRunner qr=new QueryRunner();
        String sql="select * from users";
        List<Object[]> list=qr.query(conn, sql, new ArrayListHandler());
        for(Object [] obj:list){
            for(Object o:obj){
                System.out.println(o);
            }
        }
    }
//BeanHandlar
    public void get3() throws SQLException {
        Connection conn=JDBCUtils.getConn();
        //创建QueryRunner
        QueryRunner qr=new QueryRunner();
        String sql="select * from users where username=? and password=?";
        Object [] obj={"小红帽","123456"};
        Users user =qr.query(conn, sql, new BeanHandler<Users>(Users.class), obj);
    System.out.println(user);
    }
    //BeanListHandlar
    //List<JavaBean> 查询结果集的所有用户信息
    public void get4() throws SQLException {
        Connection conn=JDBCUtils.getConn();
        //创建QueryRunner
        QueryRunner qr=new QueryRunner();
        String sql="select * from users ";            //封装的对象
        List<Users> list =qr.query(conn, sql, new BeanListHandler<Users>(Users.class));
        System.out.println(list);
    }
        //ColumnListHandlar
        //List<Column>类 查询某一字段的所有信息
        public void get5() throws SQLException {
            Connection conn=JDBCUtils.getConn();
            //创建QueryRunner
            QueryRunner qr=new QueryRunner();
            String sql="select username from users ";            //封装的对象
            List<String>list= qr.query(conn, sql,new ColumnListHandler<String>());
            System.out.println(list);
        }
        //ScalarHeader 
        //查询count\avg聚合函数的结果信息
        public void get6() throws SQLException {
            //创建QueryRunner
            QueryRunner qr=new QueryRunner(MyDBUtils.getDataSource());
            String sql="select count(*) from users ";            //封装的对象
            Long conut= qr.query( sql,new ScalarHandler<Long>());
            int c=conut.intValue();
            System.out.println(c);
        }

 


DBUTlis连接池

修改代码:

 

 


就是用来管理conn的,通过池来获取Connection对象。主要是针对dao层
先导包→编写工具类(都是静态修饰的方法,或者静态代码块,或者静态常量)
JDBC事务

  • 也就是在一次任务中要把所有的单元放在一个事务中执行。
  • 默认的是一条sql语句就是一个事务
  • 开启事务:start transaction
  • 提交事务:commit(如果不提交只是存储到内存,提交之后真正更新数据)
  • 回滚:rollback,如果没有提交事务则回滚到最初状态
  • 如何修改DBUTlis事务
  •     public class AccountDao {
            //转出方法
        public void outMoney(Connection conn,String out,double money) throws SQLException{
            QueryRunner qr= new QueryRunner();
            String sql="update account set money=money-? where aname=?";
            qr.update(conn,sql,money,out);
            
        }
        //out是转入账号也就是tom
        public void inMoney(Connection conn,String in,double money) throws SQLException{
        
            QueryRunner qr= new QueryRunner();
            String sql="update account set money=money+? where aname=?";
            qr.update(conn,sql,money,in);
            
        }

     

  • public void transfer(String out,String in,double money){
            Connection conn=MyDBUtils.getConn();
            try {
                //手动开启事务
                conn.setAutoCommit(false);
                //收账人
                accountDao.outMoney(conn,out, money);//往下走conn已经开始调取这一句方法
                int y =1/0;
                //转账人
                accountDao.inMoney(conn,in, money);
                conn.commit();
            } catch (SQLException e) {
                        //事务回滚
                        try {
                            conn.rollback();
                        } catch (SQLException e1) {
                            e1.printStackTrace();
                        }
                e.printStackTrace();
            }
        //解决中文乱码
            request.setCharacterEncoding("UTF-8");
            //获取参数
            String out=request.getParameter("out");
            String in=request.getParameter("in");
            String moneyStr=request.getParameter("money");
            double money=Double.parseDouble(moneyStr);
            //调用Service层的转账方法
            accountService.transfer(out, in, money);
            //解决乱码
            response.setContentType("text/html;charset=UTF-8");
            //重定向
            response.getWriter().write("转账成功");

     

     它的好处是即使出现异常,也不会出现钱转了,但是收方没有找到钱的问题。
    事务只能走一个数据库语句,要不全部执行,要不不执行
    事务具有原子性、一致性、隔离性、持久性。

  • ajax
    同步是服务器返回客户端之前,客户端无法操作。
    异步是客户端请求服务器,服务器是否返回客户端,都可以操作。
    ajax就是替代了request请求直接发送到到tomat服务器,做一个中转站。
    json数据格式,键值对
    1、对象{“key”“obj”}
  • var person={"firstname":"","lastname":"三丰","age":100};
         //取值:变量名.方法名()
         alert(person.firstname);
     var persons=[
                                      {"name":"张三","age":18},
                                     {"name":"司南","age":19}
                                 ];
          alert(persons[0].name);
     var shcool={
                 "oracle":[
                               {"name":"司南","age":20},
                               {"name":"李治烽","age":21}
                               ]
         }
         alert(shcool.oracle[0].name);
        
    2.集合、/数组[{“name”:“李四”,}{}]容器
    3、和jq相关的ajax技术
    其中
    $.get(url,[data],[callback],[type])
    $.post(url,[data],[callback],[type])
    url地址,data请求服务器数据,callback回调函数,type数据类型(text,json,html)
    $.ajax
    asyc:true异步
    dataType发送的参数
    success:回调函数
    type请求方式
    url服务器地址
posted @ 2019-09-28 16:21  lvyimin  阅读(214)  评论(0编辑  收藏  举报