验证寄存器是否已存在

时间:2015-01-13 15:45:40

标签: 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 (?, ?)";

   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"不工作。 任何人都可以帮我找出原因吗?

提前致谢

2 个答案:

答案 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();
}

不知道这是否是最佳方式,但有效。 感谢您的提示