达梦数据库JDBC驱动测试记录

一、测试说明

        JDBC (Java Database Connectivity) 是 Java 应用程序与数据库的接口规范,旨在让各数据库开发商为 Java 程序员提供标准的数据库应用程序编程接口 (API)。JDBC 定义了一个跨数据库、跨平台的通用 SQL 数据库 API。

        DM JDBC 数据库驱动程序是一个能够支持基本 SQL 功能的通用应用程序编程接口,支持一般的 SQL 数据库访问。通过 JDBC 驱动程序,用户可以在应用程序中实现对 DM 数据库的连接与访问

实验目标:部署DM8数据库,编写简单脚本测试JDBC驱动,完成数据库连接,简单SQL查询,并发连接等测试。

环境规划:

IP地址:192.168.50.100

数据库版本:  DM8

软件路径规划

Linux系统目录

说明

1

/dm8

DM8安装路径

2

/home/dmdba/scrdir

脚本路径

二、软件安装

1、DM8图形化界面安装

2、安装JDK

yum install –y java-1.8.0-openjdk.x86_64

三、驱动测试

1、简单连接测试

编写测试脚本:vim jdbc_conn.java

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

public class jdbc_conn {

    static Connection con = null;

    static String cname = "dm.jdbc.driver.DmDriver";

    static String url = "jdbc:dm://localhost:5236?logLevel=all&logDir=/home/dmdba/sqltest";

    static String userid = "SYSDBA";

    static String pwd = "SYSDBA";

    static final String sql = "SELECT * from tab_01;";

    public static void main(String[] args) {

        try {

            Class.forName(cname);

            con = DriverManager.getConnection(url, userid, pwd);

            con.setAutoCommit(true);

            System.out.println("[SUCCESS]conn database");

        } catch (Exception e) {

            System.out.println("[FAIL]conn database:" + e.getMessage());

        }

    }

    public void disConn(Connection con) throws SQLException {

        if (con != null) {

            con.close();

        }

    }

}

开启jdbc日志:在jdbc的串联处增加内容:

?logLevel=all&logDir=/home/dmdba/sqltest其中,logDir=日志目录,根据情况写。

--编译

/dm8/jdk/bin/javac -cp /dm8/drivers/jdbc/DmJdbcDriver18.jar /home/dmdba/scrdir/jdbc_conn.java

--测试脚本

java -cp /dm8/drivers/jdbc/DmJdbcDriver18.jar:/home/dmdba/scrdir/ jdbc_conn

 

2、简单查询SQL测试

创建数据库测试用例:

disql SYSDBA/SYSDBA

create tablespace CRM_DATA datafile 'crm_data_01.dbf' size 1024 autoextend on next 64;
create tablespace CRM_INDEX datafile 'crm_index_01.dbf' size 512 autoextend on next 64;
create user crm identified by "Jnhg2013!" default TABLESPACE "CRM_DATA" default INDEX TABLESPACE "CRM_INDEX";
grant PUBLIC to crm;
grant RESOURCE to crm;

create table tab_01 (c1 int, c2 char(10), c3 varchar, c4 numeric(5,2), c5 smallint, c6 bigint, c7 byte,c8 binary,c9 float, c10 double, c11 real,c12 bit,c13 date,c14 time, c15 timestamp, c16 interval year to month,  c17 time with time zone, c18 text,c19 image ,c20 blob, c21 clob);

insert into tab_01 values (1, 'abcd', 'testdatatype', '-123.45', '-32768', '-92233720', 123, '1', 5, 7.8, 9.1, null, '2012-12-24', '21:59:59', '2012-12-21 07:59:59', '15-08', '19:59:59 +02:03', 'test text data type','0x123456789','0x987654321','test clob data type');

编写测试脚本:vi Sqlexec.java

import java.sql.*;

import java.sql.DriverManager;

import java.util.*;

import java.text.SimpleDateFormat;

import java.util.Date;

public class Sqlexec {

    static final String JDBC_DRIVER = "dm.jdbc.driver.DmDriver";

    static final String DB_URL = "jdbc:dm://localhost:5236?logLevel=all&logDir=/home/dmdba/sqltest";

    static final String USER = "crm";

    static final String PASS = "Jnhg2013!";

    static final String sql = "select * from TAB_01;";

    private static int ColumnCount;

    public static void main(String[] args) {

        Connection conn = null;

        PreparedStatement stmt = null;

        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");

        String d1;

        String d2;

        Date dt1;

        Date dt2;

        long diff;

        int i = 1;

            while ( i <= 3) {

            try {

                Class.forName(JDBC_DRIVER);

                System.out.println(df.format(new Date()) + " 连接数据库");

                conn = DriverManager.getConnection(DB_URL, USER, PASS);

                d1 = df.format(new Date());

                dt1 = df.parse(d1);

                System.out.println(d1 + "第 " + i + " 次查询开始");               

                stmt = conn.prepareStatement(sql);

                ResultSet rs = stmt.executeQuery(sql);

                ResultSetMetaData rsmd = rs.getMetaData();

                List list = new ArrayList<String>();

                d2 = df.format(new Date());

                dt2 = df.parse(d2);

                diff = dt2.getTime() - dt1.getTime();

                System.out.println(d2 + "第 " + i + " 次查询结束");

                System.out.println("第 " + i + " 次查询耗时: " + diff);

                rs.close();

                stmt.close();

                conn.close();

                } catch (SQLException se) {

                    se.printStackTrace();

                } catch (Exception e) {

                    e.printStackTrace();

                } finally {

                    try {

                        if (stmt != null)

                        stmt.close();

                    } catch (SQLException se2) {}

                    try {

                        if (conn != null)

                        conn.close();

                  } catch (SQLException se){

                        se.printStackTrace();

                  }

                }

            i++;

            }

        System.out.println("Goodbye!");

    }

}

--编译

/dm8/jdk/bin/javac -cp /dm8/drivers/jdbc/DmJdbcDriver18.jar /home/dmdba/scrdir/jdbc_conn.java

--测试脚本

java -cp /dm8/drivers/jdbc/DmJdbcDriver18.jar:/home/dmdba/scrdir/ jdbc_conn

 

3、并发测试

编写测试脚本:vi Sqlexec.java

import cn.hutool.core.thread.ThreadUtil;

import java.sql.DriverManager;

import java.sql.*;

import java.util.concurrent.*;

import java.util.Date;

import java.text.SimpleDateFormat;

public class Sqlexec {

    static final String JDBC_DRIVER = "dm.jdbc.driver.DmDriver";

    static final String DB_URL = "jdbc:dm://localhost:5236?logLevel=all&logDir=/home/dmdba/sqltest";

    static final String USER = "crm";

    static final String PASS = "Jnhg2013!";

    static final String sql = "select * from TAB_01;";



    private static ExecutorService executor = ThreadUtil.newExecutor(10);

    public static void main(String[] args) {

        for (int i = 0; i < 10; i++) {

            executor.execute(() -> handler());

        }

        executor.shutdown();

    }

   

    public static void handler(){

        /* 打印当前线程名字 */

        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");

        System.out.println(df.format(new Date()) + "  当前执行线程:" + Thread.currentThread().getName());

        String d1;

        String d2;

        Date dt1;

        Date dt2;

        long diff;

        try {

            Class.forName(JDBC_DRIVER);

            Connection con = DriverManager.getConnection(DB_URL, USER, PASS);

            con.setAutoCommit(true);

            /* System.out.println("[SUCCESS]conn database"); */

            PreparedStatement stmt = con.prepareStatement(sql);

            d1 = df.format(new Date());

            dt1 = df.parse(d1);

            /* 执行查询操作 */

            stmt.execute();

            d2 = df.format(new Date());

            dt2 = df.parse(d2);

            /* 获取返回结果 */

            diff = dt2.getTime() - dt1.getTime();

            ResultSet resultSet = stmt.getResultSet();

            System.out.println(Thread.currentThread().getName() + " -> 查询耗时: " + diff + "ms. 结果集:");

            while (resultSet.next()) {

                System.out.println(resultSet.getString("c1"));

            }

            resultSet.close();

            stmt.close();

            con.close();

        } catch (Exception e) {

            System.out.println("[FAIL]conn database:" + e.getMessage());

        }

    }

}

--编译

/dm8/jdk/bin/javac -cp /dm8/drivers/jdbc/DmJdbcDriver18.jar -cp /home/dmdba/scrdir/hutool.jar /home/dmdba/scrdir/Sqlexec.java

--测试脚本

java -cp /dm8/drivers/jdbc/DmJdbcDriver18.jar:/home/dmdba/scrdir/hutool.jar:/home/dmdba/scrdir/ Sqlexec

 

更多技术内容请访问社区:https://eco.dameng.com

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值