我有许多Java方法可以检查数据库中类似值的值唯一性。下面是一个例子:
public static boolean isNameUnique(String name){
Statement stmt;
try {
stmt = dbConnection.createStatement();
String sql = "SELECT name FROM model";
ResultSet rs = stmt.executeQuery(sql);
while(rs.next()){
//Retrieve by column name
String nameDatabase = rs.getString("name");
if(name.trim().equals(nameDatabase.trim())){
return false;
}
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return true;
}
但是我不知道如何测试这个,该项目是在Tomcat 7上运行的WAR文件。我已经查看了JUnit测试,Mockito和Arquillian,但无法得到明确的答案我应该用。
我想要做的一个测试示例是将一个名称值插入数据库,然后检查相同的名称值,以确保为isNameUnique返回false。
我有许多类似于上面的方法,我需要检查数据库中的值与通过该方法传入的值。
所以基本上我正在寻找测试类似方法的最理想方法。
编辑:有人可以解释我的问题是如何与提到的问题重复吗?我没有看到任何相似之处。
EDIT2:对不起,如果不清楚,我正在寻找执行测试的最佳方法,我将名称值插入数据库,然后运行方法检查另一个名称值是否唯一。我需要测试数据库吗?我是否需要模拟对象或使用像arquillian这样的东西来测试名称的唯一性?
答案 0 :(得分:0)
使用以下查询
String sql =“SELECT name FROM model where name!=?”;
在问号中,通过修剪该值来传递您获得的值。
答案 1 :(得分:0)
以下使用条件来过滤记录,并使用try-with-resources语法,以便关闭语句和结果集,但情况并非如此。
String sql = "SELECT name FROM model WHERE name = ?";
try (PreparedStatement stmt = dbConnection.prepareStatement(sql)) {
stmt.setString(1, name.trim());
try (ResultSet rs = stmt.executeQuery()) {
if (rs.next()){
return false;
}
}
} catch (SQLException e) {
throw new IllegalStateException(sql, e);
}
return true;
PreparedStatement会转义'
之类的特殊字符并阻止SQL注入。