java - 为什么 Spring 的 JDBC 模板不使用表的默认值

标签 java mysql sql spring jdbctemplate

我在 MYSQL 中有一个表,我正在使用 JDBC 模板向该表中插入数据。

其中一列有默认值,我没有在 Map<String, Object> parameters 中指定它 map 。

我遇到异常 Column 'colName' cannot be null .

有人能解释一下吗?

谢谢

*编辑:代码*

contactDetailsInsertTemplate = new SimpleJdbcInsert( dataSource ).withTableName("contactdetails").usingGeneratedKeyColumns("contactcode");
Map<String, Object> parameters = new HashMap<String, Object>();
Number newId = contactDetailsInsertTemplate.executeAndReturnKey(parameters);

最佳答案

您需要限制在 SQL Insert 中指定的列。

参见 SimpleJdbcInsert.usingColumns()

如果不这样做,SQL 语句将需要所有列的值,并且不能使用默认值。

例如使用

insert into mytable (col1, col2) values (val1, val2);

代替

insert into mytable values (val1, val2);

关于java - 为什么 Spring 的 JDBC 模板不使用表的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20497985/

相关文章:

java - Mysql 5.5 访问被拒绝 <-- Jboss 7

sql - 如何在嵌套查询中两次避免 "group by"

mysql - 模拟 row_number() 的此 mysql 查询的 MSSQL 等效项

java - 在 VSCode 上的远程 WSL 中配置 Java 扩展包

java - actionPerformed() 在调整 JFrame 大小后执行多次

java - 根据 int 数组中的数据填充二维整数数组

java - Java 中的字段默认是私有(private)的吗?

mysql - 分组依据并显示按行信息分组,并在其下方的其他表中显示具有其 ID 的行

android - 将android应用程序连接到谷歌云

mysql - 根据连接评估的条件对 mysql 表中的字段进行计数