写法一:
Object[] cocodeParams = new Object[2];
Object[] dataParams = new Object[3];
for(int i=0;i<n;i++){
cocodeParams[0]="0";
cocodeParams[1]="1";
BaseDAO.executeUpdate(sql, cocodeParams);
dataParams[0]="A";
dataParams[1]="B";
dataParams[2]="C";
BaseDAO.executeUpdate(sql, dataParams);
-----------------------------------------
写法二:
List cocodeList=new ArrayList();
List dataList=new ArrayList();
Object[] cocodeParams = null;
Object[] dataParams = null;
for(int i=0;i<n;i++){
cocodeParams = new Object[2];
cocodeParams[0]="0";
cocodeParams[1]="1";
cocodeList.add(cocodeParams);
dataParams = new Object[3];
dataParams[0]="A";
dataParams[1]="B";
dataParams[2]="C";
dataList.add(dataParams);
}
BaseDAO.batchUpdate(sql, cocodeList);
BaseDAO.batchUpdate(sql, dataList);
}
1.BaseDAO是一个封装jdbc的工具类
2.BaseDAO.batchUpdate(String sql, Object[] params);
如:sql = "update employee set name = ? ,code = ? , age = ? "
Object[] params = new Object[3]; params[0]="A"; params[1]="B"; params[2]="C";
通过执行BaseDAO.batchUpdate(String sql, Object[] params)
达到update employee set name = 'A' ,code = 'B', age = 'C'的目的
通过Statement实现,传入sql语句和要设定的值(Object[])
3.BaseDAO.executeUpdate(String sql, List params);
如:sql = "update employee set name = ? ,code = ? , age = ? "
Object[] params1 = new Object[3]; params[0]="A"; params[1]="B"; params[2]="C";
Object[] params2 = new Object[3]; params[0]="B"; params[1]="C"; params[2]="D";
params.add(params1);params.add(params2);
通过执行BaseDAO.batchUpdate(String sql, Object[] params)
达到update employee set name = 'A' ,code = 'B', age = 'C';update employee set name = 'B' ,code = 'C', age = 'D'的目的
通过PreparedStatement实现,传入同构的sql语句和要设定的值(LIST)
在上面的两种情况中
写法一用了BaseDAO.batchUpdate(String sql, Object[] params);
写法二用了BaseDAO.executeUpdate(String sql, List params);
既然写法二用了List,那么add的时候就不能增加同一对象,必须创建新对象(否则,所有的都是相同的)
写法一,创建了cocodeParams和dataParams两个对象
写法一,创建了2*n个对象
现在的效率应该怎么分析呢?
写法一,少创建了对象,但用了statement
写法二,多创建了对象,但用了preparedstatement
我感觉各有己见,大家讲讲自己的看法吧
分享到:
相关推荐
这篇文章将详细介绍PreparedStatement对象在JSP中操作数据库的使用方法,包括创建对象、传递参数、以及确保参数数据类型一致性等关键知识点。 首先,PreparedStatement实例可以包含预编译的SQL语句,这意味着SQL...
2. 使用StringBuilder或StringBuffer替换字符串连接:在循环中使用+操作符连接字符串会创建多个中间对象,效率低下,而StringBuilder和StringBuffer则提供了更高效的方式。 3. 减少对象创建:频繁的对象创建和销毁会...
- **内存分配与池化**:了解堆内存结构,合理设置新生代、老年代大小,以及使用对象池避免频繁创建销毁对象。 2. **代码优化** - **避免无效计算**:在循环中避免不必要的计算,提前计算可静态化的值。 - **使用...
避免在循环中创建对象实例,尤其是在性能敏感的循环中。应尽量减少对象创建,或预先创建所需的对象。 #### 11. 合理使用System.arraycopy()方法 System.arraycopy()是一个高效的数组复制方法,性能远高于循环手动...
`batchAddUsingJdbc`方法通常涉及创建PreparedStatement对象,预编译SQL语句,然后将数据绑定到批处理命令中。这种方式可以直接与数据库交互,没有额外的框架开销,但需要手动处理SQL语句和异常处理。示例代码中,...
避免冗余计算,合理使用循环和条件判断,减少不必要的对象创建,都是代码层面优化的重要措施。此外,理解并运用Java语法特性,如增强for循环、Stream API等,也能提升代码执行效率。 2. **垃圾收集与内存管理**:...
- 尽量避免循环中的对象创建,使用局部变量复用对象。 - 使用`final`关键字优化匿名内部类和方法引用,提高编译器优化的机会。 5. **并发与多线程优化**: - 使用线程池(ExecutorService)管理线程,避免大量...
- 在创建对象时,避免使用`new`关键字,特别是当对象需要频繁创建和销毁时。如果类实现了`Cloneable`接口,可以使用`clone()`方法来创建新实例,这不会调用构造函数,提高了效率。 - 对于设计模式中的工厂模式,...
#### 性能与安全性考虑 当处理大量数据或频繁执行相同SQL语句时,使用`PreparedStatement`会更加高效。此外,为了提高代码的可读性和可维护性,建议将数据库配置(如驱动、URL、用户名和密码)存储在外部配置文件中...
在创建对象时,预先分配足够的空间也是优化的一个方面。例如,`StringBuffer`和`Vector`等集合类在初始化时可以指定初始容量,避免因元素增加而导致的频繁扩容操作。例如: ```java StringBuffer buffer = new ...
这包括避免过度使用反射、减少循环内的对象创建、使用StringBuilder代替String进行字符串拼接,以及合理利用缓存机制。例如,使用ArrayList而非LinkedList进行遍历操作,因为ArrayList的随机访问性能更好。此外,...
当我们频繁地使用`str + str`进行字符串连接时,尤其是在循环中,会创建大量的中间字符串对象,这将导致不必要的内存分配和垃圾回收,从而影响性能。 首先,让我们深入了解`str + str`的工作原理。在Java中,字符串...
- 解决方案:检查代码中是否有无用的大对象,使用内存分析工具如VisualVM或MAT来定位问题,调整JVM的内存参数(如-Xms, -Xmx等)。 2. **空指针异常(NullPointerException)** - 原因:尝试访问尚未初始化或已...
- 避免在循环中创建Statement或PreparedStatement对象,尽可能重用。 - 对于大数据量的查询,考虑分页查询或流式处理ResultSet。 总结,JDBC是Java连接数据库的基础,通过理解其工作原理和实践中的最佳实践,开发者...
- **对象创建与销毁**:避免在循环中定义局部变量,因为这会频繁创建和销毁对象,消耗内存。使用`clone()`方法有时比创建新对象更有效,特别是对于复杂的继承结构。同时,避免深度继承,以减少不必要的父类构造。 ...
1. 创建PreparedStatement对象,传入SQL语句。 2. 使用`setXXX()`方法设置参数,这里的`XXX`取决于参数类型(如`setString()`, `setInt()`, `setDate()`等)。 3. 调用`executeQuery()`或`executeUpdate()`方法执行...
1. Transient状态:对象刚刚被创建,尚未与Session关联。 2. Persistent状态:对象与Session关联,其变化会同步到数据库。 3. Detached状态:对象已从Session分离,但数据库中仍有对应的记录。 五、缓存机制 ...