Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.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 插入数据,如果已经插入,则在sql中更新_Java_Sql - Fatal编程技术网

Java 插入数据,如果已经插入,则在sql中更新

Java 插入数据,如果已经插入,则在sql中更新,java,sql,Java,Sql,我只想将数据插入SQL数据库表,如果已经插入了一些数据,那么我想更新这些数据。如何使用Java实现这一点。请帮助我,并为英语不好提前道歉。您必须首先检查表中的数据 如果存在,则使用更新查询,否则插入数据 它很简单只需识别数据集中的唯一项(如Id或代码)。然后使用该选项,尝试先执行选择查询。如果结果集为空,请执行插入,否则请尝试更新详细信息。您可以使用关键字检查行的存在: IF EXISTS (SELECT TOP 1 * FROM...) BEGIN UPDATE.... END ELS

我只想将数据插入SQL数据库表,如果已经插入了一些数据,那么我想更新这些数据。如何使用Java实现这一点。请帮助我,并为英语不好提前道歉。

您必须首先检查表中的数据 如果存在,则使用更新查询,否则插入数据
它很简单

只需识别数据集中的唯一项(如Id代码)。然后使用该选项,尝试先执行选择查询。如果结果集为空,请执行插入,否则请尝试更新详细信息。

您可以使用关键字检查行的存在:

IF EXISTS (SELECT TOP 1 * FROM...)
BEGIN
    UPDATE....
END
ELSE
BEGIN
   INSERT...
END
尝试以下方法:

示例查询

在重复密钥更新时将值(1,“ABC”,“XYZ”)插入表(id,名称,城市)中
name=“ABC”,city=“XYZ”

有关更多帮助,请参阅文档。

将任何字段设置为唯一标识。 例如,考虑到雇员的详细信息必须输入到表名**Eclipse Dealth.*中。在这种情况下,Eclipse ID可以被认为是唯一的。< /P> 使用选择查询 从EmployeeDetails中选择*,其中employee_id=“唯一键值”; 如果结果集不为空,则使用UPDATEquery更新字段

更新EmployeeDetails设置员工id=?,全名=?,职务=?,电子邮件id=?,密码=?其中员工_id='” +id+“'”; 如果结果集为空,则使用INSERT查询将值插入表中


在EmployeeDetails值(…)中插入
插入
(如果新)或
更新
(如果存在)的标准SQL语句称为
合并

由于您没有指定要询问的DBMS方言,我将向您介绍Wikipedia文章“”,该文章涵盖了大多数DBMS方言。摘要:

数据库管理系统Oracle Database、DB2、Teradata、EXASOL、CUBRID、MS SQL和Vectorwise支持标准语法。有些还添加了非标准SQL扩展

MySQL:
INSERT…ON DUPLICATE KEY UPDATE

SQLite:
插入或替换到

PostgreSQL:
在冲突时插入到…中


可能与哪个数据库重复?SQL Server?MySQL?PostgreSQL?DB2?Oracle?您是否使用任何ORM框架?只需运行更新并检查更新了多少行就更有效了。问题与Java(JDBC.HSQL或其他ORM)有关@EddyBayonne是的,您也可以从Java运行这些SQL语句。问题中没有提到ORM,因此使用JDBC运行SQL是一个完全有效的答案。我们应该更喜欢在一个连接和语句中完成任务的策略。上述答案最好避免多个连接打开和成批影响性能。
MERGE INTO tablename USING table_reference ON (condition)
WHEN MATCHED THEN
  UPDATE SET column1 = value1 [, column2 = value2 ...]
WHEN NOT MATCHED THEN
  INSERT (column1 [, column2 ...]) VALUES (value1 [, value2 ...])
package com.stackwork;

//STEP 1. Import required packages
import java.sql.*;
import java.util.Scanner;

public class Updation {
   // JDBC driver name and database URL
   static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
   static final String DB_URL = "jdbc:mysql://localhost/Employee";

   //  Database credentials
   static final String USER = "root";
   static final String PASS = "admin";
   private static Scanner sc;

   public static void main(String[] args) {
   Connection conn = null;
   Statement stmt = null;
   try{
      //STEP 2: Register JDBC driver
      Class.forName("com.mysql.jdbc.Driver");
      //STEP 3: Open a connection
      System.out.println("Connecting to database...");
      conn = DriverManager.getConnection(DB_URL,USER,PASS);
      //STEP 4: Execute a query
      System.out.println("Creating statement...");
      stmt = conn.createStatement();
      String sql;
      //STEP 5: Get the employee_id for whom data need to be updated/inserted
      sc = new Scanner(System.in);
      System.out.println("Enter the Employee_id for the record to be updated or inserted");
      int Emp_idvalue=sc.nextInt();
      sql = "SELECT * FROM EmployeeDetails where Emp_id="+Emp_idvalue;
      ResultSet rs = stmt.executeQuery(sql);
      if (!rs.next())
      {
          //STEP 6: If the previous details is not there ,then the details will be inserted newly
          System.out.println("Enter the name to be inserted");
          String Emp_namevalue =sc.next();
          System.out.println("Enter the address to be inserted");
          String Emp_addvalue =sc.next();
          System.out.println("Enter the role to be inserted");
          String Emp_rolevalue =sc.next();
          PreparedStatement ps = conn
                    .prepareStatement("insert into EmployeeDetails values(?,?,?,?)");
            ps.setString(2, Emp_namevalue);
            ps.setString(3, Emp_addvalue);
            ps.setString(4, Emp_rolevalue);
            ps.setInt(1, Emp_idvalue);
            ps.executeUpdate();
            System.out.println("Inserted successfully");
      }
      else
      {
        //STEP 7: If the previous details is  there ,then the details will be updated 
          System.out.println("Enter the name to be updated");
          String Emp_namevalue =sc.next();
          System.out.println("Enter the address to be updated");
          String Emp_addvalue =sc.next();
          System.out.println("Enter the role to be updated");
          String Emp_rolevalue =sc.next();
          String updateQuery = "update EmployeeDetails set Emp_id=?,Emp_name=?, Emp_address=?, Emp_role=? where Emp_id='"
                    + Emp_idvalue + "'";
            PreparedStatement ps1 = conn.prepareStatement(updateQuery);
            ps1.setString(2, Emp_namevalue);
            ps1.setString(3, Emp_addvalue);
            ps1.setString(4, Emp_rolevalue);
            ps1.setInt(1, Emp_idvalue);
            ps1.executeUpdate();    
            System.out.println("updated successfully");

      }
      //Clean-up environment
      rs.close();
      stmt.close();
      conn.close();
   }catch(SQLException se){
      //Handle errors for JDBC
      se.printStackTrace();

   }catch(Exception e){
      //Handle errors for Class.forName
      e.printStackTrace();
  }
}
}