• dbutils工具


    元数据

    问题:元数据是什么,有什么作用? 
    元数据(metaData) 指数据库中 库、表、列的定义信息 
    
    1.DataBaseMetaData 数据库元数据(了解)
    问题:怎样获取一个DataBaseMetaData?
    
    Connection接口中定义了一个方法 getMetaData();
    
    问题:常用API
    
    String driverName = dmd.getDriverName(); //获取驱动名称
    System.out.println(driverName);
    
    String userName = dmd.getUserName();//获取用户名
    System.out.println(userName);
    
    String url = dmd.getURL();//获取url
    System.out.println(url);
    
    String databaseProductName = dmd.getDatabaseProductName(); //获取数据库名称
    System.out.println(databaseProductName);
    
    String databaseProductVersion = dmd.getDatabaseProductVersion();//获取数据库版本.
    System.out.println(databaseProductVersion);
    
    ResultSet getPrimaryKeys(String catalog,
    String schema,
    String table)
    throws SQLException
    获取表中主键相关描述
    每个主键列描述都有以下列:
    TABLE_CAT String => 表类别(可为 null) 
    TABLE_SCHEM String => 表模式(可为 null) 
    TABLE_NAME String => 表名称 
    COLUMN_NAME String => 列名称 
    KEY_SEQ short => 主键中的序列号(值 1 表示主键中的第一列,值 2 表示主键中的第二列)。 
    PK_NAME String => 主键的名称(可为 null2.ParameterMetaData 参数元数据
    参数元数据主要用于获取:sql语句中占位符的相关信息.
    
    问题:怎样获取ParameterMetaData?
    在PreparedStatement中有一个方法getParameterMetaData可以获取.
    
    问题:怎样使用?
    int count = pmd.getParameterCount(); // 获取参数 个数
    System.out.println(count);
    
    String type1 = pmd.getParameterTypeName(1);//获取参数的类型
    System.out.println(type1);
    
    注意:在获取参数类型时会产生异常
    java.sql.SQLException: Parameter metadata not available for the given statement
    解决方案:
    在url后添加参数
    jdbc:mysql:///day18?generateSimpleParameterMetadata=true
    添加这个参数后,我们在获取,它的结果也是varchar,原因:是mysql驱动的支持问题。 
    
    3.ResultSetMetaData 结果集元数据
    
    问题:怎样获取结果集元数据?
    可以通过ResultSet的getMetaData()方法获取.
    
    问题:怎样使用?
    System.out.println(rsmd.getColumnCount());//获取结果集中列数量
    
    System.out.println(rsmd.getColumnName(2));//获取结果集中指定列的名称.
    
    System.out.println(rsmd.getColumnTypeName(3));//获取结果集中指定列的类型
    View Code

     dbutils工具

    问题:dbutils是什么,有什么作用?
    它就是一个简单的jdbc封装工具.使用dbutils可以简化操作.要使用dbutils需要导入jar包. 
    
    dbutils核心
    1.QueryRunner类
    它是用于执行sql语句的类。
    1.query 用于执行select 
    2.update 用于执行update delete insert
    3.batch 批处理
    2.ResultSetHandler接口
    用于定义结果集的封装    
    它提供九个实现类,可以进行不同的封装。
    3.DbUtils类
    它提供关于关闭资源以及事务rollback,commit操作。
    -----------------------------------------------------
    Dbutlis详解
    1.QueryRunner
    1.QueryRunner怎样获取
    1.new QueryRunner()
    如果是使用这种构造创建的QueryRunner,它的事务是手动控制.
    2.new QueryRunner(DataSource ds);
    如果是使用这种构造,它的事务是自动事务,简单说,一条sql一个事务。
    
    2.QueryRunner中的三个核心方法
    query update batch
    对于上述三个方法,它们提供很多重载。
    如果QueryRunner在创建时,没有传递DataSource参数,那么在使用
    query,update,batch方法时,要传递Connection参数
    如果QueryRunner在创建时,传递了Dataource参数,好么在使用
    query,update,batch方法时,不需要传递Connection参数。
    
    总结:
    怎样配套使用:
    QueryRunner runner=new QueryRunner();
    runner.query(Connection,sql,ResultSetHandler,Object... param);
    runner.update(Connection,sql,Object...param);
    runner.batch(Connection con,sql,Object[][] objs);
    
    QueryRunner runner=new QueryRunner(DataSource ds);
    runner.query(sql,ResultSetHandler,Object... param);
    runner.update(sql,Object...param);
    runner.batch(sql,Object[][] objs);
    
    -----------------------------------------------------------------    
    ResultSetHandler接口    
    用于封装结果集.
    
    ============================================================================
    模仿QueryRunner
    1.query方法模仿
    public <T> T query(Connection con, String sql, MyResultSetHandler<T> mrs,Object... params) throws SQLException {
    PreparedStatement pst = con.prepareStatement(sql); // 得到一个预处理的Statement.
    // 问题:sql语句中可能存在参数,需要对参数赋值。
    
    ParameterMetaData pmd = pst.getParameterMetaData();
    // 可以得到有几个参数
    int count = pmd.getParameterCount();
    for (int i = 1; i <= count; i++) {
    pst.setObject(i, params[i - 1]);
    }
    
    ResultSet rs = pst.executeQuery(); // 得到了结果集,要将结果集封装成用户想要的对象,但是,工具不可能知道用户需求。
    
    return mrs.handle(rs);
    }
    2.update方法模仿
    public int update(Connection con, String sql, Object... params) throws SQLException {
    
    PreparedStatement pst = con.prepareStatement(sql); // 得到一个预处理的Statement.
    // 问题:sql语句中可能存在参数,需要对参数赋值。
    
    ParameterMetaData pmd = pst.getParameterMetaData();
    // 可以得到有几个参数
    int count = pmd.getParameterCount();
    for (int i = 1; i <= count; i++) {
    pst.setObject(i, params[i - 1]);
    }
    
    int row = pst.executeUpdate();
    // 关闭资源
    pst.close();
    return row;
    }
    ===============================================================================    
    ResulsetHandler九个实现类
    
    ArrayHandler, 将结果集中第一条记录封装到Object[],数组中的每一个元素就是记录中的字段值。
    ArrayListHandler, 将结果集中每一条记录封装到Object[],数组中的每一个元素就是记录中的字段值。在将这些数组装入到List集合。
    
    BeanHandler(重点), 将结果集中第一条记录封装到一个javaBean中。
    BeanListHandler(重点), 将结果集中每一条记录封装到javaBean中,在将javaBean封装到List集合.
    
    ColumnListHandler, 将结果集中指定列的值封装到List集合.
    
    MapHandler, 将结果集中第一条记录封装到Map集合中,集合的 key就是字段名称,value就是字段值
    MapListHandler, 将结果集中每一条记录封装到Map集合中,集合的 key就是字段名称,value就是字段值,在将这些Map封装到List集合
    
    KeyedHandler,在使用指定的列的值做为一个Map集合的key,值为每一条记录的Map集合封装。
    ScalarHandler 进行单值查询 select count(*) from account;
    
    ---------------------------------------------------------
    扩展:实现BeanHandler
    使用BeanUtils实现
    Object obj = null;
    
    Map<String, String[]> map = new HashMap<String, String[]>();
    
    ResultSetMetaData md = rs.getMetaData();
    int count = md.getColumnCount();
    
    if (rs.next()) {
    try {
    obj = clazz.newInstance();
    for (int i = 1; i <= count; i++) {
    map.put(md.getColumnName(i),
    new String[] { rs.getString(md.getColumnName(i)) });
    }
    BeanUtils.populate(obj, map);
    } catch (InstantiationException e) {
    e.printStackTrace();
    } catch (IllegalAccessException e) {
    e.printStackTrace();
    } catch (InvocationTargetException e) {
    e.printStackTrace();
    }
    
    }
    
    return obj;
    View Code

     虚拟主机

        使用虚拟主机可以将项目部署成顶级域名
            
            1.在service.xml文件
                1.端口修改为80
                2. 配置主机
                  <Host name="www.customer.com"  appBase="D:java1110workspaceday19_2"
                        unpackWARs="true" autoDeploy="true">
    
                  
                    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
                           prefix="localhost_access_log." suffix=".txt"
                           pattern="%h %l %u %t &quot;%r&quot; %s %b" />
    
                           <Context path="" docBase="D:java1110workspaceday19_2WebRoot" />
                  </Host>
                3.在hosts文件中配置
                    127.0.0.1  www.customer.com
    View Code
  • 相关阅读:
    06.数组模拟栈-简易计算器
    05.单向环形链表应用 -- 约瑟夫环
    02.数组模拟环形队列
    01.稀疏矩阵与二维数组相互转化
    大数字相乘
    13.打包发布
    悦苗园公益活动
    程序猿打招自己的电子图书馆
    【技能】提高网站可用性
    【微信技能】如何通过微信号知道对方微信的二维码
  • 原文地址:https://www.cnblogs.com/java-oracle/p/6675584.html
Copyright © 2020-2023  润新知