我正在用Java编写一个访问控制程序,使用JPasswordField
来捕获密码。由于jpasswordfield.getPassword()
方法将值返回为chars,因此我需要知道如何使用preparedstatement
将char值保存在MYSQL数据库中。我正在使用MYSQL字段password char[100]
来存储密码。
请帮忙。
答案 0 :(得分:0)
使用一些密码加密算法来保存密码,这是一个很好的做法,谷歌了解详情,
答案 1 :(得分:0)
我做了一个使用预准备语句将char数组存储在数据库中的简单示例。我使用Java DB而不是MySQL,因为它包含在JDK(jdk1.7.0 / db / lib / derby.jar)中,这个例子应该无关紧要。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Example {
public static void main(String[] args) throws SQLException {
try (Connection connection = DriverManager.getConnection("jdbc:derby:memory:sampleDB;create=true");
Statement statement = connection.createStatement()
) {
char[] pw = "password".toCharArray();
statement.execute("create table sample(pw char(10))");
try (ResultSet resultSet = statement.executeQuery("select * from sample");
PreparedStatement preparedStatement = connection.prepareStatement("insert into sample values (?)")
) {
for (int i = 1; i <= 10; i++) {
preparedStatement.setString(1, new String(pw) + i);
preparedStatement.execute();
}
while (resultSet.next()) {
System.out.println(resultSet.getString(1));
}
}
}
}
}
正如其他人已经说过的那样,你不应该在数据库中以明文形式存储密码。相反,你应该存储它的散列(SHA-1 Hash in Java)。