• JDBC 基础


    JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。

    JDBC 编程基本步骤 

    一、装载驱动程序

      

    String DriveName="net.sourceforge.jtds.jdbc.Driver" 
    Class.forName(DriveName)

    在使用JDBC之前必须引入 相应的驱动jar包,不同的数据库产品会有各自的jar包。 DriveName为驱动jar包中的类。

    例如连接 sybase 可以使用 jtds-1.2.6.jar 和 jconn4.jar, 不同的数据库厂家都会对jdbc类做一些扩展,以便实现特殊功能。不过一般情况下使用标准的jdbc接口能满足大部分需求 。

    二、建立连接

    String ServerUrl="jdbc:sybase:Tds:HOSTNAME:5000/testdb";
    String UserName="sa";
    String Password="123456";
    
    Connection conn=DriverManager.getConnection(ServerUrl,
                        UserName, Password);
    ServerUrl 为连接字符串, 连接字符串包含jdbc使用的 subprotocol, 服务起地址和端口信息, 以及需要连接的数据库。连接字符串一般由驱动程序产家提供。 
    UserName 为用户名, Password为相应的密码

    三、创建操作对象

    Statement stment=conn.createStatement();
    ResutlSet rset=stment.executeQuery("SELECT * FROM T_SALES");

    Statement对象提供了执行SQL的方法executeXXXX(), 对应查询有 executeQuery(String sql)方法. 另外,还有PreparedStatement对象,可以预先对SQL做处理。

    PreparedStatement ppstment = conn.prepareStatement("insert into TXN_LOG  values (?, ?)");
      ppstment.setString(1, "first_field_content_here" );  //  1 对应第1个 ? 号
      ppstment.setString(2, "second_field_content_here" );  //  1 对应第1个 ? 号
      ppstment.execute();
    

    四、处理结果

    JDBC 使用 ResultSet对象存取select 语句返回的结果

    ResultSet rst=null;
    rst=stment.executeQuery("SELECT * FROM TXN_LOG");
    while(rst.next())
    {
        String outline=null;
        outline=rst.getString(1) +"|" ;     //     通过序号1 找到Field中的内容
        outline+=rst.getString("TXN");   // 通过字段名字找到Field中的内容
        System.out.println(outline);    
    }

    五、关闭连接

    conn.close()

    完成数据库操作之后,一般需要显示调用close方法,关闭连接。

    JDBC事务处理 

    一般JDBC连接数据库之后,默认设置为“自动提交”,即每次SQL操作都commit.  如果需要手动提交,则必须将自动提交功能设置为false.

    conn.setAutoCommit(false);
        ....    
        ....
    conn.commit()   // 提交

    非自动提交模式下,代码中必须 调用 commit方法。

    JDBC 批量处理

    对于大批量的数据插入、数据更新操作, 一般需要使用JDBC批量提交的方式处理。Statement 对象和 PreparedStatement 提供了 addBatch() 和 executeBatch方法来实现批量提交。

    // Statement实现
    stment.addBatch("SQL1");
    stment.addBatch("SQL2");
    ......
    stment.executeBatch();     // 执行批量处理
    
    
    // PreparedStatement 方式
    ppstment.setString(1, sb.toString());
    ppstment.setString(2, sb.toString());
    ppstment.addBatch();

     采用 批量处理的方式,可以大大提高处理性能

    JDBC 连接字符串对处理性能的影响

    今天测试Sybase的插入性能时,发现不同的连接字符串,处理性能不一样

    同一个jar中的驱动程序名  "net.sourceforge.jtds.jdbc.Driver"    jtds-1.2.6.jar

    1、"jdbc:jtds:sybase://ZHOUSHUANG02:5000/testdb"

    2、“jdbc:sybase:Tds:ZHOUSHUANG02:5000/testdb”

    采用同样的程序测试,批量提交方式每次 500条, 插入10w 条数据 

    标号 1 2 3 AVG
    1 "jdbc:jtds:sybase://ZHOUSHUANG02:5000/testdb" 28s 71s 72s 5
    2  “jdbc:sybase:Tds:ZHOUSHUANG02:5000/testdb” 14s 11s 11 13s

    从统计数据可以看出,不同的连接字符串的处理时间不一致。

  • 相关阅读:
    容器云技术:容器化微服务,Istio占C位出道
    如何用istio实现请求超时管理
    技术进阶:Kubernetes高级架构与应用状态部署
    如何基于 K8S 多租能力构建 Serverless Container
    面试题目<转载>
    PHP面试出场率较高的题目<转载>
    命名规范
    字符串大小写转换(三种方法)
    php反转输出字符串(两种方法)
    获取文件名后缀的方法
  • 原文地址:https://www.cnblogs.com/piepie/p/zhoushuang.html
Copyright © 2020-2023  润新知