Code Bye

java.sql.SQLException: Field 'xxx' doesn't have a default value

我今天做一个SQL INSERT 操作时出现一个问题。错误代码如下:
java.sql.SQLException: Field “”supplier_id”” doesn””t have a default value
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:946)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3277)
at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1402)
at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1317)
我的SQL是:insert into ball_court_test (city_id,price,oprice)values(“”12″”,””12″”,””123″”);
字面上面的意思是supplier_id需要填写赋值,而且我数据库设计上面supplier_id不为空,但是我不想那么麻烦。
我想要的结果是:我的SQL插入多少个值都帮我执行成功(而不是因为有其中某个值设置为不为空,而我也没有将此字段进行赋值),如果字段没有填写赋值的的部分,数据库自动去拿空字符串去填充。
我执行的SQL在客户端上面是可以执行成功的,所以我觉得是mysql的connector 的代码做了处理。能有人帮我解决下这个问题吗?

你没赋值吧。  
数据库字段你设置个默认为””不就是了

default “””” NOT NULL

我就是不想在数据库上面赋默认值,这样会导致数据库的设计很混乱。
引用 1 楼 rui888 的回复:

你没赋值吧。  

是啊,我是没有赋值。你可能没有明白我表达的意思。

引用 1 楼 rui888 的回复:

你没赋值吧。  

假如的数据库字段有ID,NAME,PASSWORD 都是不为空的

那么你设置个列自增 
引用 5 楼 xuelinmei_happy 的回复:
Quote: 引用 1 楼 rui888 的回复:

你没赋值吧。  

假如的数据库字段有ID,NAME,PASSWORD 都是不为空的

那我执行insert xxx (id,name)values(“”xxx””,””xxx””);
和执行insert xxx(id,name,password)values(“”xxx””,””xxx””,””xxx””);
都要成功,而不是说上面那个因为password没有赋值就失败,必须要全部不为空的字段都赋值才能执行成功。
上面那个SQL在客户端是可以执行成功的。

引用 6 楼 rui888 的回复:

那么你设置个列自增 

不是啊,我的数据库是所有的字段都不为null的,如果出现没有插入某个字段,数据库会默认帮我填充空字符串。
我在客户端是可以执行成功的,而且我前面一段时间使用PHP代码也是可以执行成功的,但是JAVA就是失败了,我怀疑是mysql的jar做了空字符串验证,但是不敢确定。

你设个  sql   default value
supplier_id是什么类型?mysql什么版本?在Enable Strict Mode为false的情况下,如果非NULL字段不填值,是按当前字段的默认值填充的。

序列没有初始化把。试试加
@BeanCopyIgnore
 private static final long serialVersionUID = 1L;

你的bean进行序列化处理:public class TCustomerBasic implements Serializable {

引用 10 楼 fangmingshijie 的回复:

supplier_id是什么类型?mysql什么版本?在Enable Strict Mode为false的情况下,如果非NULL字段不填值,是按当前字段的默认值填充的。

这个是字符串类型的,是的,我就是希望如果我没有填写的字段的话,数据库默认帮我自动插入当前字段类型的默认值,而不是通过我自己去设置默认值的情况而帮我插入。

引用 11 楼 juanmiao 的回复:

序列没有初始化把。试试加
@BeanCopyIgnore
 private static final long serialVersionUID = 1L;

你的bean进行序列化处理:public class TCustomerBasic implements Serializable {

我用的是纯JDBC,没有使用bean操作。

引用 10 楼 fangmingshijie 的回复:

supplier_id是什么类型?mysql什么版本?在Enable Strict Mode为false的情况下,如果非NULL字段不填值,是按当前字段的默认值填充的。

mysql 是5.6.17

设置可以默认为空
Enable Strict Mode是true还是false?
引用 16 楼 fangmingshijie 的回复:

Enable Strict Mode是true还是false?

不清楚啊,这个东西我没有听说过,我反正是没有动过,默认值是什么就是什么。请问这个东西是在哪里设置

mysql所在机器是什么系统?

20分
1、首先先说你报错这句话:Field “”supplier_id”” doesn””t have a default value。由此可以看出你supplier_id这个字段肯定是不能为空的,而你做插入操作的时候根本就没有给这个字段赋值,又没有赋默认值,所以报错了。
2、你想解决的问题是:就是你不写这个字段,不给他赋值,他也能插入成功,不报错。自动拿空字符串去填充。

解决办法:
第一种:
要么你就把那个字段不为空去掉,语句是这样的:alter table ball_court_test modify(supplier_id varchar2(100)  null );
第二种:
要么你就别默认为空字符串。默认个别的,比如说默认为””null”” 或者””default””  
语句是这样的:alter table ball_court_test modify(supplier_id varchar2(100) default “”null”” not null )

怎么样?解决你的问题了吗


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明java.sql.SQLException: Field 'xxx' doesn't have a default value