通过Java应用程序将密码插入MySQL

时间:2016-08-18 18:16:58

标签: java mysql

我尝试将Java应用程序中的信息插入到mySQL中的数据库中。它只有在我删除密码部分时才有效。当我输入说(关于passwordField.getPassword())的值时,它会给我一个警告:“Must explicitly convert the char[] to a String”< - 这是什么意思?

见下面的代码

JButton btnSkapaInlogg = new JButton("Skapa inlogg");
btnSkapaInlogg.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        try{
            theQuery("insert into kund " +
                "(user_name, password, first_name, last_name, mobil, email, adress, ort) " + 
                "values('"+textField.getText()+"','"+passwordField.getPassword()+"',
                '"+textField_3.getText()+"','"+textField_4.getText()+"','"+textField_5.getText()+"',
                '"+textField_6.getText()+"','"+textField_7.getText()+"','"+textField_8.getText()+"',
                '"+textField_9.getText()+"')");
        }
          catch(Exception ex){}
        }
});

3 个答案:

答案 0 :(得分:1)

  

必须将char []显式转换为String

     

这是什么意思?

这意味着passwordField.getPassword()会返回char的数组,而预期会有String

char数组转换为String的最简单方法是new String(char[]),但不是您应该如何在数据库中存储密码无论如何,你应该先将它哈希(理想情况下用盐),否则它将是你数据库中一个明确的String,这是一个安全漏洞

有关如何散列密码的详细信息,请参阅this question

第二个错误是您的查询不正确,您在定义仅8个字段时提供 9个值,所以你需要先添加缺少的字段来修复查询。

答案 1 :(得分:-1)

您有8列,但您的数据是9列

(user_name, password, first_name, last_name, mobil, email, adress, ort)

values('"+textField.getText()+"','"+passwordField.getPassword()+"','"+textField_3.getText()+"','"+textField_4.getText()+"','"+textField_5.getText()+"','"+textField_6.getText()+"','"+textField_7.getText()+"','"+textField_8.getText()+"','"+textField_9.getText()+"')")

答案 2 :(得分:-1)

您正在尝试将char数组用作字符串

passwordField.getPassword()

返回char数组而不是字符串。因此,在将它与字符串连接之前,必须将其转换为字符串。

这是一个从char数组构建字符串的代码。

String pw=new String(passwordField.getPassword())

在查询中使用pw变量而不是直接调用passwordField.getPassword()

这是更新的代码

String pw=new String(passwordField.getPassword());
JButton btnSkapaInlogg = new JButton("Skapa inlogg");
btnSkapaInlogg.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
    try{
        theQuery("insert into kund " +
            "(user_name, password, first_name, last_name, mobil, email, adress, ort) " + 
            "values('"+textField.getText()+"','"+pw+"',
            '"+textField_3.getText()+"','"+textField_4.getText()+"','"+textField_5.getText()+"',
            '"+textField_6.getText()+"','"+textField_7.getText()+"','"+textField_8.getText()+"',
            '"+textField_9.getText()+"')");
    }
      catch(Exception ex){}
    }
});

更新:您必须在存储到数据库之前加密密码,将其存储为纯文本不是一个好主意