当前位置:Gxlcms > 数据库问题 > JDBC数据批处理

JDBC数据批处理

时间:2021-07-01 10:21:17 帮助过:25人阅读

PrepareStatement是Statement子类 支持占位符?

批量插入时 性能更好 效率更高

防止SQL注入,更安全

代码不同:

Statement:
 
    //将sql语句添加至批处理命令中
   a、 statement.addBatch(sql);
    //执行批处理
    b、statement.executeBatch();

    //清空批处理命令
    c、statement.clearBatch();


   PreparedStatement:
   
   //将sql语句添加至批处理
   a、pstm.addBacth();    注意此处不需要传入sql语句,因为在获取集装箱(PreparedStatement)的时候已将sql
   语句传入
   //执行批处理
  b、 pstm.executeBatch();

   //清空批处理命令
   c、pstm.clearBatch();

 

数据库连接池:优化项目的性能
   现在很多Web服务器(Weblogic, WebSphere, Tomcat)都提供了DataSoruce的实现,即连接池的实现。
   通常我们把DataSource的实现,按其英文含义称之为数据源,数据源中都包含了数据库连接池的实现。
   也有一些开源组织提供了数据源的独立实现:
   DBCP 数据库连接池(tomcat)
   C3P0 数据库连接池(hibernate)

    //获取数据源
    BasicDataSource basicDataSource = new BasicDataSource();
    //设置连接地址
    basicDataSource.setUrl("jdbc:mysql://127.0.0.1:3306/bookapp");
    //最大活动数
    basicDataSource.setMaxActive(3);
    //设置最大保存数
    basicDataSource.setMaxIdle(3);
    //超时等待时间  单位毫秒
    basicDataSource.setMaxWait(5000);
    //设置用户名
    basicDataSource.setUsername("root");
    //设置密码
    basicDataSource.setPassword("root");
    //获取连接
    Connection con = basicDataSource.getConnection();


    实际开发中我们可以web服务器来配置数据源
    找到server中的context.xml文件

    <Resource name="jdbc/shop_app" auth="Container" type="javax.sql.DataSource"
               maxTotal="100" maxIdle="30" maxWaitMillis="10000"
               username="root" password="root" driverClassName="com.mysql.jdbc.Driver"
               url="jdbc:mysql://localhost:3306/bank"/>

   代码初始化数据源
   static{
    try {
        InitialContext context = new InitialContext();
        //通过context的lookup方法来检索JNDI容器中的DataSource资源名来进行检索       注意:在检索的时候需要加上web容器的对应的资源前缀     tomcat容器的前缀:java:/comp/env
        dataSource = (DataSource)context.lookup("java:/comp/env/jdbc/bookapp");
    } catch (NamingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    
      }

元数据
    try {
        con = ConnectionFactory.getConnection();
        String sql = "select * from tb_user";
        //获取集装箱
        pstm = con.prepareStatement(sql);
        rs = pstm.executeQuery();
        //获取元数据(该数据中包含,表中列的数量,列类型、列名称)
        ResultSetMetaData metaData = rs.getMetaData();
        //获取列的数量
        int column = metaData.getColumnCount();
        System.out.println("得到列的数量:"+column);
        //遍历结果集
        rs.next();
            for(int i=1;i<=column;i++){
                //获取列名
                String name = metaData.getColumnName(i);
                //获取数据类型
                String type = metaData.getColumnTypeName(i);
                //根据列名获取数据
                Object object = rs.getObject(name);    
                System.out.println("列名:"+name+"类的类型:"+type+" 得到的数据:"+object);
            }
        }
   

JDBC数据批处理

标签:clear   关闭   from   注意   led   项目   text   依赖   my.ini   

人气教程排行