我试图将名称,哈希密码,盐和哈希类型插入数据库。唯一改变的是参数的类型。我相信它可以更有效地完成。如何避免使用重载?我需要使用泛型吗?谢谢。
InsertMethods
protected void insert(String name, String secretpassword, String salt, String type)
{
String sql = "INSERT INTO login(username,password,salt,type) VALUES(?,?,?,?)";
try (Connection conn = this.connect();
PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setString(1, name);
pstmt.setString(2, secretpassword);
pstmt.setString(3, salt);
pstmt.setString(4, type);
pstmt.executeUpdate();
System.out.println("Successful");
} catch (SQLException e) {
System.out.println(e.getMessage());
}
}
protected void insert(String name, byte[] secretpassword, String salt, String type)
{
String sql = "INSERT INTO login(username,password,salt,type) VALUES(?,?,?,?)";
try (Connection conn = this.connect();
PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setString(1, name);
pstmt.setString(2, Arrays.toString(secretpassword));
pstmt.setString(3, salt);
pstmt.setString(4, type);
pstmt.executeUpdate();
System.out.println("Successful");
} catch (SQLException e) {
System.out.println(e.getMessage());
}
}
我在这里看不到太多问题,因为您总是最终将密码作为字符串插入到login
表中。所以,我建议只使用第一个版本:
protected void insert(String name, String secretpassword, String salt,
String type);
如果您将密码看作qazxsw poi,只需使用字符串构造函数生成qazxsw poi:
byte[]
所以,为了清楚起见,我建议可能删除第二种方法,因为除了一个参数之外,它在数据库级别上完全相同。
保留这两种方法意味着在代码库中进行更多的维护工作,因为如果更改了一个,则必须在另一个中进行相同的逻辑更改。
您可以从第二个方法调用第一个方法,如:
String
想到两种方式:
byte[] array = ...;
String password = new String(array);
选项1:在一个同时调用的方法中提取代码:
protected void insert(String name, byte[] secretpassword, String salt, String type)
{
insert(name, Arrays.toString(secretpassword), salt, type);
}
或者,选项2,链接呼叫:
public String getValue(String value1) {
return value1 + "0";
}
public String getValue(String value1, int num) {
return value1 + String.valueOf(num);
}
但是,在你的情况下,你应该问自己是否需要两种方法。