Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 验证寄存器是否已存在_Java_Sql_Sql Server - Fatal编程技术网

Java 验证寄存器是否已存在

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 (?, ?

我没有太多将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();
   }
}
我的目标是插入一个没有副本的寄存器,但由于某种原因,我的“如果”不起作用。 有人能帮我找出原因吗


在获取结果集时,您必须调用其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,因为我不负责数据库。这看起来不像是问题的答案。作为评论更合适。