- 浏览: 240156 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
DeepThought:
必须赞一个 用了各种方法 最终还是改了repo才能下载! Th ...
Android源码下载出现的问题 -
wj10000:
,这个不错呀,还准备用js 实现这个来着 ....
自己写jstl标签解析long时间 -
wjjxf:
xubingok 写道System.out.println是J ...
Android无法System.out.println出null -
xubingok:
System.out.println是JDK中的io流中的方法 ...
Android无法System.out.println出null -
JjayLee:
你可以更详细一点。。。
android网络连接Wifi和cmnet及cmwap的问题
项目中DB层会定时向mysql批量提交sql操作,之前是未设置是否自动提交也就是自动提交,性能很差,后来改为手动事务就好了,把一堆sql作为一个事务提交,如果有失败再单个提交。
写了个例子,测试了下性能,发现1000句的更新语句,手动提交事务有300倍的性能提升。
实例代码:
执行结果:
写了个例子,测试了下性能,发现1000句的更新语句,手动提交事务有300倍的性能提升。
实例代码:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.Statement; public class TestDB { static Connection conn = getDBConnection("com.mysql.jdbc.Driver", "jdbc:mysql://127.0.0.1:3306/test1?useUnicode=true&characterEncoding=utf8&createDatabaseIfNotExist=true&serverTimezone=UTC&useSSL=false", "root","root"); public static Connection getDBConnection(String driver, String urlDB, String user, String pwd) { Connection conn; try { // 连接MYSQL数据库 Class.forName(driver); conn = DriverManager.getConnection(urlDB, user, pwd); return conn; } catch (Exception e) { e.printStackTrace(); } return null; } public static void main(String[] args) throws Exception { conn.createStatement().execute("CREATE TABLE `test` ( `id` int(11) NOT NULL, `val` int(11) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;"); conn.createStatement().execute("INSERT INTO `test` VALUES (1,1)"); test3(false, 1000); test3(false, 1000); test3(true, 1000); test4(false, 1000); test4(true, 1000); test5(); test6(); conn.createStatement().execute("DROP TABLE `test` "); conn.close(); System.out.println("test database ok"); } public static void test1() throws Exception{ long t = System.currentTimeMillis(); Statement ps = conn.createStatement(); for(int i = 0;i < 100;i++){ ps.execute("UPDATE test SET `val`="+(2000+i)+" WHERE id=1"); } ps.close(); long e = System.currentTimeMillis(); System.out.println("test1 used:"+(e-t)); } public static void test3(boolean autoCommit, int count) throws Exception{ long t = System.currentTimeMillis(); conn.setAutoCommit(autoCommit); Statement ps = conn.createStatement(); for(int i = 0;i < count;i++){ ps.execute("UPDATE test SET `val`="+(2000+i)+" WHERE id=1"); } // ps.close(); if(!autoCommit){ conn.commit(); } long e = System.currentTimeMillis(); System.out.println("test createStatement , count="+count+" autoCommit="+autoCommit+" used:"+(e-t)); } public static void test4(boolean autoCommit, int count) throws Exception{ long t = System.currentTimeMillis(); conn.setAutoCommit(autoCommit); PreparedStatement ps = conn.prepareStatement("UPDATE test SET `val`=? WHERE id=?"); for(int i = 0;i < count;i++){ ps.setObject(1, 2000+i); ps.setObject(2, 1); ps.execute(); } ps.close(); if(!autoCommit){ conn.commit(); } long e = System.currentTimeMillis(); System.out.println("test prepareStatement, count="+count+", autoCommit="+autoCommit+", used:"+(e-t)); } public static void test5() throws Exception{ long t = System.currentTimeMillis(); conn.setAutoCommit(false); Statement ps = conn.createStatement(); for(int i = 0;i < 1000;i++){ ps.addBatch("UPDATE test SET `val`="+(2000+i)+" WHERE id=1"); } ps.executeBatch(); ps.close(); conn.commit(); long e = System.currentTimeMillis(); System.out.println("test5:"+(e-t)); } public static void test6() throws Exception{ long t = System.currentTimeMillis(); conn.setAutoCommit(false); PreparedStatement ps = conn.prepareStatement("UPDATE test SET `val`=? WHERE id=?"); for(int i = 0;i < 1000;i++){ ps.setObject(1, 2000+i); ps.setObject(2, 1); ps.addBatch(); } ps.executeBatch(); ps.close(); conn.commit(); long e = System.currentTimeMillis(); System.out.println("test6:"+(e-t)); } }
执行结果:
引用
test createStatement , count=1000 autoCommit=false used:200
test createStatement , count=1000 autoCommit=false used:150
test createStatement , count=1000 autoCommit=true used:29423
test prepareStatement, count=1000, autoCommit=false, used:199
test prepareStatement, count=1000, autoCommit=true, used:29996
test5:243
test6:167
test database ok
test createStatement , count=1000 autoCommit=false used:150
test createStatement , count=1000 autoCommit=true used:29423
test prepareStatement, count=1000, autoCommit=false, used:199
test prepareStatement, count=1000, autoCommit=true, used:29996
test5:243
test6:167
test database ok
发表评论
-
很久没写博客了
2018-10-27 10:30 2先激活下,有将近4年没有写实质性的博客内容了,这几年发生了很多 ... -
使用ios的autolayout做UI
2014-09-21 22:03 1447之前一直用的是老的坐标定位,和自动缩放进行 ... -
cocos2d在IOS6上的初始屏幕方向
2013-10-07 00:31 1353在6之前初始方向都是UIDeviceOrientationL ... -
弄了个微信公共帐号【北京汽车摇号助手】
2013-07-26 19:46 953花一天时间弄了个微信公共帐号,北京汽车摇号助手,微信号bj ... -
两年的项目开发一点小心得(二)
2013-06-20 23:31 903接着昨天 ... -
两年的项目开发一点小心得
2013-06-20 00:38 869从11年8月份 ... -
java分析内存溢出情况
2013-04-03 11:33 1004jps获取java进程id“jmap -histo[:live ... -
cocos2d在xcode4.5ios6上屏幕转向的问题
2012-12-15 19:20 1573在ios5.1.1真机上测试的非常好,然后上传到appstor ... -
MacOs系统重装或者换电脑iPhone开发者证书前移问题
2012-12-02 11:35 3038对于我等使用能够虚拟机的苦逼开发者,一旦苹果发新系统或者xco ... -
解决android内部存储空间/data/dalvik-cache存储问题
2012-05-18 17:47 7019U880系统的内部存储空间总是不足,发现/dat ... -
解决NSData中非法utf-8字节的问题
2012-05-13 13:12 4914当用nsdata,按照utf8编码来初始化nsstr ... -
练练手,用mina2.0搭建一个nio客户端
2012-05-08 16:03 6662练练手,用mina2.0搭建一个nio客户端,连接服务器。 ... -
android网络连接Wifi和cmnet及cmwap的问题
2011-10-27 23:43 4501困扰了我很久的,android ,http client无法直 ... -
cocos2d 开发入门
2011-10-23 02:08 1385cocos2d是iPhone开发上的一个2d免费开源框架。可以 ... -
Xcode3.2.6破解免证书真机开发调试
2011-10-15 23:55 7278Xcode只有破解后才能免费真机调试,否则需要注册 ... -
Windows环境利用Vmware7.1.3 搭建iPhone开发环境
2011-10-14 23:57 6766开发iPhone程序必须要在MacOS下利用Xc ... -
QQ空间g_tk算法
2011-08-17 23:17 3567public int getGTK(S ... -
C++学习小记
2011-07-05 23:23 1049很久没有写技术博客了,年后过来没有多少编程的工作, ... -
Java解惑读书笔记2
2011-05-07 11:10 1325从网上下的java解惑总共讲了61点,我拣一些,自己不知道的或 ... -
Java解惑读书笔记1
2011-05-07 10:14 10841。奇偶判断,应该用i%2 ...
相关推荐
通过这个demo,开发者可以快速了解和实践Sharding-JDBC的读写分离功能,为自己的项目带来更高的性能和扩展性。同时,这也是学习分布式数据库解决方案的一个良好起点,有助于提升对数据库管理和架构设计的理解。
### JDBC性能优化详解 #### 一、引言 在当今数据密集型的应用环境中,Java数据库连接(JDBC)作为Java应用程序与数据库之间的重要桥梁,其性能优化显得尤为重要。本文将根据“JDBC性能优化.pdf”文件提供的信息,...
在IT行业中,数据库操作是应用开发中的重要环节,而选择合适的访问层技术对于系统的性能有着直接影响。本篇文章将深入探讨iBATIS3和JDBC在性能上的对比,以帮助开发者更好地理解这两种技术的优劣。 iBATIS3是一个轻...
- **自动提交模式**:默认情况下,JDBC连接处于自动提交模式,每次SQL语句执行后都会自动提交。 - **手动提交模式**:关闭自动提交后,需要程序员显式调用`Connection`对象的`commit()`方法来提交事务,或者在出现...
5. **关闭自动提交**:在处理事务时,关闭自动提交,手动控制事务提交和回滚。 ### JDBC的安全注意事项 1. **参数绑定**:使用PreparedStatement,避免SQL注入。 2. **安全编码**:对用户输入进行验证和清理,防止...
通过对比开启和关闭自动提交模式下的性能表现,可以得出最佳实践建议。 ##### 2. SQL92语法解析器的影响 SQL92语法解析器的使用也会影响性能。通过比较使用和不使用SQL92语法解析器的情况,可以了解其对执行速度的...
**性能优化**:SQLJDBC4还提供了性能优化选项,例如批处理操作,允许一次提交多个SQL语句,减少网络往返次数。还可以调整连接池大小、超时设置等以适应不同的负载需求。 总之,SQLJDBC和SQLJDBC4为Java开发者提供了...
1. **自动提交模式**:默认情况下,JDBC连接处于自动提交模式,每次SQL语句执行后都会立即提交。这不利于事务处理,因为无法控制何时提交或回滚事务。 2. **手动提交模式**:通过调用`Connection`对象的`...
3. 批处理:允许一次性提交多个SQL语句,提高批量操作的性能。 4. 游标支持:提供多种游标类型,使开发者可以选择不同的数据读取模式,提高程序灵活性。 5. 复合主键和外键支持:便于构建复杂的数据库关系模型。 6. ...
可以通过调用`Connection`对象的`setAutoCommit(false)`来关闭自动提交,然后手动调用`commit()`或`rollback()`来控制事务。 6. **连接池**: 在实际应用中,为了提高性能和资源利用率,通常会使用连接池,如C3P0...
默认情况下,JDBC 连接处于自动提交模式,这意味着每次执行 SQL 语句后都会自动提交事务。为了控制事务,我们需要关闭自动提交模式,然后手动提交或回滚事务。 1. **关闭自动提交** 使用 `setAutoCommit(false)` ...
默认情况下,JDBC处于自动提交模式,每次SQL语句执行后都会自动提交。要手动控制事务,需要调用`Connection`对象的`setAutoCommit(false)`来禁用自动提交。 3. **开始事务**:在手动提交模式下,可以通过`...
达梦JDBC驱动支持ACID(原子性、一致性、隔离性、持久性)特性,可以进行事务管理和并发控制,比如设置自动提交、手动提交、回滚事务等。 6. **预编译语句与批处理**: 预编译语句(PreparedStatement)可以提高...
通过设置Connection的自动提交属性(`conn.setAutoCommit(false)`)来开启手动事务,并使用`commit()`和`rollback()`方法提交或回滚事务。 ### 5. JDBC批处理 批处理可以提高性能,通过批量执行多条SQL语句。可以...
值得注意的是,一旦关闭了自动提交功能,我们就需要通过调用Connection类的commit()和rollback()方法来人工的方式对事务进行管理。 3、在动态SQL或有时间限制的命令中使用Statement对象 在执行SQL命令时,我们...
4. **关闭自动提交**:默认情况下,JDBC连接处于自动提交模式,可通过`conn.setAutoCommit(false)`关闭自动提交,手动管理事务。 5. **使用连接池**:如C3P0、HikariCP等,可以重复利用数据库连接,避免频繁创建和...
通过Connection对象的`setAutoCommit(false)`关闭自动提交,手动调用`commit()`或`rollback()`。 7. **GUI与JDBC结合**: 在GUI环境中,如Swing或JavaFX,可以使用JDBC连接数据库,将结果显示在表格组件(JTable或...
2. **批处理更新(Batch Updates)**:允许一次提交多个SQL语句,提高了性能,减少了网络通信。 3. **结果集分页(Scrollable Result Sets)**:提供了向前和向后滚动的能力,以及定位到特定行的功能。 4. **...
JDBC支持两种事务隔离级别:自动提交和手动提交。默认情况下,每个SQL语句都会在一个单独的事务中执行(自动提交)。若需手动控制事务,可以调用`Connection.setAutoCommit(false)`来开启事务,并在所有操作完成后用...
- 自动提交:默认情况下,JDBC每条SQL语句都会开启一个事务并自动提交。可通过`Connection.setAutoCommit(false)`关闭自动提交,手动控制事务。 - 显式事务:通过`Connection.commit()`和`Connection.rollback()`...