高效插入语句

try {
            Connection conn = getConnection(TO_DRIVER,TO_URL,TO_USERNAME,TO_PASSWORD);
            conn.setAutoCommit(false);
            String sql = "insert into mc_stat_trends(clock,itemid,itemname,ip,num,value_min, value_avg, value_max) values(?,?,?,?,?,?,?,?)";
            PreparedStatement prst = conn.prepareStatement(sql);
            for (int i = 0; i < list.size(); i++) {
                Map<String, Object> bean = list.get(i);
                //System.out.println(bean.toString());
                prst.setLong(1, Long.valueOf(bean.get("clock").toString()));
                prst.setLong(2, Long.valueOf(bean.get("itemId").toString()));
                prst.setString(3, String.valueOf(bean.get("itemName")));
                prst.setString(4, String.valueOf(bean.get("ip")));
                prst.setLong(5, Long.valueOf(bean.get("num").toString()));
                prst.setFloat(6, Float.valueOf(bean.get("value_min").toString()));
                prst.setFloat(7, Float.valueOf(bean.get("value_avg").toString()));
                prst.setFloat(8, Float.valueOf(bean.get("value_max").toString()));
                prst.addBatch();
                if(i >0 &&i%1000 == 0){
                    long startT = System.currentTimeMillis();
                    prst.executeBatch();
                    long endT = System.currentTimeMillis();
                    System.out.println("批量转存数据第["+i+"]条耗时"+(endT-startT)/1000+"S");
                }
            }
            prst.executeBatch();
            conn.commit();
            conn.close();
            prst.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }

1.2 结果输出

1.2.1 计算环境

1.2.3 计算结果

从控制台可以看出:平均每插入1000条消耗时间是:38S左右,如果照此计算:358*38=13604S

2.1改写后(拼接方式插入[insert table values(?,?,?),(?,?,?),(?,?,?)]案例)

try {
            Connection conn = getConnection(TO_DRIVER,TO_URL,TO_USERNAME,TO_PASSWORD);
            conn.setAutoCommit(false);
            String insertSql = "insert into mc_stat_trends(clock,itemid,itemname,ip,num,value_min,value_avg,value_max) values ";
            StringBuffer valBuffer = new StringBuffer();
            for (int i = 0; i < list.size(); i++) {
                Map<String, String> bean = list.get(i);
                valBuffer.append("(");
                valBuffer.append(Long.valueOf(bean.get("clock"))+",");
                valBuffer.append(Long.valueOf(bean.get("itemId"))+",");
                valBuffer.append("‘"+String.valueOf(bean.get("itemName"))+"‘,");
                valBuffer.append("‘"+String.valueOf(bean.get("ip"))+"‘,");
                valBuffer.append(Long.valueOf(bean.get("num"))+",");
                valBuffer.append(bean.get("value_min")+",");
                valBuffer.append(bean.get("value_avg")+",");
                valBuffer.append(bean.get("value_max"));
                valBuffer.append(")");
                if((i >0 &&i%200 == 0) || i==list.size()-1){//
                    //long startT = System.currentTimeMillis();
                    String sql = valBuffer.insert(0, insertSql).toString();
                    valBuffer.setLength(0);
                    //System.out.println(sql);
                    Statement stat = conn.createStatement();
                    stat.execute(sql);
                    //long endT = System.currentTimeMillis();
                    //System.out.println("批量转存数据第["+i+"]条耗时"+(endT-startT)/1000+"S");
                }else{
                    valBuffer.append(",");
                }
            }

2.2 结果输出

2.2.1 计算环境

2.2.3 计算结果

这个计算环境是本地机器()计算出的效果:从控制台可以看出:35W输入插入:需要:85S时间.在生产环境配置下插入效率更高效 如图:消耗时间只有:33-10=13S.

结论

越是封装的代码,它的使用会容易,但效率会降低。

时间: 2024-11-02 23:49:35

高效插入语句的相关文章

DB2执行插入语句 57016 SQLCODE=-668 原因码 &quot;7&quot;错误的快速解决办法

DB2数据库执行insert插入语句报57016错误(表不活动) 原因:1.修改了表结构.2.删除了主键.或者修改了主键. 如果你是用的时控制台,可以使用 REORG TABLE 表名 : 如果使用工具执行上述语句后又出现42601错误可以尝试如下语句 例:CALL SYSPROC.ADMIN_CMD ('REORG TABLE test') 有人说在执行上述语句后还要执行: RUNSTATS 收集信息RUNSTATS ON TABLE   <tbschema>.<tbname>

SQL Server根据表或视图批量生成插入语句并BCP导出成文本

--声明变量 DECLARE @TableName VARCHAR(100),@RunStr VARCHAR(MAX),@RunRC VARCHAR(MAX),@FinalRun VARCHAR(MAX) --在master库创建数据载体,也可以建立在其他数据库,但一定要是实体表,因为BCP导出不支持临时表 IF OBJECT_ID('master.dbo.tempinsertstr') IS NOT NULL DROP TABLE master.dbo.tempinsertstr CREATE

Sqlserver 导出insert插入语句

SQLserver,确有些难度,自带的工具都无法完成这个操作.经过查证资料可以通过写一个存储过程来完成这个操作. 存储过程如下: SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO if exists(select 1 from sysobjects where id=object_id('BicashyOutputData') and xtype='P') drop procedure BicashyOutputData; GO create p

oracle中复制表和数据 &amp;&amp; 多表插入语句

创建测试表和测试数据 create table test  (id number,name varchar(10));  insert into  test values(1,'liufang');  insert into  test values(2,'xiaozhang');  insert into  test values(3,'dawei');  insert into  test values(4,'laotan');  insert into  test values(5,'la

高效SQL语句(SQL Server)

以下的SQL语句以Northwind为例 1.不要再where子句中"="的左侧使用函数和表达式,因为系统无法应用函数或表达式中的索引 SELECT * FROM Customers WHERE Cast(CustomerID AS VARCHAR(20))='1' --Clustered Index Scan 全表扫描SELECT * FROM Customers WHERE CustomerID ='1' --Clustered Index Seek 索引扫描 2.只返回必要的行或

MySQL插入语句解析

1.INSERT INTO 最常用简单的插入语句,可以有以下两种用法 1>  INSERT INTO tb_user(id, name, age) VALUES (100022, 'Tom', 25); // 只给指定的列赋值 2>  INSERT INTO tb_user VALUES (100022, 'Tom', 25); // 必须 给所有列赋值 注: INTO关键字可以省略 2. INSERT INTO  ... SELECT 可以将查询结果插入表中 insert into t2sa

Oracle多表插入语句Insert All/Insert First

关于INSERT ALL和INSERT FIRST 一.无条件 INSERT ALL 二.条件 INSERT ALL 三.条件 INSERT FIRST Insert-Select 使用Insert Select实现同时向多个表插入记录 一.无条件 INSERT ALL --------------------------------------------------------------------------------------------- INSERT ALL insert_in

多表插入语句

多表插入语句分为以下四种: ①无条件INSERT. ②有条件INSERT ALL. ③转置INSERT. ④有条件INSERT FIRST. 首先创建测试用表: CREATE TABLE emp( empno NUMBER(4), ename VARCHAR2(10), job VARCHAR2(9), deptno NUMBER(2) ); INSERT INTO emp VALUES(7500, 'A', 'SALESMAN', 10); INSERT INTO emp VALUES(750

JDBC JAVA数据库插入语句

https://zhidao.baidu.com/question/540539955.html?fr=iks&word=jdbc+sql%D3%EF%BE%E4&ie=gbk JDBC JAVA数据库插入语句报错你妹的,写了占位符你又不用东西填,sql当然错了,报的sql不完整两种方案A.  valuses后的四个问号直接写上参数B.用import java.sql.PreparedStatement;包下的PreparedStatement方法预编的方式进行填充示例PreparedSt