0

如何将值列表插入 MySQL 表的列中。

这是我的项目:

public void settingAmount(List<String>lst)throws Exception{

    // Accessing driver from jar files 
    Class.forName("com.mysql.jdbc.Driver");
     // here we create a variable for the connection called con 
    Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/ozon","root","root");
     // here we create our query 
    Statement stmt = (Statement) con.createStatement();
    //performing insert operation :)
    lst.toArray(ss);

    for(String ins:ss){
        double d=Double.parseDouble(ins);
        String insert = "INSERT INTO storage_other(total) VALUES ("+ins+");";
        //String insert = "INSERT INTO storage_other(amount) VALUES ("+ls+");";
        // Here we are going to Execute the query
        stmt.executeUpdate(insert);
        System.out.print("Done Seccesfully :)");
    }
}
4

3 回答 3

8

您要做的是使用batches. 批处理允许您发送要同时完成的语句列表。

这是一个例子

connection.setAutoCommit(false);
PreparedStatement ps = connection.prepareStatement("INSERT INTO storage_other(total) VALUES (?)");
for (String ins:ss){
    ps.setObject(1, d);
    ps.addBatch();
}
ps.executeBatch();
connection.commit();

这将比在任何具有索引的表上的单个插入要快得多。

于 2013-05-27T15:06:39.943 回答
2

这是我用来在 Oracle SQL 数据库中插入一些数据的方法。

     private boolean submit(Connection con, String query){
             try {
                 PreparedStatement preStatement;
                 preStatement = con.prepareStatement(query);
                 preStatement.executeQuery();
                 preStatement.close();
                 return true;
             }catch (Exception e) {
                 System.out.println("Exception cought, updating log.");
                 return false;
             }
         }

您可以准备insert语句并调用此函数来执行操作。使用您的连接对象和查询调用它。true如果出现问题,它将在完成时返回false。如果要记录任何错误,请使用e.getMessage()在异常块中将错误消息作为字符串获取。

如评论中所述,尝试使用该PreparedStatement对象来避免 SQL 注入攻击,并尝试修剪'数据中可能存在的任何内容。

于 2013-05-27T15:12:21.500 回答
1

这是我建议你这样做的方法。一些想法:

  1. 给对象的连接。该方法应该做一件事:INSERT。
  2. 应该是事务性的。
  3. 完成后应该清理资源。
  4. 如果金额是多少,请告诉用户提供双打列表。不要解析;让客户这样做。

这是完整的代码:

public class Inserter {

    private static final String INSERT_SQL = "INSERT INTO storage_other(total) VALUES(?))";

    private Connection connection;

    public Inserter(Connection connection) {
        this.connection = connection;
    }

    public int settingAmount(List<Double> amounts)throws SQLException {
        int numAmountsInserted = 0;
        PreparedStatement ps = null;
        this.connection.setAutoCommit(false);
        try {
            ps = this.connection.prepareStatement(INSERT_SQL);
            for(Double amount : amounts) {
                ps.setDouble(1, amount);
                numAmountsInserted += ps.executeUpdate();
            }
            this.connection.commit();
        } catch (SQLException e) {
            DatabaseUtils.rollback(this.connection);
            throw e;
        } finally {
            DatabaseUtils.close(ps);
            this.connection.setAutoCommit(true);
        }
        return numAmountsInserted;
    }
}
于 2013-05-27T15:16:15.350 回答