当前位置:   article > 正文

DM8-JDBC_dm.jdbc.driver.dmdriver

dm.jdbc.driver.dmdriver

DM8-JDBC

1、对象说明

DriverManager:用于加载驱动和创建数据库连接,实际中采用Class.forName("")来加载驱动,DriverManager用来创建与数据库的连接对象Connection。

URL:

image-20220804115341993

常用数据库URL地址的写法:

Oracle写法:jdbc:oracle:thin:@localhost:1521:test

SqlServer写法:jdbc:microsoft:sqlserver://localhost:1433; DatabaseName=test

MySql写法:jdbc:mysql://localhost:3306/test?

DM写法:jdbc:dm://localhost:5236/schema=test

在连接达梦数据时schema指定模式,schema=test表示使用test模式,如果不使用schema则表示默认使用的是SYSDBA模式。

Connection数据库连接对象,Collection是数据库编程中最重要的一个对象,客户端与数据库所有交互都是通过connection对象完成,常用方法如下:

createStatement():创建向数据库发送sql的statement对象。

prepareStatement(sql) :创建向数据库发送预编译sql的PrepareSatement对象。

setAutoCommit(boolean autoCommit):设置事务是否自动提交。

commit() :在链接上提交事务。

rollback() :在此链接上回滚事务。

Statement:象用于向数据库发送SQL语句, Statement对象常用方法如下:

executeQuery(String sql) :用于向数据发送查询语句。

executeUpdate(String sql):用于向数据库发送create、insert、update或delete语句,返回值表示你update影响的纪录条数,如果是-1表示无影响,如果是建表等语句,返回0。

execute(String sql):用于向数据库发送任意sql语句

addBatch(String sql) :把多条sql语句放到一个批处理中。

executeBatch():向数据库发送一批sql语句执行。

返回值:executeUpdate();

PreparedStatement:作为Statement的子类,相对于Statement对象而言:PreperedStatement可以避免SQL注入的问题。PreparedStatement可对SQL进行预编译,从而提高数据库的执行效率。并且PreperedStatement对于sql中的参数,允许使用占位符的形式进行替换,简化sql语句的编写。

ResultSet:Jdbc程序中的ResultSet用于代表Sql语句的执行结果。Resultset封装执行结果时,采用的类似于表格的方式。ResultSet 对象维护了一个指向表格数据行的游标,初始的时候,游标在第一行之前,调用ResultSet.next() 方法,可以使游标指向具体的数据行,进行调用方法获取该行的数据。

ResultSet既然用于封装执行结果的,所以该对象提供的都是用于获取数据的get方法:

获取任意类型的数据

getObject(int index)

getObject(string columnName)

获取指定类型的数据,例如:

getString(int index)

getString(String columnName)

ResultSet还提供了对结果集进行滚动的方法:

next():移动到下一行

Previous():移动到前一行

absolute(int row):移动到指定行

beforeFirst():移动resultSet的最前面。

afterLast() :移动到resultSet的最后面

2、导入达梦JDBC驱动

image-20220811084009392

3、配置文件jdbc.properties

Driver = dm.jdbc.driver.DmDriver
URL = jdbc:dm://localhost:5236/useSSL=false&userUnicode=true&characterEncoding=utf8&serverTimezone=GMT
username = SYSDBA
password = wh17xktk!!
  • 1
  • 2
  • 3
  • 4

4、创建JDBC连接工具类JdbcUtils

package DM8_JDBC;

import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;


/**
 * @ClassName JdbcUtils
 * @Description DM8_JDBC工具
 * @Author 浩儿
 * @Date 2022/8/4 10:00
 * @Version V1.0
 */
public class JdbcUtils {
    private static String driver;
    private static String url;
    private static String username;
    private static String password;

    static{
        try {
        //加载JDBC配置文件jdbc.properties
        InputStream jdbc = JdbcUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
        Properties properties = new Properties();
        properties.load(jdbc);
        //获取配置文件信息
        driver = properties.getProperty("Driver");
        url = properties.getProperty("URL");
        username = properties.getProperty("username");
        password = properties.getProperty("password");

        //加载驱动
        Class.forName(driver);
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    //创建数据库连接对象connection
    public static Connection getconnection() throws SQLException {
        Connection con = DriverManager.getConnection(url, username, password);
        return con;
    }


    //释放资源
    public static void release(Connection con, PreparedStatement pre, ResultSet res) throws SQLException {
        if (con != null){
            con.close();
        }
        if (pre != null){
            con.close();
        }
        if (res != null){
            res.close();
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60

5、测试类DmTest

5.1 使用PreparedStatement预编译

package DM8_JDBC;

import org.junit.jupiter.api.Test;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * @ClassName Test
 * @Description JDBC连接达梦数据库测试
 * @Author 浩儿
 * @Date 2022/8/4 10:39
 * @Version V1.0
 */
public class DmTest {
    public static PreparedStatement pre;
    public static ResultSet re;
    
    //数据库查询
    @Test
    public void TestSelect() throws SQLException {
        //创建数据库连接
        Connection con = JdbcUtils.getconnection();
        if (con != null){
            System.out.println(("数据库连接成功"));
        }else {
            System.out.println(("数据库连接失败"));
        }
        String sql = "select * from t1";
        
        //执行SQL
        pre = con.prepareStatement(sql);
        
        //返回查询到的结果集
        re = pre.executeQuery();
        //循环输出结果集
        while (true) {
            if (!re.next()) break;
            System.out.println("id:" + re.getObject("id")+"\t"+"name:" + re.getObject("name"));
            System.out.println();
        }
        //释放资源
        JdbcUtils.release(con,pre,re);
    }
    
    @Test
    //插入数据
    public void testInsert() throws SQLException {
        //创建数据库连接
        Connection con = JdbcUtils.getconnection();
        String sql = "insert into t1 values(1,'xktk'),(2,'xktk2')";
        PreparedStatement pre = con.prepareStatement(sql);
        int i = pre.executeUpdate();
        if (i != 0){
            System.out.println("插入成功");
        }else {
            System.out.println("插入失败");
        }
        JdbcUtils.release(con,pre,re);
    }
    
    @Test
    //更新数据
    public void testUpdate() throws SQLException {
        Connection con = JdbcUtils.getconnection();
        String sql = "update  t1 set name = 'xswl' where name = 'xktk'";
        pre = con.prepareStatement(sql);
        int i = pre.executeUpdate();
        if (i != 0){
            System.out.println("修改成功");
        }else {
            System.out.println("修改失败");
        }
        JdbcUtils.release(con,pre,re);
    }

    @Test
    //删除数据
    public void testDelete() throws SQLException {
        Connection con = JdbcUtils.getconnection();
        String sql = "delete from t1 where name = 'xktk2'";
        pre = con.prepareStatement(sql);
        int i = pre.executeUpdate();
        if (i != 0){
            System.out.println("删除成功");
        }else {
            System.out.println("删除失败");
        }
        JdbcUtils.release(con,pre,re);
    }

    @Test
    //创建表
    public void TestCreate() throws SQLException {
        Connection con = JdbcUtils.getconnection();
        String sql = "create table t2 (id int,name varchar)";
        pre = con.prepareStatement(sql);
        int i = pre.executeUpdate(sql);
        //返回值表示你update影响的纪录条数,如果是-1表示无影响,如果是建表等语句,返回0。
        if (i == 0){
            System.out.println("创建成功");
        }else {
            System.out.println("创建失败");
        }
        JdbcUtils.release(con,pre,re);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109

为了减少数据库增删查改时代码的编写量,和不必要的重复,可以考虑创建一个公共的查询方法和增、删、改方法。

这里引入一个object类型数组用来指定SQL中的条件值。

//数据库共查询方法
    public static ResultSet commentSelect(Connection con, PreparedStatement pst , String sql, Object[] objects) throws SQLException {
        pst = con.prepareStatement(sql);
        for (int i = 0;i <= objects.length-1 ;i++){
            pst.setObject(i+1,objects[i]);
        }
        ResultSet re = pst.executeQuery();
        return re;
    }

//公共增、删、改方法
public static void update(Connection con,PreparedStatement pre,String sql,Object[] objects) throws SQLException {
    pre = con.prepareStatement(sql);
    for (int i = 0; i <= objects.length-1; i++){
        pre.setObject(i+1,objects[i]);
    }
    int i = pre.executeUpdate();
    if (i > 0){
        System.out.println("更新成功");
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

查询测试

@Test
//采用公共类来查询数据
public void commentSelect() throws SQLException {
    Object[] object = {"信息管理与信息系统"};
    Connection con = JdbcUtils.getconnection();
    String sql = "select STU_NAME from T_STUDENT where SYSDBA.T_STUDENT.STU_MAJOR = ?";
    re = JdbcUtils.commentSelect(con, pre, sql, object);

    while (true) {
        if (!re.next()) break;
        System.out.println("STU_NAME:" + re.getObject(1));
        System.out.println();
    }
    JdbcUtils.release(con,pre, DmTest.re);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

5.2 Statement 类的使用方法

@Test
//使用测试statement查询数据
public void selectStatement() throws SQLException {
    Connection con = JdbcUtils.getconnection();
    Statement statement = con.createStatement();
    String sql = "select * from T_STUDENT";
    ResultSet re = statement.executeQuery(sql);

    while (true){
        if (!re.next()) break;
        System.out.println("姓名:"+re.getObject("STU_NAME")+"\t"+"学号:"+re.getObject("STU_NUMBER"));
    }

    //关闭资源
     if (con != null){
         con.close();
     }
     if (statement != null){
         statement.close();
     }
     if (re != null){
         re.close();
     }
}

@Test
//使用测试statement插入数据
public void insertStatement() throws SQLException {
    Connection con = JdbcUtils.getconnection();
    Statement statement = con.createStatement();
    String sql = "insert into t2 values(1,'xswl'),(2,'xktk')";
    int i = statement.executeUpdate(sql);
    if (i > 0){
        System.out.println("插入成功");
    }else {
        System.out.println("插入失败");
    }
    //关闭资源
    if (con != null){
        con.close();
    }
    if (statement != null){
        statement.close();
    }
    if (re != null){
        re.close();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48

修改、更新、删除的操作与插入类似,这里就不再提供示例。

6、DM8-Mybatis

注意:需手动导入dm8jdbc驱动

6.1 创建maven项目配置依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>mybatis</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>DM8-Mybatis</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.5</version>
        </dependency>
    </dependencies>

    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>
</project>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48

6.2 配置jdbc配置文件jdbc.properties

driver = dm.jdbc.driver.DmDriver
url = jdbc:dm://localhost:5236/useSSL=false&userUnicode=true&characterEncoding=utf8&serverTimezone=GMT
username = SYSDBA
password = wh17xktk!!
  • 1
  • 2
  • 3
  • 4

6.4 在pojo中编写数据库实体类

package pojo;

import java.util.Date;

/**
 * @ClassName User
 * @Description 用户实体类
 * @Author 浩儿
 * @Date 2021/5/31 19:41
 * @Version V1.0
 */
public class User {
    private Integer id;
    private String userCode;
    private String userName;
    private String userPassword;
    private Integer gender;
    private Date birthday;
    private String phone;
    private String address;
    private Integer userRole;
    private Integer createdBy;
    private Date creationDate;
    private Integer modifyBy;
    private Date modifyDate;
    
    有参构造
    无参构造
    get,set方法
    tostring方法
     
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

6.5 在util中编写mybatis工具类进行数据库连接

这里运用到了工厂模式SqlSessionFactory

package utils;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import javax.annotation.Resource;
import java.io.IOException;
import java.io.InputStream;

/**
 * @ClassName MybatisUtils
 * @Description mybatis工具类
 * @Author 浩儿
 * @Date 2021/5/31 19:44
 * @Version V1.0
 */
public class MybatisUtils {
    private  static  SqlSessionFactory sqlSessionFactory ;
    static {
        try {
            String resource = "mybatis-config.xml";
            //Ressoures调用getResourceAsStream方法读取resource文件并将它加载成流
            InputStream inputStream = Resources.getResourceAsStream(resource);
            //构建SqlSessionFactory工厂,以便获取Sqlsession.通过SqlSessionFactoryBuilder()类调用build方法构建SqlSessionFactory工厂。
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //获取sqlSession并返回。通过SqlSessionFactory工厂调用openSession()方法获取Sqlsession.注意Sqlsessoin中封装了所有SQL执行命令的方法。
    public  static SqlSession getSession(){
        return  sqlSessionFactory.openSession();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

6.6 在持久层编写接口类

package dao;

import pojo.User;

import java.util.List;

/**
 * @ClassName Usermapper
 * @Description 用户实体类
 * @Author 浩儿
 * @Date 2021/5/31 19:20
 * @Version V1.0
 */
public interface UserMapper {
    List<User>selectUser();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

6.7 在持久层1编写接口对应的实现类xml文件

namespace表示命名空间即对应的接口路径,id表示要实现的方法,resultType表示结果集类型,select * from smbms_user表示数据库操作语句。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="dao.UserMapper">
   <select id="selectUser" resultType="pojo.T_User">
    select * from MYSQL.T_USER
  </select>
</mapper>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

6.8 在test中编写测试类查看运行结果

import org.apache.ibatis.session.SqlSession;
import org.junit.jupiter.api.Test;
import pojo.User;
import utils.MybatisUtils;

import java.util.List;

/**
 * @ClassName MybatisTest
 * @Description mtbatis测试
 * @Author 浩儿
 * @Date 2021/5/31 20:00
 * @Version V1.0
 */
public class MybatisTest {
    @Test
    public void selectUser(){
        Gson gson = new Gson();
        //调用MybatisUtils中的getSession()方法获取Sqlsession
        SqlSession session = MybatisUtils.getSession();
        //session调用getMapper方法获取接口对象
        UserMapper mapper = session.getMapper(UserMapper.class);
        //调用接口方法返回查询到的结果集
        List<T_User> users = mapper.selectUser();

       for (T_User user: users){
            System.out.println(user);
        }
        String jsonListString = gson.toJson(users);
        System.out.println(jsonListString);
        session.close();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

img
如果还有任何问题,欢迎到达梦在线服务平台提问!
社区 | 达梦在线服务平台https://eco.dameng.com

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/590594
推荐阅读
相关标签
  

闽ICP备14008679号