今天写了个程序往数据库插入100万条记录,代码如下
public static void insertRecords() throws Exception {
Connection conn = null;
try {
conn = DBUtil.getConnection();
conn.setAutoCommit(false);
while (count < TOTALNUM) {
PreparedStatement ps = conn.prepareStatement("select * from custfund limit ?");
ps.setInt(1, COPYNUM);
ResultSet rs2 = ps.executeQuery();
while (rs2.next() && count < TOTALNUM) {
PreparedStatement ps2 = conn
.prepareStatement("sql here...");
ps2.setInt(1, ++maxCustId);
ps2.setFloat(2, rs2.getFloat(2));
ps2.setFloat(3, rs2.getFloat(3));
ps2.setFloat(4, rs2.getFloat(4));
ps2.setFloat(5, rs2.getFloat(5));
ps2.setFloat(6, rs2.getFloat(6));
ps2.setFloat(7, rs2.getFloat(7));
ps2.setInt(8, rs2.getInt(8));
ps2.executeUpdate();
ps2.close();
count++;
if (count % 2000 == 0) {
System.out.println(count);
long curtime = new Date().getTime();
long timeUsed = curtime - time;
int remaincount = TOTALNUM - count;
System.out.println("remaining time:" + (remaincount / 2000) * timeUsed / 1000 + "s");
time = curtime;
conn.commit();
}
}
rs2.close();********
ps.close();********
}
System.out.println("total time:" + (new Date().getTime() - starttime) / 1000 + "S");
} finally {
if (conn != null) {
conn.close();
}
}
}
在****处如果不对rs, ps close,就会有java虚拟机out of memory.
按理说java虚拟机会自动垃圾回收,但为什么这里会这样呢?
原因是rs, ps没有关闭,java虚拟机认为它还在被使用。很多循环以后,就内存满了。
分享到:
相关推荐
SqlHelper.java连接数据库通用类... package org.jdbc.com.util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql....
6. **关闭资源**:使用完毕后,记得关闭ResultSet、Statement和Connection,避免资源泄露。 在提供的jar包中,`postgresql-jre8.jar`或类似的文件包含了PostgreSQL JDBC驱动的所有类,它允许Java程序与PostgreSQL...
6. **关闭资源**:在完成数据库操作后,记得关闭ResultSet、Statement和Connection。 ### 3. CRUD操作 JDBC支持对数据库的基本CRUD(Create、Read、Update、Delete)操作: - **创建(Create)**:使用`...
- 关闭资源:最后,确保关闭ResultSet、Statement和Connection以释放系统资源。 2. **JDBC连接各种数据库方式** - MySQL:使用MySQL Connector/J驱动,配置URL通常为`jdbc:mysql://localhost:3306/your_database?...
- **JDBC API**: 包含一系列的接口和类,如`java.sql.DriverManager`, `java.sql.Connection`, `java.sql.Statement`, `java.sql.PreparedStatement`等,它们提供了与数据库进行交互的方法。 - **驱动管理器**: `...
总之,`jdbc连接mysql工具类`主要涉及JDBC API的使用,包括数据库连接、预编译的SQL语句(PreparedStatement)、结果集处理以及资源管理。这个工具类可以极大地简化数据库操作,提高代码的可维护性和复用性。通过...
6. **关闭资源**:完成操作后,记得关闭`ResultSet`、`Statement`和`Connection`,以释放系统资源。 博客链接中提到的iteye博客可能详细介绍了这些步骤,并提供了示例代码,演示了如何连接MySQL、Oracle、SQL ...
6. 关闭资源:操作完成后,务必关闭ResultSet、Statement和Connection,释放数据库资源。 MySQL JDBC连接器在不同版本间的差异主要体现在对新特性、性能优化和兼容性的支持上。例如,从5.x到8.x,MySQL引入了窗口...
执行完数据库操作后,记得关闭`ResultSet`、`Statement`和`Connection`,以释放系统资源。通常使用`try-with-resources`语句块确保资源的正确关闭。 7. **两个表的操作**: 在这个案例中,我们有两张表,可能需要...
- 关闭资源:最后关闭ResultSet、Statement/PreparedStatement及Connection对象,释放系统资源。 在“jdbc连接测试项目”中,你可以看到以下关键步骤的代码示例: - 加载驱动:`Class.forName(...
6. 关闭资源:在操作完成后,确保关闭Statement、ResultSet和Connection,以释放系统资源。 描述中的“NULL”表示没有提供具体的信息,但通常在学习JDBC时,我们可能会关注以下主题: - 数据库URL格式:不同的...
6. 关闭所有的资源(ResultSet、Statement和Connection)以防止内存泄漏。 值得注意的是,使用PreparedStatement可以有效防止SQL注入攻击,因为它允许预编译SQL并用参数替换动态内容,确保了安全性。同时,关闭不再...
6. 关闭资源:使用完数据库连接后,记得关闭`ResultSet`、`Statement`和`Connection`,避免资源泄漏。 除了基本的JDBC操作,达梦数据库还提供了诸如事务管理、预编译语句、批处理等功能,这些都可以通过JDBC接口...
6. **关闭资源**:使用完毕后,记得关闭`ResultSet`、`Statement`和`Connection`,避免资源泄露。 接下来,我们转向MySQL。MySQL是一款开源、免费的关系型数据库,它同样支持JDBC连接。 1. **获取JDBC驱动**:...
例如,若要连接MySQL数据库,则需要加载MySQL的JDBC驱动类,代码如下: ```java Class.forName("com.mysql.jdbc.Driver"); ``` 这段代码会尝试加载指定的类,并创建该类的一个实例。如果指定的类不存在,或者找...
- **驱动程序**: JDBC驱动是Java应用程序和数据库之间的桥梁,主要有四种类型的驱动:JDBC-ODBC桥接驱动、网络纯Java驱动、协议纯Java驱动和Java数据库连接API驱动。 - **数据库URL**: 用于定位数据库服务器,如`...
7. **关闭资源**: 执行完所有操作后,记得关闭`ResultSet`、`Statement`和`Connection`,以释放资源。 此外,为了处理日志和异常,还需要引入如log4j-1.2.14.jar和slf4j-api-1.5.11.jar这样的日志库。这些库可以...
Java使用Jdbc连接Oracle执行简单查询操作示例 Java使用Jdbc连接Oracle执行简单查询操作,是指使用Java语言通过Jdbc(Java ...通过本文,读者可以了解Java中Jdbc连接Oracle数据库的基本步骤和防止SQL注入的方法。
连接池在应用启动时预创建一定数量的连接,应用程序需要时可复用这些连接,用完后归还,避免频繁的打开和关闭连接。 ### 5. 配置参数 配置JDBC连接通常涉及以下参数: - **URL**:数据库的统一资源定位符,包含...
5. 关闭资源:在完成数据库操作后,记得关闭 `ResultSet`、`Statement` 和 `Connection` 对象,避免资源泄露。 `dbhelper` 文件可能是用于封装这些步骤的数据库帮助类,通常包含数据库连接池管理、SQL 执行等常用...