【问题标题】:Insert multiple data (List) in MySQL using JDBC使用 JDBC 在 MySQL 中插入多个数据(列表)
【发布时间】:2017-04-19 09:44:12
【问题描述】:

我从最近 2 小时开始尝试它,我不知道出了什么问题。也让我知道如何测试连接是否成功..现在是..但我仍然想知道..


错误:

您的 SQL 语法有错误;查看与您的 MySQL 服务器版本相对应的手册,了解在 '?, ?)' 附近使用的正确语法

我的代码:

static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/medicinedb";
static final String USER = "root";
static final String PASS = "";
static final String DRIVER = "com.mysql.jdbc.Driver";

public boolean saveMedicine(List<MedicineName> medicineName) throws ClassNotFoundException {
    Connection conn = null;
    Statement stmt = null;

    try {
        Class.forName(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();
        for (MedicineName element : medicineName) {

            String sql;
            sql = " insert into medicinename (name, pgurl)" + " values 
            ( ?, ?)";
            System.out.println(conn);

            PreparedStatement preparedStmt = conn.prepareStatement(sql);
            preparedStmt.setString(1, element.getName());
            preparedStmt.setString(2, element.getPgurl());
            stmt.executeUpdate(sql);
        }

        stmt.close();
        conn.close();
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return true;
}

【问题讨论】:

  • 你可以试试这个sql = "insert into medicinename (name, pgurl) values (?, ?)";
  • 同样的错误......@YCF_L
  • 你的数据库中name and pgurl的类型是什么
  • 您将 sql 放入准备好的语句 (preparedStmt) 但尝试执行另一条语句 (stmt)。这看起来很奇怪

标签: java mysql jdbc


【解决方案1】:

您为什么使用 Statement 和 Prepared statement。您正在使用 Statement 执行操作。因此它没有价值。删除语句

stmt = conn.createStatement();

然后执行以下操作

PreparedStatement preparedStmt = conn.prepareStatement(sql);
        preparedStmt.setString(1, element.getName());
        preparedStmt.setString(2, element.getPgurl());
        //stmt.executeUpdate(sql);
        preparedStmt .executeUpdate(sql);

【讨论】:

    【解决方案2】:

    使用

     String sql = "insert into medicinename (name, pgurl) values (?, ?)";
                      PreparedStatement preparedStmt = conn.prepareStatement(sql);
                      preparedStmt.setString (1, element.getName());
                      preparedStmt.setString (2, element.getPgurl());
                      preparedStmt.executeUpdate();
    
    you should delete executeUpdate(sql); to executeUpdate();
    

    【讨论】:

      【解决方案3】:
      1. 你在stmpreparedStmt之间混用,你必须执行preparedStmt而不是stm

      2. 另一件事,当您想将多个语句作为一个单元执行时,最好使用语句批处理,例如:

      PreparedStatement preparedStmt; String sql; conn.setAutoCommit(false); for (MedicineName element : medicineName) { sql = "insert into medicinename (name, pgurl) values (?, ?)"; System.out.println(conn); preparedStmt = conn.prepareStatement(sql); preparedStmt.setString(1, element.getName()); preparedStmt.setString(2, element.getPgurl()); preparedStmt.addBatch(sql); } preparedStmt.executeBatch(); conn.commit();

      【讨论】:

        猜你喜欢
        • 2011-07-07
        • 2015-06-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-01
        • 2014-03-26
        • 2014-07-15
        • 2015-12-10
        相关资源
        最近更新 更多