国产数据库--DM(达梦数据库)

作者:jcmp      发布时间:2021-04-12      浏览量:0
公司简介 武汉华工达梦数据库有

公司简介

武汉华工达梦数据库有限公司(达梦公司)是国家规划布局内重点软件企业。公司成立于2000年11月,得到了国家计委、科技部、信息产业部、总装备部、公安部等中央部委、省市政府的支持扶植。


达梦数据库

达梦数据库管理系统是达梦公司推出的具有完全自主知识产权的高性能数据库管理系统,DM7是达梦公司在总结DM系列产品研发与应用经验的基础之上设计的新一代数据库产品,吸收主流数据库产品的优点。众多的企业级特性的实现使得DM7完全能够满足大、中型企业以及金融、电信等核心业务系统的需要,是理想的企业级数据管理和分析平台。


收费说明

开发版可免费使用一年(根据下载使用的版本发布编译日期算起),到期后需要购买正式版,购买价格需联系厂家。


安装及配置

1. 安装

2. 实例化

安装后需要实例化数据库,需要用到数据库配置助手,以Windows为例,
开始-->所有程序-->达梦数据库,如下:


基本概念介绍

配置完成后,打开DM管理工具,如下:


进入后,选择刚才实例化的数据库对象,输入口令,登录数据库,出现以下界面:

这里主要简单介绍以下几个重要的概念:数据库、实例、用户、表空间、模式、表、角色、数据文件。

1. 数据库

数据存储的物理介质。广义上讲任何存储数据的物理介质都可叫着数据库,例如一个word文档。但实际上,我们说数据库一般是指像MySQL,ORACLE, HBASE等之类的软件系统。这些系统除了提供数据的存储外,还提供一整套相关的工具或接口对存储的数据进行管理。达梦数据库就是这样的一种系统。

2. 数据库实例

已实例化可存储数据的仓库。达梦数据库一个实例就只能挂一个数据库(即一个实例就是一个数据库),如果想建多个数据库,则需配置启动相应数量的实例。达梦的每个实例有一系列的后台进程和内存结构,这些是相互独立的。

3. 用户

达梦数据库用户是建在实例下的,因为实例相互独立,所有达梦数据库不同的实例下可以有相同的用户名。另外,在达梦数据库中通过create user语句创建用户时,会同时创建一个同名的“模式”。也可以通过create schema语句单独创建模式(特别注意:在Oracle中,用户与schema是一一对应的,不能单独创建模式,要想创建模式得需通过创建一个同名用户来实现),并授权给某个已存在的用户,因此在达梦数据库中用户与模式是1:N的关系。(注:如果先通过create schema创建了模式,再通过create user创建同名用户,不能创建成功。)

4. 表空间

是一个用来管理数据存储的概念,表空间只是和数据文件(ORA或者DBF文件)发生关系,数据文件是物理的,一个表空间可以包含多个数据文件,而一个数据文件只能隶属一个表空间。可以将表空间理解为对应一块物理存储区,专门用来存储数据文件。实例化达梦数据库时,默认会创建MAIN、ROLL、SYSTEM、TEAM及HMAIN五个表空间。ROLL、SYSTEM、TEAM表空间系统自行维护,用户所建表(如果未指定存放表空间的话)默认放在MAIN表空间。用户也可自定义表空间,然后在创建用户时指定为默认表空间;也可以在建表时通过加"tablespace SpaceName"语句动态指定该表的存储表空间。

5. 模式(schema)

6. 表

在达梦数据库中,一个表只能属于一个表空间。

7. 角色

在达梦数据库中,每个用户都有角色。它决定了该用户有什么权限,比如DBA,拥有最高权限。补充说明一点是,实例化的达梦数据库默认有3种角色:DBA, PUBLIC,RESOURCE。新建的用户只拥有PUBLIC角色,该角色几乎做不了什么,因此一般新建用户后,需要单独对他(她)进行授权。

8. 数据文件

数据的物理载体。


数据库操作


IDEA中使用JDBC连接数据库

1、下载JDBC驱动;

2、在IDEA中新建项目,将上一步下载的JDBC的jar包复制到lib项目下,并添加至项目

3、连接数据库示例

package tools;import java.sql.*;public class baseDao {    public static void main(String[] args) {        String urlString = "jdbc:dm://LOCALHOST:5236/LOCALHOST";        String userName = "用户名";        String password ="密码";        Connection conn = null;        try {            System.out.println("Loading JDBC Driver...");            // 加载 JDBC驱动程序            Class.forName("dm.jdbc.driver.DmDriver");            System.out.println("Connecting to DM Server...");            // 连接 DM 数据库            conn = DriverManager.getConnection(urlString, userName, password);            System.out.print("连接成功");            //sql查询            String sql = "SELECT * FROM mes_dept";            Statement stmt = conn.createStatement();            // 执行查询            ResultSet rs = stmt.executeQuery(sql);            while (rs.next()){                System.out.print(rs.getString(2));            }        } catch (ClassNotFoundException e) {            try {                throw new SQLException("Load JDBC Driver Error : " + e.getMessage());            } catch (SQLException e1) {                e1.printStackTrace();            }        } catch (SQLException e) {            e.printStackTrace();        }    }    }

首先需要加载达梦的JDBC驱动程序,调用 Class.forName() 方法即可,驱动程序会自动调用 DriverManager的 registerDriver() 方法进行注册。
数据库连接调用DriverManager的 getConnection() 方法 ,该方法需要传入三个参数,分别是数据库连接字符串、用户名和密码。连接成功后即可执行相应sql操作。


存储过程

在java中调用存储过程如下:

package tools;import java.sql.*;public class baseDao {    public static void main(String[] args) {        String urlString = "jdbc:dm://LOCALHOST:5236/LOCALHOST";        String userName = "用户名";        String password ="密码";        Connection conn = null;        try {            System.out.println("Loading JDBC Driver...");            // 加载 JDBC驱动程序            Class.forName("dm.jdbc.driver.DmDriver");            System.out.println("Connecting to DM Server...");            // 连接 DM 数据库            conn = DriverManager.getConnection(urlString, userName, password);            System.out.print("连接成功");            CallableStatement cstmt = conn.prepareCall("call p1(?, ?)");            cstmt.setInt(1, 1);            cstmt.registerOutParameter(2, Types.VARCHAR);            cstmt.executeUpdate();            String x = cstmt.getString(2);            System.out.println(x);        } catch (ClassNotFoundException e) {            try {                throw new SQLException("Load JDBC Driver Error : " + e.getMessage());            } catch (SQLException e1) {                e1.printStackTrace();            }        } catch (SQLException e) {            e.printStackTrace();        }    }    }

这里调用存储过程需要使用Connection对象的 prepareCall() 方法,传入一个字符串格式为:call 存过名(参数占位符),然后设置入参出参执行即可。