当前位置: 首页 > news >正文

做水果苹果大的网站小说排行榜

做水果苹果大的网站,小说排行榜,蜘蛛抓取网站模块原理,网站建设具体方案达梦数据库踩坑合集 文章目录 安装达梦设置大小写不敏感Spring boot引入达梦驱动(两种方式)将jar包打入本地maven仓库使用国内maven仓库(阿里云镜像) 达梦驱动yml配置springboot mybatis-plus整合达梦,如何避免指定数据库名&…

达梦数据库踩坑合集

文章目录

  • 安装达梦设置大小写不敏感
  • Spring boot引入达梦驱动(两种方式)
    • 将jar包打入本地maven仓库
    • 使用国内maven仓库(阿里云镜像)
  • 达梦驱动yml配置
  • springboot + mybatis-plus整合达梦,如何避免指定数据库名,设置指定库的指定数据库
    • 错误信息
    • 解决方案
  • 达梦 + mybatis timestamp、datetime 和 MySQL中的datetime数据类型的映射
    • 问题背景
    • 解决方案
  • 达梦TEXT数据类型在Java中不能映射为String类型
    • 错误信息
    • 解决方案
  • 达梦数据库将TEXT类型的字段更改为VARCHAR失败
    • 错误信息
    • 解决方案
  • 达梦数据库查询数据 No serializer found for class dm.jdbc.a.a.a and no properties discovered to create BeanSerializer
    • 错误原因
    • 解决方式
  • Error flushing statements. Cause: dm.jdbc.driver.DMException: 当前连接为只读状态
  • 参考博客

安装达梦设置大小写不敏感

达梦的大小写敏感设置,只能在安装的时候设置好,安装完成之后不可更改。我是用的是docker安装。在环境变量里设置"-e CASE_SENSITIVE=0",命令如下:

docker run -tid -p 5236:5236 --restart=always --name dm8 --privileged=true -e PAGE_SIZE=16 -e LD_LIBRARY_PATH=/opt/dmdbms/bin -e INSTANCE_NAME=dm8 -e CASE_SENSITIVE=0 -v /dm8_docker/data:/opt/dmdbms/data dm8_single:dm8_20230808_rev197096_x86_rh6_64

如果已经安装了,并且是大小写敏感的。需要将容器停止,然后删除容器,并将挂载目录(这里是 /dm8_docker/data)下的文件一起删掉。再重新执行以上命令。

# 进入容器: 
docker exec -it 7ccc57b47de3 /bin/bash
# 进入数据库: 
/opt/dmdbms/bin/disql
# 输入超级管理员账号和密码
# 达梦默认的账号密码是:
# 	username:SYSDBA
# 	password: SYSDBA001

附上官网截图:
在这里插入图片描述

Spring boot引入达梦驱动(两种方式)

将jar包打入本地maven仓库

  1. 从官网下载对应版本的jar包(官网:https://eco.dameng.com/document/dm/zh-cn/app-dev/),选择对应的语言、版本号和技术栈,我这里使用的是mybatis-plus。
    在这里插入图片描述

  2. 下载好之后,解压压缩包,进入压缩包文件夹
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  3. 在地址栏输入cmd,进入命令行,输入打包命令
    在这里插入图片描述

mvn install:install-file -Dfile=DmJdbcDriver18.jar -DgroupId=com.dm -DartifactId=DmJdbcDriver18 -Dversion=1.8 -Dpackaging=jar

出现build success即为成功。
在这里插入图片描述
本地仓库中存在了,即可在pom中直接引用

<dependency><groupId>com.dm</groupId><artifactId>DmJdbcDriver18</artifactId><version>1.8</version>
</dependency>

使用国内maven仓库(阿里云镜像)

maven坐标如下:

<dependency><groupId>com.dameng</groupId><artifactId>DmJdbcDriver18</artifactId><version>8.1.1.193</version>
</dependency>

拉取完成即可配置达梦数据库驱动。

达梦驱动yml配置

起因:
因为当前项目是基于MySQL数据做的,中途需要做信创,所以对达梦做的兼容。本人马大哈,一直启动不起来,报找不到达梦驱动 Caused by: java.lang.ClassNotFoundException: com.dm.jdbc.Driver 。
解决:
找了很多别人的yml配置,才发现自己把驱动的类名写错了。

错误写法:com.dm.jdbc.Driver
正确写法:dm.jdbc.driver.DmDriver

#   达梦数据库连接配置datasource:driver-class-name: dm.jdbc.driver.DmDriverurl: jdbc:dm://111.11.11.111:5236/MYDB?useUnicode=true&characterEncoding=utf8&tinyInt1isBit=false&allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=Asia/Shanghaiusername: MYDBpassword: 123456maxPoolSize: 100minPoolSize: 5

另外,还需要注意的是,url的配置,前缀是jdbc:dm//,因为我直接把mysql的配置C过来了,然后报错ERROR [com.alibaba.druid.pool.DruidDataSource] - create connection SQLException, url: jdbc:mysql://111.11.11.111:5236/MYDB?useUnicode=true&characterEncoding=utf8&tinyInt1isBit=false&allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=Asia/Shanghai, errorCode 0, state null 。
啊!我真菜!

springboot + mybatis-plus整合达梦,如何避免指定数据库名,设置指定库的指定数据库

错误信息

无效的表或视图名

### Cause: dm.jdbc.driver.DMException: 第1 行附近出现错误:
无效的表或视图名[t_authentication]
; 第1 行附近出现错误:
无效的表或视图名[t_authentication]; nested exception is dm.jdbc.driver.DMException: 第1 行附近出现错误:
无效的表或视图名[t_authentication]

将SQL放入达梦管理工具查询:
在这里插入图片描述
查询的表无法确认是哪一个模式中的,所以需要指定每一个实体的对应模式。

解决方案

如果在代码中每个去加模式名或视图名,那么代码和数据库的绑定关系过于紧密,不符合开发常识。

达梦数据库中一个数据库用户创建之后会自动生成一个默认的模式,默认模式名与用户名相同。使用默认模式名,可以避免在mybatis中的操作均需要加上模式名。

所以我们需要创建一个和模式名(库名)相同的用户,使用新建的用户登录,来访问对应的模式(库)。

  • 创建用户,在达梦管理工具的【用户】栏下,选择【管理用户】,右键,选择【新建用户】
    在这里插入图片描述
  • 填写好用户名(对应模式名,保持一致)、密码,配置用户角色和系统权限等信息即可。
    在这里插入图片描述
  • 使用新建的用户登录连接,即可看见对应名称的模式(库),然后在改模式下创建我们需要的数据表,完成之后,就可以不用添加模式前缀名,访问默认模式中的数据了。

达梦 + mybatis timestamp、datetime 和 MySQL中的datetime数据类型的映射

问题背景

因为项目原有的数据库为MySQL数据库,里面的create_time和update_time等字段均为datetime数据类型,对应Java的数据类型为Date()。

现在将MySQL的数据通过达梦数据迁移工具,将部分表导入到达梦,达梦中的日期类型就全都变为timestamp类型,导致mybatis在对数据进行新增时,默认日期字段的精度会在时分秒的后面拼接一个.023这类的数字。出现如下错误:

ClassTempItemValueMapper.insert (batch index #1) failed. Cause: java.sql.BatchUpdateException: 字符串截断
; 字符串截断; nested exception is java.sql.BatchUpdateException: 字符串截断
org.springframework.dao.DataIntegrityViolationException: com.ccnest.common.core.classtemp.mapper.ClassTempItemValueMapper.insert (batch index #1) failed. Cause: java.sql.BatchUpdateException: 字符串截断
; 字符串截断; nested exception is java.sql.BatchUpdateException: 字符串截断

解决方案

将达梦中的timestamp数据类型改为DATETIME
在这里插入图片描述
对象实体中为:

    /*** 创建时间*/@TableField(value = "created_time", fill = FieldFill.INSERT)@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")private Date createdTime;/*** 更新时间*/@TableField(value = "updated_time", fill = FieldFill.INSERT_UPDATE)@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")private Date updatedTime;

字符串截断的问题,还有可能是导入的时候,达梦将某些数据的字符串长度识别为1,或者较短的长度,导入达梦之后需要重新校验一下数据表的参数设置

达梦TEXT数据类型在Java中不能映射为String类型

错误信息

### Cause: dm.jdbc.driver.DMException: 第1 行附近出现错误:
数据类型不匹配
; 第1 行附近出现错误:
数据类型不匹配; nested exception is dm.jdbc.driver.DMException: 第1 行附近出现错误:
数据类型不匹配

解决方案

为保持MySQL和达梦对应Java中的数据类型不变,所以我这里采用的是修改达梦的字段数据类型为VARCHAR。
附上Java与达梦数据类型映射表,如下(供参考)
在这里插入图片描述

达梦数据库将TEXT类型的字段更改为VARCHAR失败

错误信息

错误消息: 第1 行附近出现错误:
数据类型的变更无效

在这里插入图片描述

解决方案

1、将字段删除重新加(弊端,非空情况,可能删不掉已存在的数据)
2、将数据备份出来,删除表,重新创建表,并导入数据

  • 将所需表的数据全都查询出来
    在这里插入图片描述
  • ctrl+A 全选,右键选择【导出所有】
    在这里插入图片描述

在这里插入图片描述

  • 将需要删除的表的DDL拷贝出来
    在这里插入图片描述
  • 将需要改为TEXT数据类型的定义改为VARCHAR
    在这里插入图片描述

达梦数据库查询数据 No serializer found for class dm.jdbc.a.a.a and no properties discovered to create BeanSerializer

完整错误信息如下:

Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class dm.jdbc.a.a.a and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: com.ccnest.base.aop.ResponseResult["data"]->com.baomidou.mybatisplus.extension.plugins.pagination.Page["records"]->java.util.ArrayList[0]->com.ccnest.common.core.flow.entity.vo.FlowNodeInstanceListVO["nodeVOs"]->java.util.HashMap["aafcf027e36c3cbb86e35abf88ee7425"]->java.util.ArrayList[0]->com.ccnest.common.core.flow.entity.vo.FlowNodeInstanceVO["itemValueList"]->java.util.ArrayList[0]->com.ccnest.common.core.flow.entity.vo.ItemValueVO["value"]->dm.jdbc.driver.DmdbNClob["connection"]->dm.jdbc.driver.DmdbConnection["dbAccess"]->dm.jdbc.a.a["b"])at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:77)at com.fasterxml.jackson.databind.SerializerProvider.reportBadDefinition(SerializerProvider.java:1300)at com.fasterxml.jackson.databind.DatabindContext.reportBadDefinition(DatabindContext.java:400)at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.failForEmpty(UnknownSerializer.java:46)at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.serialize(UnknownSerializer.java:29)at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728)at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:774)at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178)at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728)at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:774)at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178)at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728)at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:774)at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178)at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728)at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:774)at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178)at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serializeContents(IndexedListSerializer.java:119)at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serialize(IndexedListSerializer.java:79)at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serialize(IndexedListSerializer.java:18)at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728)at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:774)at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178)at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serializeContents(IndexedListSerializer.java:119)at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serialize(IndexedListSerializer.java:79)at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serialize(IndexedListSerializer.java:18)at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeFields(MapSerializer.java:808)at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeWithoutTypeInfo(MapSerializer.java:764)at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:720)at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:35)at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728)at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:774)at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178)at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serializeContents(IndexedListSerializer.java:119)at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serialize(IndexedListSerializer.java:79)at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serialize(IndexedListSerializer.java:18)at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728)at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:774)at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178)at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728)at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:774)at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178)at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:480)at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:319)at com.fasterxml.jackson.databind.ObjectWriter$Prefetch.serialize(ObjectWriter.java:1518)at com.fasterxml.jackson.databind.ObjectWriter.writeValue(ObjectWriter.java:1007)at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.writeInternal(AbstractJackson2HttpMessageConverter.java:456)

错误原因

因为Jackson在序列化的时候无法对值进行读写了

解决方式

1、修改yml配置

这个方法对于我的项目中无效。

spring:jackson: serialization: FAIL_ON_EMPTY_BEANS: false # 关闭

2、给传递的实体增加getter()和setter()方法,并加上有参构造和无参构造,例如:

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import java.io.Serializable;@Data
@NoArgsConstructor
@AllArgsConstructor
public class User implements Serializable {private String username;public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}
}

但是对于我的项目也没有生效。

3、使用自定义的HttpMessageConverter(亲测可用)

@Configuration
public class WebConfig implements WebMvcConfigurer {@Overridepublic void extendMessageConverters(List<HttpMessageConverter<?>> converters) {FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();converter.setSupportedMediaTypes(Collections.singletonList(MediaType.APPLICATION_JSON));converters.add(0, converter);}}

Error flushing statements. Cause: dm.jdbc.driver.DMException: 当前连接为只读状态

在使用spring boot + mybatis-plus是,将业务实现类xxxImpl的隔离级别写成了

@Transactional(readOnly = true, propagation = Propagation.REQUIRED)

改成

@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)

真是不可思议,这么久都没发现

参考博客

  • JAVA数据类型对应DM数据库类型
  • 达梦数据库表导出的两种方法
  • 达梦数据库将TEXT类型的字段更改为VARCHAR失败
  • No serializer found for class dm.jdbc.a.a.a and no properties discovered to create BeanSerializer 达梦
  • 达梦数据库用户与模式
http://www.hkea.cn/news/672487/

相关文章:

  • 找网站建设公司哪家最好沈阳市网站
  • sh域名做的好的网站什么是营销
  • 网站平台怎么做推广一站式网络推广服务
  • 百度对新网站排名问题兰州seo快速优化报价
  • 网站建设常用代码湘潭网络推广
  • 做网站上传图片一直错误好用搜索引擎排名
  • 钟祥网站建设网络推广的含义
  • 新闻类网站源码青岛官网seo
  • 网站优化哪里可以做百度营销客户端
  • 常德建设局网站北京优化网站方法
  • 用ip做网站优化手机流畅度的软件
  • 为网站添加统计媒介
  • 商业设计网站推荐互联网营销师证书是国家认可的吗
  • 做网站的是干嘛的怎样把自己的产品放到网上销售
  • 品牌型网站制作价格2022年小学生新闻摘抄十条
  • 政府网站群集约化建设网络暴力事件
  • 可以做卷子的网站游戏app拉新平台
  • 长沙优化网站关键词社区营销
  • 个人网站制作价格表重庆关键词优化
  • 网站开发ideseo优化网站模板
  • 关于制作网站收费标准怎样把个人介绍放到百度
  • 网站建设 绵阳百度开放平台
  • discuz修改网站标题微信小程序开发平台
  • 怎么做国内网站吗seo顾问培训
  • 网站排名不稳定怎么办seo+网站排名
  • 做网站要淘宝热搜关键词排行榜
  • 做网站 创业 流程网络建站流程
  • 怎么做购物网站系统文本广州网络营销推广
  • 网站后台管理系统cms推广seo网站
  • 企业网站备案注销百度推广登陆平台