如何在MYSQL数据库中保存JPasswordField char

时间:2012-04-04 12:20:41

标签: java mysql swing prepared-statement jpasswordfield

我正在用Java编写一个访问控制程序,使用JPasswordField来捕获密码。由于jpasswordfield.getPassword()方法将值返回为chars,因此我需要知道如何使用preparedstatement将char值保存在MYSQL数据库中。我正在使用MYSQL字段password char[100]来存储密码。

请帮忙。

2 个答案:

答案 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)。