OwlFocus

Via


  • 首页

  • 分类

  • 归档

  • 标签

  • 搜索
close
OwlFocus

Mysql sql-mode problem

发表于 2017-05-08 | 分类于 program

数据库中开启非严格模式,插入数据时,不插入非空字段,在navicat中执行语句没有问题;在java中执行相同的语句却出现如下错误。

error

java.sql.SQLException:Field ‘status’ does not have a default value

数据库设置

  • status在数据库存中设置not null,并且没有默认值。
  • sql_mode=’’;

设置 sql_mode

查看当前连接会话的sql模式:
mysql> select @@session.sql_mode;
或者从环境变量里取
mysql> show variables like “sql_mode”;
查看全局sql_mode设置:
mysql> select @@global.sql_mode;
只设置global,需要重新连接进来才会生效

Set sessionVariables

尝试设置sessionVariables,修改sql-mode属性,结果还是相同的问题。

1
jdbc:mysql://localhost:3306/db?sessionVariables=sql_mode=

mysql-connector-java-.jar

经排查,驱动包会默认加上STRICT_TRANS_TABLES,导致java中无法开启非严格模式。
类:
com.mysql.jdbc.ConnectionImpl.java
以下是设置方法:

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
private void setupServerForTruncationChecks() throws SQLException {
if (getJdbcCompliantTruncation()) {
if (versionMeetsMinimum(5, 0, 2)) {
String currentSqlMode = this.serverVariables.get("sql_mode");
boolean strictTransTablesIsSet = StringUtils.indexOfIgnoreCase(currentSqlMode, "STRICT_TRANS_TABLES") != -1;
if (currentSqlMode == null || currentSqlMode.length() == 0 || !strictTransTablesIsSet) {
StringBuilder commandBuf = new StringBuilder("SET sql_mode='");
if (currentSqlMode != null && currentSqlMode.length() > 0) {
commandBuf.append(currentSqlMode);
commandBuf.append(",");
}
commandBuf.append("STRICT_TRANS_TABLES'");
execSQL(null, commandBuf.toString(), -1, null, DEFAULT_RESULT_SET_TYPE, DEFAULT_RESULT_SET_CONCURRENCY, false, this.database, null, false);
setJdbcCompliantTruncation(false); // server's handling this for us now
} else if (strictTransTablesIsSet) {
// We didn't set it, but someone did, so we piggy back on it
setJdbcCompliantTruncation(false); // server's handling this for us now
}
}
}
}

解决

后面妥协了,给数据库字段加默认值。

其它

sql_mode=STRICT_TRANS_TABLES
设置它,表示启用严格模式。

MySQL sql_mode 说明

How to set MySQL ANSI_QUOTES mode via MySQL Java Connector?

OwlFocus

如何阅读一本小说

发表于 2017-05-07 | 分类于 life
  1. 小说总在死去,总是会耗尽它的动力,也总能得到更新,被重新创造。

  2. 或许对小说家来说,最难的就是决定由谁来讲故事。

  3. 想象的花园里,有真实的蛤蟆。

  4. 如果小说本身很糟糕,它的哲思再好也没用。

  5. 海明威的句子表面上说得很少,但是,意义却很丰富。你说这有些自相矛盾?那好,他要表现的就是自相矛盾。他的意思并不在那些词语里,而在词语周围的沉默中。

  6. 每部小说都是场激烈的表演,是与它自己时代的历史社会力量的角力。有时候,小说赢了;有时候,历史赢了。

  7. 现在所有的、过去曾有的、将来会有的,都只是一个故事,而且一个故事就够了。

OwlFocus

Convert JSON Object to Java bean

发表于 2017-05-06 | 分类于 program

Convert JSON Object to Java bean

Use BeanUtilsBean2 (org.apache.commons.beanutils.BeanUtilsBean2).

1
2
3
4
com.alibaba.fastjson.JSONObject updateObj=new com.alibaba.fastjson.JSONObject();
Entity entity=new Entity();
//将JSONObject属性复制到实体中
BeanUtilsBean2.getInstance().copyProperties(entity, updateObj);
1…101112…55
ljzhuanjiao@gmail.com

ljzhuanjiao@gmail.com

在快节奏时代,我不能在慢中消亡!!!

163 日志
5 分类
53 标签
© 2016 - 2018 ljzhuanjiao@gmail.com
由 Hexo 强力驱动
主题 - NexT.Pisces