openGauss2.0.0之Java简单测试Sequence

news2025/1/18 11:46:00

openGauss2.0.0之Java测试Sequence

    • 一、实验环境
    • 二、实验目标
    • 二、实验步骤

一、实验环境


项目Value
操作系统openEuler
服务器华为云弹性云服务器ECS 1 台 2核心 4GB内存
数据库openGauss2.0.0 单机部署

二、实验目标


  • 目标

    学习openGauss2.0.0的序列的使用,熟悉JDBC编程方式操作openGauss数据库

  • 知识点

    •Sequence是一个存放等差数列特殊表。这个表没有实际意义,通常用于为行或者表生成唯一的标识符
    •如果给出一个模式名,则该序列就在给定的模式中创建,否则会在当前模式中创建。序列名必须和同一个模式中的其他序列、表、索引、视图或外表的名称不同
    •创建序列后,在表中使用序列的nextval()函数和generate_series(1,N)函数对表插入数据,请保证nextval的可调用次数大于等于N+1次,否则会因为generate_series()函数会调用N+1次而导致报错。

    序列Sequence是用来产生唯一整数的数据库对象序列的值是按照一定规则自增的整数。因为自增所以不重复,因此说Sequence具有唯一标识性。这也是Sequence常被用作主键的原因
    通过序列使某字段成为唯一标识符的方法有两种:
    1. 一种是声明字段的类型为序列整型,由数据库在后台自动创建一个对应的Sequence。
    2. 另一种是使用CREATE SEQUENCE自定义一个新的Sequence,然后将nextval(‘sequence_name’)函数读取的序列值,指定为某一字段的默认值,这样该字段就可以作为唯一标识符。

    在Data Studio中查看序列,如下图所示:
    在这里插入图片描述
    序列默认:
    最大值为:9223372036854775807
    最小值为:1
    自增步长为:1
    开始值为:1
    随着关联序列的数据库表的增加,last_value也会变化,记录数据库表中关联字段的最后一个数值。

二、实验步骤


  1. 前置步骤:

    • openGauss已经正常安装到ECS服务器中了
  2. 在IDEA中创建工程,并把从官网下载下来的JDBC驱动包放入到该项目工程下的lib(需先创建)目录下,并将驱动包Add as liberary添加到工程中即可;项目工程如下:
    在这里插入图片描述

  3. 编写程序,程序代码如下:

    package com.opengauss.demo;
    
    import java.sql.*;
    import java.util.Properties;
    
    public class SequenceTest {
        public static void main(String[] args) throws SQLException {
            // 获取链接
            Connection conn = getConnect("test001", "suben", "openGauss@1234");
            // 可先保证数据库中不存在表和sequence
            // doBySQL(conn, 0, "drop table t5 cascade;");
            // doBySQL(conn, 0, "drop sequence seq3 cascade;");
            // 创建sequence
            doBySQL(conn, 0, "create sequence seq3;");
            // 查看sequence
            System.out.println("=============创建时sequence中的内容如下=============");
            select(conn, "select * from seq3;",false,false);
            // 创建关联了sequence的表
            doBySQL(conn, 0, "create table if not exists t5(id int not null default nextval('seq3'),name text);");
            // 插入数据到表中
            doBySQL(conn, 1, "insert into t5(name) values(?)");
            // 查看数据表
            select(conn,"select * from t5 order by id desc limit 3;",true,false);
            // 查看sequence
            System.out.println("=============关联数据表插入数据后,sequence中的内容如下=============");
            select(conn, "select * from seq3;",false,true);
        }
        
        public static Connection getConnect(String db, String user, String pwd) {
            String driver = "org.postgresql.Driver";
            // 需要创建新的数据库用户,使用新的数据库用户连接
            String sourceURL = "jdbc:postgresql://1xx.7x.x9.1x8:26000/" + db + "?";
            Properties properties = new Properties();
            properties.setProperty("user", user);
            properties.setProperty("password", pwd);
            Connection conn = null;
            try {
                Class.forName(driver);
            } catch (Exception var9) {
                var9.printStackTrace();
                return null;
            }
            try {
                conn = DriverManager.getConnection(sourceURL, properties);
                System.out.println("连接成功! ");
                return conn;
            } catch (Exception var8) {
                var8.printStackTrace();
                return null;
            }
        }
    
        public static void doBySQL(Connection conn, int flag, String sql) throws SQLException {
            Statement statement = conn.createStatement();
            if (flag == 0) {
                statement.execute(sql);
            } else {
                conn.setAutoCommit(false); // 设置不自动提交 默认下是自动提交的
                PreparedStatement prs = conn.prepareStatement(sql);
                for (int i = 1; i <= 20000; i++) {
                    prs.setString(1, "第" + i + "次");
                    prs.addBatch(); // 将处理后的SQL都装在一个容器中
                    if (i % 500 == 0) {
                        prs.executeBatch(); // 提交
                        prs.clearBatch(); // 清空容器
                    }
                    conn.commit(); // 提交事务
                }
            }
        }
    
        public static void select(Connection conn, String sql,boolean isTable,boolean isClosed) throws SQLException {
            PreparedStatement preparedStatement = conn.prepareStatement(sql);
            ResultSet resultSet = preparedStatement.executeQuery();
            while (resultSet.next()) {
               if (isTable){
                   System.out.println(
                           resultSet.getString(1)
                                   + "\t" + resultSet.getString(2));
               }else {
                   System.out.println(
                           resultSet.getString(1)
                                   + "\t" + resultSet.getString(2)
                                   + "\t" + resultSet.getString(3)
                                   + "\t" + resultSet.getString(4)
                                   + "\t" + resultSet.getString(5));
               }
            }
            if (isClosed){
                if (preparedStatement != null) {
                    preparedStatement.close();
                }
                if (conn != null) {
                    conn.close();
                }
            }
        }
    }
    
    
  4. 运行程序,查看结果如下所示:
    在这里插入图片描述

至此,单表关联序列的实验到此结束,大家可以尝试一个序列关联多张表的时候,会发生什么呢?欢迎大家自行实验后,给留言,分享你们的测试结果和测试结论。如果您觉得有用,可点赞可转发给身边的朋友,大共同成长!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/161824.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(10)QWidget的使用(one)

目录 QWidget的大小和位置 获取QWidget的大小和位置 设置QWidget的大小和位置 设置窗口固定大小 限定窗口的大小 坐标系统转换 内容边距 鼠标指针 鼠标指针的形状 自定义光标的使用 获取和设置光标的坐标 QWidget类是所有可视控件的基类&#xff0c;控件是用户界面…

【C进阶】内存函数

家人们欢迎来到小姜的世界&#xff0c;<<点此>>传送门 这里有详细的关于C/C/Linux等的解析课程&#xff0c;家人们赶紧冲鸭&#xff01;&#xff01;&#xff01; 客官&#xff0c;码字不易&#xff0c;来个三连支持一下吧&#xff01;&#xff01;&#xff01;关注…

Spring知识点记录

Spring知识点1. Spring简介&#xff08;此章略过&#xff09;1.1 Spring概述1.2 Spring家族1.3 Spring Framework2. IOC2.1 IOC容器2.2 基于XML管理bean2.2.1 入门案例&#xff08;ioc容器的整体思路&#xff09;2.2.2 获取bean的三种方式2.2.3 依赖注入2.2.3.1 setter注入2.2.…

指针数组与数组指针---傻傻分不清楚?

目录1.指针数组2.数组指针1.指针数组 什么是指针数组呢&#xff1f; 我们通过以前学过的数组进行类比&#xff1a; 整形数组是存放整形的数组字符数组是存放字符的数组所以&#xff0c;指针数组是存放指针(地址)的数组 整形数组的书写形式是int arr[10]&#xff0c;字符指针…

uniapp兼容小程序和H5遇见的坑

目录 一、报错 vue service.requestcomponentinfo:typeerror:cannot read property matches undefined H5不兼容uni-app的image标签 小程序externalClasses不兼容h5 H5不兼容van-picker和van-datetime-picker 一、报错 vue service.requestcomponentinfo:typeerror:cannot r…

【C语言进阶】 一篇带你掌握字符串和内存函数

目录一&#xff1a;strlen模拟实现&#xff1a;二&#xff1a;strcpy模拟实现&#xff1a;三&#xff1a;strcat模拟实现&#xff1a;四&#xff1a;strcmp模拟实现&#xff1a;五&#xff1a;strncpy模拟实现&#xff1a;六&#xff1a;strncat模拟实现&#xff1a;七&#xf…

如何正确地连接PLC与7种设备的输入输出线路

正确地连接输入和输出线路&#xff0c;是保证PLC可靠工作的前提。想要正确地连接PLC与7种设备的输入输出线路&#xff0c;就需注意以下几个方面&#xff1a;1.PLC与主令电器类设备的连接下图是PLC与按钮、行程开关、转换开关等主令电器类输入设备的接线示意图。图中的PLC为直流…

3、运算符

目录 一、算数运算符 二、关系运算符 三、逻辑运算符 一、算数运算符 MATLAB中的算术运算符有加、减、乘、除、点乘、点除等&#xff0c;其运算法则表&#xff1a; 示例1&#xff1a;数值与矩阵的算术运算 Aeye(2)Bones(2)CA*BDA.*B 运行结果&#xff1a; 此外&#xff0…

25.数组指针取*,指针和函数的关系,指针作为函数的参数

数组指针取* 数组指针取*&#xff0c;并不是取值的意思&#xff0c;而是指针的类型发生变化&#xff1b; 一维数组指针取*&#xff0c;结果为它指向的一维数组第0个元素的地址&#xff0c;它们还是指向同一个地方。二维数组指针取*&#xff0c;结果为一维数组指针&#xff0c…

Excel实战 第1章 数据处理

目录1 数据规范2. 导入数据3. 数据清洗3.1 重复数据处理3.2 缺失数据处理3.3 空格数据处理1 数据规范 2. 导入数据 3. 数据清洗 3.1 重复数据处理 数据透视表法&#xff08;首选&#xff09; 选中A、B两列&#xff0c;点击【插入】–》【数据透视表】 把号码拉到【行】&…

LeetCode 207. 课程表

&#x1f308;&#x1f308;&#x1f604;&#x1f604; 欢迎来到茶色岛独家岛屿&#xff0c;本期将为大家揭晓LeetCode 207. 课程表&#xff0c;做好准备了么&#xff0c;那么开始吧。 &#x1f332;&#x1f332;&#x1f434;&#x1f434; 一、题目名称 LeetCode 207. …

图表控件LightningChart.NET 系列教程(六):许可证管理介绍(下)

LightningChart.NET SDK 是一款高性能数据可视化插件工具&#xff0c;由数据可视化软件组件和工具类组成&#xff0c;可支持基于 Windows 的用户界面框架&#xff08;Windows Presentation Foundation&#xff09;、Windows 通用应用平台&#xff08;Universal Windows Platfor…

Docker面试题(史上最全 + 持续更新)

专题37&#xff1a;Docker面试题&#xff08;史上最全、定期更新&#xff09; 本文版本说明&#xff1a;V26 《尼恩面试宝典》升级的规划为&#xff1a; 后续基本上&#xff0c;每一个月&#xff0c;都会发布一次&#xff0c;最新版本&#xff0c;可以联系构师尼恩获取&…

VALL-E:Neural Codec Language Models are Zero-Shot Text to Speech Synthesizers

文章目录NLP中Bert的进展历史word embeddingELMOGPTBertAudioLM: a Language Modeling Approach to Audio Generationabstractintrorelated workVALL-E:Neural Codec Language Models are Zero-Shot Text to Speech Synthesizersabstractspeech quantizationtraining:condition…

程序的机器级表示part2——访问信息

目录 1. 整数寄存器 2. 操作数指示符与寻址模式 3. 数据传送指令 4. 压入和弹出栈数据 1. 整数寄存器 一个x86-64的CPU包含一组16个存储64位值的通用目的寄存器(general-purpose registers) 整型寄存器x86-64的CPU是64位的&#xff0c;因此相应的寄存器长度与机器字长(数据…

基于matlab实现的水果识别系统+源码+代码注释

水果识别 摘要&#xff1a; 本项目针对多种常见水果混合的图像&#xff0c;利用 Matlab 软件&#xff0c;对水果的识别进行研究。根据水果和背景的差别选取阈值&#xff0c;对去噪增强对比度后的图像进行二值化处理。再对图像进行边缘检测&#xff0c;选定连通区域&#xff0…

仅需一个注解,实现springboot项目中的隐私数据脱敏

文章参考&#xff1a; 仅是为了方便查看&#xff0c;因此在此记录一下​​​​​​​ 目录 1. 创建隐私数据类型枚举&#xff1a;PrivacyTypeEnum 2. 创建自定义隐私注解&#xff1a;PrivacyEncrypt 3. 创建自定义序列化器&#xff1a;PrivacySerializer 4. 隐私数据隐藏工…

高德地图开发之地图配置及vue上初始化创建地图

开门见山地说&#xff0c;现如今地图相关的开发业务在工作中越来越常见&#xff0c;目前市面上主流的地图开发还是以百度和高德为主&#xff0c;今天就来讲一下高德地图的配置和在vue上的初始化创建&#xff0c;帮助大家更好更快的了解高德地图开发相关的内容。 一. 注册地图 …

Python协程的四种实现方式

今天继续给大家介绍Python关知识&#xff0c;本文主要内容是Python协程的四种实现方式。 一、yield关键字实现方式 以yield关键字方式实现协程代码如下所示&#xff1a; def fun1():yield 1yield from fun2()yield 2def fun2():yield 3yield 4f1fun1() for item in f1:print…

steam搬砖项目靠谱吗?怎么样?

Steam搬砖’通俗来讲&#xff1a;小白都可以轻松上手&#xff0c;不需要会玩游戏&#xff0c;项目就是利用低价美金充值卡&#xff0c;从国外Steam平台购买CS:GO游戏装备回来&#xff0c;在国内网易BUFF平台售卖&#xff0c;低买高卖&#xff0c;产生利润的一个项目 首先&…