java.sql.SQLException:字段'supplier_id'没有默认值

问题描述 投票:0回答:7

我收到一个错误信息:

 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)

大家可以帮帮我吗? 我的数据库字段不为空。 但我想得到这个结果:

insert into xxx(name,password)values('xxx','xxx');
insert into xxx(name,password,man)values('xxx','xxx','xxx');
两者都成功(两者在客户端都是成功的,但在 java 代码中是错误的,错误代码在顶部标题),而不是
insert into xxx(name,password)values('xxx','xxx')
是假的; 我的 mysql jar 是 mysql-connector-java-5.0.8

java mysql sql
7个回答
32
投票

错误是不言自明的。您的列

supplier_id
没有默认值。所以在插入的时候,mysql无法判断在
supplier_id
列中插入什么。您可以做以下三件事中的任何一件:-
1.给列添加默认值
supplier_id
使用-

ALTER TABLE `xxx` ALTER `supplier_id` SET DEFAULT NULL


2. 在插入期间为

supplier_id
列提供一些值。
3. 向列添加一个自动增量并使用代码向其添加一个主键:-

ALTER TABLE `xxx` CHANGE `supplier_id` `supplier_id` INT(10)AUTO_INCREMENT PRIMARY KEY;

4
投票

要解决此问题,请在执行

supplier_id
时为
INSERT
提供一个值,或者在数据库中创建列
nullable


1
投票

可能有两种情况。

  1. 您已将列的默认值声明为 NONE,并且在插入时未向其传递任何值。

  2. 您已经在数据库中声明了该列,但您没有在实体对象中声明相同的列,这导致了错误。


1
投票

我添加了这个属性

<property name="hbm2ddl.auto">create</property>

进入

hibernate.cfg.xml
文件,它对我有用。


1
投票

这个错误说 Field 有一个 Default 值意味着它不是自动增量所以你做的第一件事是,

转到 Mysql 并选择 Alter Table 并检查 Auto Increment

Even So, you getting this Error 按照以下说明进行操作。

  • 有时即使在执行 SchemaUpdate 之后,对模型或 ORM 所做的更改也可能无法准确反映在数据库中。 该错误实际上似乎缺乏合理的解释,请尝试重新创建数据库或至少创建一个新数据库并使用 SchemaExport
  • 构建它

0
投票

您正在使用具有 supplier_id 列的表。它没有默认值,在插入时此列未获得任何值。使用一些默认值初始化 supplier_id 列,或者如果您使用 supplier_id 作为主键,则使用自动递增。


-1
投票

在我的例子中,问题是主键列没有设置为 AUTO_INCREMENT

我是这样解决的:

alter table library modify column Id int NOT NULL AUTO_INCREMENT;
© www.soinside.com 2019 - 2024. All rights reserved.