我正在用 Java 编写一个访问控制程序,该程序使用JPasswordField
. 由于该jpasswordfield.getPassword()
方法以字符形式返回值,因此我需要知道如何使用preparedstatement
. 我正在使用 MYSQL 字段password char[100]
来存储密码。
请帮忙。
我正在用 Java 编写一个访问控制程序,该程序使用JPasswordField
. 由于该jpasswordfield.getPassword()
方法以字符形式返回值,因此我需要知道如何使用preparedstatement
. 我正在使用 MYSQL 字段password char[100]
来存储密码。
请帮忙。
使用一些密码加密算法来保存密码,这将是一个很好的做法,谷歌它的详细信息,
我做了一个简单的例子,使用准备好的语句将 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)。