zoukankan      html  css  js  c++  java
  • JDBC数据批处理

    JDBC(Java Data Base Connectivity):SUN公司为统一对数据库的操作定义的一套Java操作规范(接口),成为JDBC;

    API中组成JDBC的两个包:java.sql  |  javax.sql

    JDBC过程(以MySQL、Oracle数据库为例)

    mysql数据库默认端口:3306
    oracle数据库默认端口:1521

    services.msc:查看系统中所有的服务

    mysql数据库中最重要的配置文件
    C:Program Files (x86)MySQLMySQL Server 5.0my.ini


    port=3306   端口号
    default-character-set=utf8   mysql数据库编码
    C:/Program Files (x86)/MySQL/MySQL Server 5.0/  mysql安装路径
    C:/Program Files (x86)/MySQL/MySQL Server 5.0/Data/  数据库文件存放路径
    default-storage-engine=INNODB  mysql数据库引擎

    1、加入驱动包,注册Driver(除jar包,还需要导入相应JDBC的数据库实现(即数据库驱动))

        //加载数据库驱动  
           a、 Class.forName("com.mysql.jdbc.Driver");//MySQL两种方式,采用此种方式,程序仅仅只需要一个字符串,不需要import驱动的API,这样可使程序不依赖具体的驱     动,使程序的灵活性更高。

       b、DriverManager. registerDriver(Driver driver)

       //Oracle

       Driver driver = new oracle.jdbc.driver.OracleDriver();

       Properties info = new Properties();
            //Oracle指定数据用户名以及密码
            info.setProperty("user", "scott");
            info.setProperty("password", "tiger")

    2、获取连接 

       //MySQL获取连接                //协议:子协议   主机         端口 数据库          
            Connection con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test", "root", "root"); 

       //Oracle获取连接
            Connection con = driver.connect("jdbc:oracle:thin:@127.0.0.1:1521:orcl", info);

    3、获取statement

       //准备sql语句
            String sql = "insert into tb_user(loginname,username,password) values(?,?,?)";
            //获取集装箱
            PreparedStatement pstm = null;

    4、发送sql

    5、处理返回的结果集ResultSet

    6、关闭资源

    try {
                pstm = con.prepareStatement(sql);
                for(int i=0;i<list.size();i++){
                    pstm.setString(1, list.get(i).getLoginname());
                    pstm.setString(2, list.get(i).getUsername());
                    pstm.setString(3, list.get(i).getPassword());
                    //将sql语句添加至批处理命令中
                    pstm.addBatch();
                }
                
                //执行批处理
                int[] flag = pstm.executeBatch();
                System.out.println("影响的行数:"+flag.length);
                //清空批处理命令
                pstm.clearBatch();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally {
                 //关闭数据库连接
                ConnectionFactory.close(con, pstm, null);
            }

    Statement 与PrepareStatement

    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);
                }
            }
       

  • 相关阅读:
    select poll使用
    linux下tomcat shutdown后 java进程依然存在
    poj 1222 EXTENDED LIGHTS OUT(高斯消元)
    poj 2377 Bad Cowtractors
    C#:总结页面传值几种方法
    从 Racket 入门函数式编程
    程序猿接私活经验总结,来自csdn论坛语录
    什么是SEO?SEO干嘛的?怎么做SEO?
    Java设计模式-观察者模式
    非常特别的一个动态规划新手教程
  • 原文地址:https://www.cnblogs.com/wqinggo/p/6738805.html
Copyright © 2011-2022 走看看