我尝试将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){}
}
});
答案 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){}
}
});
更新:您必须在存储到数据库之前加密密码,将其存储为纯文本不是一个好主意