我今天做一个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 的代码做了处理。能有人帮我解决下这个问题吗?
------解决思路----------------------
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 )
怎么样?解决你的问题了吗