代码

private void logDataDb(ArrayList<ReceiveData> datas) {
Connection conn = null;
PreparedStatement pstmt = null;
String sql = "INSERT INTO MON_ALARM_LOG (TIME,TOPIC,DIMENSION,CURRENTVALUE,ALERTMAIL,ALERTPHONE,DESCRIPTION,LEVEL) "
+ " VALUES(?,?,?,?,?,?,?,?)";
try {
conn = DBUtils.getConnection(dbcpPath);
conn.setAutoCommit(false);
pstmt = conn.prepareStatement(sql);
pstmt.clearBatch();
Iterator<ReceiveData> ite = datas.iterator();
while (ite.hasNext()) {
ReceiveData data = ite.next();
pstmt.setTimestamp(1, data.getTime());
pstmt.setString(2, data.getTopic());
pstmt.setString(3, data.getDimension());
pstmt.setDouble(4, data.getValue());
pstmt.setString(5, data.getAlertMail());
pstmt.setString(6, data.getAlertPhone());
pstmt.setString(7, data.getDescription());
pstmt.setInt(8, data.getLevel());
pstmt.addBatch();
}
pstmt.executeBatch();
conn.commit();
conn.setAutoCommit(true);
} catch (SQLException e) {
LOG.error("保存切片数据出错,MsgAndDbSink.logDataDb()" + e);
}finally{
if(pstmt!=null)
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
if(conn!=null)
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

1、当一次性需要向数据库插入多条数据时,应该使用jdbc的batch操作。

2、在使用batch插入的时候,需要将connection的autoCommit设置为false,否则将会影响性能,与逐条插入无异。

3、在executeBatch()之后,需要进行connection.commit()因为在之前已将autoCommit设为false,需要手工commit。

4、在最后connection.close()之前,需要将connection的autoCommit设置为其默认的true。

这是因为对于从连接池获取的connection而言,close()只是将其还给连接池从而达到复用的目的,如果不将autoCommit恢复到默认的true,那么之后该connection被其他

程序取出使用的时候,将仍然是一个autoCommit=false的链接。 容易引起问题。 且由于连接池的池资源特性,该问题会成为一个不知何时会发生、难以人工重现的问题。

关于jdbc编程的几点需要注意的地方的更多相关文章

  1. 单独使用jdbc编程问题总结(一)

    在学习Mybatis之前,我们先来回顾JDBC编程的相关知识.在此基础上深入的学习Mybatis框架.如有错误,敬请指正. (一)首先我们既然要使用jdbc,当然是要操作数据库了.创建一个名为:myb ...

  2. 浅谈JDBC编程

    一.概述 1.为什么要用JDBC 数据库是程序不可或缺的一部分,每一个网站和服务器的建设都需要数据库.对于大多数应用程序员(此处不包含数据库开发人员)来说,我们更多的不是在DBMS中对数据库进行操纵, ...

  3. 02Mybatis_原生态jdbc编程中的问题总结——从而引生出为什么要用Mybatis

    我们先用jdbc去编写一个例子: 第一步:建表 /* SQLyog v10.2 MySQL - 5.1.72-community : Database - mybatis ************** ...

  4. JDBC编程的方式

    JDBC编程的方式,我们以一个简单的查询为例,使用JDBC编程,如下: 从上面可以看出JDBC编程一般要如下步骤: 1. 加载数据库驱动 2. 创建并获取数据库连接 3. 创建jdbc stateme ...

  5. JAVA基础知识之JDBC——编程步骤及执行SQL

    JDBC编程步骤 下面以mysql数据库为例, 1.加载驱动 首先需要下载数据库的驱动jar文件,并且在eclipse包中加入到class path中去, 例如mysql的驱动文件 mysql-con ...

  6. JDBC编程 之 增删改查

    JDBC编程之数据增加,更改,查询,删除 package com.good.jdbc; import java.sql.Connection; import java.sql.DriverManage ...

  7. JDBC编程步骤

    JDBC编程步骤 加载数据库驱动. 通常使用Class类的forName()静态方法来加载驱动. Class.forName(driverClass) dirverClass: mysql---Cla ...

  8. 【Java】JDBC编程套路

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/5847020.html 学习Java开发,一个必须掌握的知识点,就是数据库操作.当程序需要用到的数据达到一定程度 ...

  9. 用JDBC编程的执行时错误及其解决大全

    用JDBC编程的执行时错误及其解决 用JDBC编程的执行时错误及其解决 源码: .java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlser ...

随机推荐

  1. yii创建与设置默认控制器并载入模板

    yii创建与设置默认控制器并载入模板 一.创建控制器 在protected下的controllers文件夹中创建自定义的控制器文件,比如: IndexController.php (文件名首字母大写) ...

  2. 【笔记】C#往TextBox的方法AppendText加入的内容里插入换行符

    C# TextBox换行[huan hang]时你往往会想到直接付给一个含有换行[huan hang]符"\n"的字符[zi fu]串[zi fu chuan]给Text属性[sh ...

  3. MySql中4种批量更新的方法

    最近在完成MySql项目集成的情况下,需要增加批量更新的功能,根据网上的资料整理了一下,很好用,都测试过,可以直接使用. mysql 批量更新共有以下四种办法 1..replace into 批量更新 ...

  4. doctotext

    文档解析库 http://www.it610.com/article/1936051.htm

  5. 1、wei-d-s嵌入式与PC区别,LED等的点亮以及调用C函数

    tiny6410之点亮Led灯: .global _start _start: ldr r0,0x70000000 //目的是把外设基地址告诉cpu orr r0,r0,#0x13 mcr p15,0 ...

  6. 编译 link

    --generating dsym file change the appropriate one from 'DWARF with dSYM file' to just 'DWARF',This s ...

  7. sql server 2008安装的时候选NT AUTHORITY\NEWORK SERVICE 还是选 NT AUTHORITY\SYSTEM ?

    sql server 2008安装的时候选NT AUTHORITY\NEWORK SERVICE 还是选 NT AUTHORITY\SYSTEM ? sql server 2008安装的时候选NT A ...

  8. VS2010程序打包操作--超详细

    1.  在vs2010 选择“新建项目”----“其他项目类型”----“Visual Studio Installerà“安装项目”: 命名为:Setup1 . 这是在VS2010中将有三个文件夹, ...

  9. SpringMVC上传图片总结(2)--- 使用百度webuploader上传组件进行上传图片

    SpringMVC上传图片总结(2)--- 使用百度webuploader上传组件进行上传图片   在上一篇文章中,我们介绍了< SpringMVC上传图片的常规上传方法 >.本文接着第一 ...

  10. java使用WebUploader做大文件的分块和断点续传

    版权所有 2009-2018荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webapp/up6.2/in ...