zoukankan      html  css  js  c++  java
  • 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 
            //查询countavg聚合函数的结果信息
            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服务器地址
  • 相关阅读:
    setCookie
    EF getCookie
    EF
    Dapper修改
    Dapper显示
    Dapper上传图片
    Dapper存储过程分页
    Azure Function(.Net Cor框架)读取配置文件
    .Net Core3.1中出现AssemblyInfo特性重复
    YAML配置文件 基础学习
  • 原文地址:https://www.cnblogs.com/a199706/p/11603577.html
Copyright © 2011-2022 走看看