我在使用JAVA和SQL Server或任何其他数据库方面没有多少经验,所以我现在遇到了一些麻烦。
我有以下代码:
public void insertProjeto(Planejado p){
String verifica="SELECT cd_projeto FROM PROJETO WHERE cd_projeto = ?";
String sqlInsert="INSERT INTO PROJETO (cd_projeto, ds_projeto) VALUES (?, ?)";
String projeto = p.getProjeto();
String nomeProjeto = p.getNomeProj();
PreparedStatement stmt;
try {
stmt = getDBConnection().prepareStatement(verifica);
stmt.setString(1, projeto);
ResultSet rs = stmt.executeQuery();
if (rs.equals("") || rs.equals(null)) {
System.out.println("------------------");
stmt = getDBConnection().prepareStatement(sqlInsert);
stmt.setString(1, projeto);
stmt.setString(2, nomeProjeto);
stmt.executeUpdate();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
我的目标是插入一个没有重复的寄存器,但出于某种原因我的" if"不工作。 任何人都可以帮我找出原因吗?
提前致谢
答案 0 :(得分:0)
获取ResultSet时,必须调用next()方法使其进入第一行数据(如果有)。如果ResultSet对象中没有数据,rs.next()将返回false。
有更好的方法来防止SQL表上的重复项取决于您使用的SQL服务器(MS SQL,MySQL等)
如果您正在使用MySQL,您可以将cd_projeto作为主键并调用REPLACE INTO而不是INSERT INTO,它将导致更新记录以查找它存在的情况,并在不存在的情况下插入新的记录。吨。
答案 1 :(得分:-1)
解决。
try {
stmt = getDBConnection().prepareStatement(verifica);
stmt.setString(1, projeto);
ResultSet rs = stmt.executeQuery();
while(!rs.next()) {
System.out.println("------------------");
stmt = getDBConnection().prepareStatement(sqlInsert);
stmt.setString(1, projeto);
stmt.setString(2, nomeProjeto);
stmt.executeUpdate();
break;
}
} catch (SQLException e) {
e.printStackTrace();
}
不知道这是否是最佳方式,但有效。 感谢您的提示