Java 验证表中是否存在行并更新

Java 验证表中是否存在行并更新,java,sql,insert-update,Java,Sql,Insert Update,我想更新表中存在该行ID的行,如果该ID在表中不存在,则插入新行。为此,请使用下面的代码尝试验证表中每一行的存在性,但这对我不起作用。代码始终报告该行存在,并且“我的代码”始终插入新行(而不是在该行已存在时更新): 请为您正在使用的数据库添加相关标记。注意:您正在寻找的操作通常被称为“向上插入”。尝试搜索它。如果“我总是得到存在结果”,你的意思是你的System.out.println(duplicateExists)总是打印出一些东西而不是null,那是因为空的ResultSet对象不是nul

我想更新表中存在该行ID的行,如果该ID在表中不存在,则插入新行。为此,请使用下面的代码尝试验证表中每一行的存在性,但这对我不起作用。代码始终报告该行存在,并且“我的代码”始终插入新行(而不是在该行已存在时更新):


请为您正在使用的数据库添加相关标记。注意:您正在寻找的操作通常被称为“向上插入”。尝试搜索它。如果“我总是得到存在结果”,你的意思是你的
System.out.println(duplicateExists)
总是打印出一些东西而不是
null
,那是因为空的
ResultSet
对象不是
null
。否则,根据代码的设计方式,如果检测到行存在,则将执行更新,而不是插入。我建议你澄清一下你的问题;另外,我会打印出您的
sqlVerif
字符串的值,并通过db客户端直接对您的db执行它,以确保它返回您期望的值。谢谢您,它是工作字符串sql=“INSERT INTO stock(idproduit,quantite,datestock,designation,dateper,ppa,tr,net)”+“value”(“+codeP+”,”+“数量+”、“+datestock+”、“+designation+”、“+datePer+”、“+PPA+”、“+TR+”、“+NET+”;”;stmt.executeUpdate(sql);
String sqlVerif="select * from calcul where idproduit="+codeP+" and EXTRACT(MONTH FROM date)="+MonthStock;
         ResultSet duplicateExists =stmt.executeQuery(sqlVerif);
         System.out.println(duplicateExists);

         if(duplicateExists.next()){
             System.out.println("je suis ici update");
             String sqlUpdate="UPDATE calcul set inventaire="+(this.GetInventaire(codeP))+(quantite)+",quantite="+this.GetQuantiteStock(codeP)+(quantite)+" where idproduit="+codeP+" and EXTRACT(MONTH FROM date)="+MonthStock;
             stmt.executeUpdate(sqlUpdate);

         }


         else{
              System.out.println("je suis ici insert");
         String sql1="INSERT INTO calcul (idproduit,inventaire,consomation,date,quantite,designation) "
               + "VALUES ('"+codeP+"',"+newQuant+","+0+",'"+datestock+"',"+newQuant+",'"+designation+"' );";

           stmt.executeUpdate(sql1);
         }