将值列表插入Mysql

时间:2013-05-27 15:00:06

标签: java jdbc

如何将值列表插入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 :)");
    }
}

3 个答案:

答案 0 :(得分: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();

这将明显快于任何带索引的表上的单个插入。

答案 1 :(得分: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注入攻击,并尝试修剪数据中可能包含的任何'

答案 2 :(得分:1)

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

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

    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;
        }
    }