【问题标题】:How can we save the form data from jsp file in database using spring boot?我们如何使用spring boot将jsp文件中的表单数据保存到数据库中?
【发布时间】:2019-09-19 11:08:21
【问题描述】:

我正在创建一个 Spring Boot API,它基本上要求用户创建一个帐户。 帐户详细信息显示在表格上。 我想从表单中获取详细信息并将其保存到数据库(MYSQL)中。

模型类如下:

@Table(name = "user")
public class User {

    @Id
    @Column(name = "ID")
    private int ID;

    @Column(name = "Fname")
    private String fName;

    @Column(name = "Lname")
    private String lName;

    @Column(name = "dob")
    private String dob;

    @Column(name = "email")
    private String email;

    @Column(name = "pWord")
    private String pWord;
}

控制器类如下:

public class MController {

    @Autowired
    private UserRepository userRepository;

    @PostMapping("/successSignUp")
    public String dataToDB(@ModelAttribute("User") User formData, Model model) {

        userRepository.save(new User(formData.getFname(), formData.getLname(), formData.getDob(), formData.getEmail(), formData.getPassword()));    
        model.addAttribute("user", new User());
        return "welcomeUser";
    }

当我执行此代码时,我收到以下错误:

java.sql.SQLSyntaxErrorException: Unknown column 'p_word' in 'field list'

我在这里做错了什么? 提前致谢。

【问题讨论】:

  • 你认为这到底是什么意思:'字段列表'中的未知列'p_word''是什么意思?
  • @AniketSahrawat,我在数据库中有一个名为 pWord 的列,这就是我在 User 类中使用 @Column(name="pWord) 的原因。
  • 你没有错过@Entity 注释吗?
  • 你能告诉我们你的repository吗?
  • 能否也附上 DB 列?@Paplusc 是的,@Entity 也应该在那里。

标签: java mysql spring spring-boot spring-data-jpa


【解决方案1】:

Spring 框架在内部将骆驼案例改为蛇案例。

这是 Spring Boot 命名策略的一部分: 我们可以覆盖这些值,但默认情况下,它们会:

  1. 骆驼箱换蛇箱
  2. 用下划线替换点
  3. 小写表名

您可以尝试将列名更新为 pword 而不是 pWord 吗?

@Column(name = "pword")
private String pWord;

如果您使用'pWord',它将被视为p_word。请将列名更新为“pword”并尝试。

示例:

@Entity
public class Account {
    @Id
    private Long id;
    private String defaultEmail;
}
And then turn on some SQL debugging in our properties file:


hibernate.show_sql: true
At startup, we'll see the following create statement in our logs:


Hibernate: create table account (id bigint not null, default_email varchar(255))

【讨论】:

    【解决方案2】:

    解决此问题的最简单解决方案是将列名以小写或大写形式出现。

    @Column(name = "pword")
    private String pWord;
    

    @Column(name = "PWORD")
    private String pWord;
    

    这将避免 spring 将名称转换为蛇形。

    MySql 中的列名不区分大小写,所以可以使用。

    【讨论】:

    • 感谢@Paplusc,事实证明我犯了我知道的错误。 Spring 将骆驼案例转换为蛇案例 pWord -> p_word 。感谢您的帮助。
    猜你喜欢
    • 2020-02-12
    • 1970-01-01
    • 2018-01-13
    • 1970-01-01
    • 1970-01-01
    • 2018-05-12
    • 2019-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多