Java 验证寄存器是否已存在
我没有太多将JAVA与SQL Server或任何其他数据库结合使用的经验,因此目前我遇到了一些问题 我有以下代码:Java 验证寄存器是否已存在,java,sql,sql-server,Java,Sql,Sql Server,我没有太多将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 (?, ?
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();
}
}
我的目标是插入一个没有副本的寄存器,但由于某种原因,我的“如果”不起作用。
有人能帮我找出原因吗
在获取结果集时,您必须调用其next()方法,使其前进到第一行数据(如果有)。如果ResultSet对象中没有数据,rs.next()将返回false 有更好的方法来防止SQL表上的重复,这取决于您使用的SQL服务器(MS SQL、MySQL等) 如果您使用的是MySQL,您可以将cd_projeto设置为主键,并调用REPLACE-INTO而不是INSERT-INTO,这将导致在记录存在的情况下更新记录,并在记录不存在的情况下插入新记录。
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();
}
我不知道这是不是最好的方法,但很有效。
谢谢你的提示什么是“不起作用”呢?你在观察什么结果?我的意思是“如果”中的条件一定有逻辑问题或任何其他问题。我没有收到任何错误消息,代码根本不会进入“如果”数据库,我已经有了id_projeto作为PK,我会花一些时间来更改PK,因为我不负责数据库。这看起来不像是问题的答案。作为评论更合适。