三种数据库的测试:
Access 2003,SQL Server 2000,MySQL5.1.40
(一)Access
1,使用ODBC连接数据库插入数据,preparedStatement.setObject(index, Object);index对应字段的类型可以是任意类型,但当Object为null时,出错,更新时错误相同。
java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver]无效的 SQL 数据类型
at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6957)
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7114)
at sun.jdbc.odbc.JdbcOdbc.SQLBindInParameterNull(JdbcOdbc.java:986)
at sun.jdbc.odbc.JdbcOdbcPreparedStatement.setNull(JdbcOdbcPreparedStatement.java:363)
at sun.jdbc.odbc.JdbcOdbcPreparedStatement.setObject(JdbcOdbcPreparedStatement.java:1087)
at sun.jdbc.odbc.JdbcOdbcPreparedStatement.setObject(JdbcOdbcPreparedStatement.java:1074)
at sun.jdbc.odbc.JdbcOdbcPreparedStatement.setObject(JdbcOdbcPreparedStatement.java:1065)
但是当使用指定数据类型的set方法时,如:preparedStatement.setString(index, null);则可以正确执行。
2,数据库文件大小上限为2G,达到上限后,插入数据报错。
3,经常出现一些莫名其妙的错误,很难用。
(二)SQL Server 2000
1,使用JDBC连接数据库插入数据,PreparedStatement.setObject(index, Object);index对应的字段类型可以是任意类型,当Object为null时,插入的字段值为null,相当于没有插入字段值
2,使用SQL Server2000自带的驱动程序和jtds驱动时,有所不同。如,在数据库中的text类型,使用JDBC读取到内存中后前一个驱动下认为是String类型,而jtds驱动下认为是java.sql.Clob的一个实现类的类型。
3,相对于其他两种数据而言,还是比较好用的。
(三)MySQL
1,使用JDBC连接数据库插入数据,PreparedStatement.setObject(index, Object);index对应的字段类型可以是任意类型,当Object为null时,插入的字段值为null,相当于没有插入字段值。
2,使用JDBC连接数据库查询数据,ResultSet rs = PreparedStatement.executeQuery("select * from table_50");返回结果集为50万条记录,报错:内存溢出。rs中包含结果记录中的数据,rs对象很大(不可思议,难怪会内存溢出,是否有设置?)。
集众家之所长,终于解决了,在MySQL连接url中加入配置属性如下:
url = jdbc:mysql://127.0.0.1:3306/dataBaseName?useCursorFetch=true&defaultFetchSize=100
3,使用JDBC连接数据库插入数据,超级慢10000条数据5分钟。
public void testInsert(int count){
Connection conn = null;
PreparedStatement ps = null;
String sql = "insert into table_50(id, t_string, t_num, t_text, t_blob) values(?,?,?,?,?)";
try {
ps = conn.prepareStatement(sql);
int base = 0;
for(int i = base; i<base + count; i++){
try {
ps.setObject(1, i+1);
ps.setString(2, "string" + i);
ps.setObject(3, i/2);
ps.setObject(4, "很好,很强大" + i);
ps.setObject(5, "acd".getBytes());
ps.execute();
} catch (SQLException e) {
e.printStackTrace();
}
}
}finally{
if(ps != null){
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
修改之后,采用批量更新,就很快了:
public void testInsert(int count){
Connection conn = null;
PreparedStatement ps = null;
String sql = "insert into table_50(id, t_string, t_num, t_text, t_blob) values(?,?,?,?,?)";
try {
conn.setAutoCommit(false);
ps = conn.prepareStatement(sql);
int base = 0;
for(int i = base; i<base + count; i++){
try {
ps.setObject(1, i+1);
ps.setString(2, "string" + i);
ps.setObject(3, i/2);
ps.setObject(4, "很好,很强大" + i);
ps.setObject(5, "acd".getBytes());
ps.addBatch();
if((i + 1) % 1000 == 0){
ps.executeBatch();
conn.commit();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}finally{
if(ps != null){
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
分享到:
相关推荐
总的来说,这三种数据库连接jar包是Java开发中不可或缺的工具,它们简化了数据库操作,使得开发者能够高效地进行数据存取和处理。有了这些jar包和相应的连接说明,即使是初学者也能快速上手数据库编程,实现数据的...
总之,在VC++中使用MySQL API连接数据库涉及多个步骤,包括初始化连接、执行SQL、处理结果以及关闭连接。通过封装类可以简化这些步骤,提高代码的可读性和复用性。如果在实际项目中遇到问题,可以参考提供的示例代码...
本篇文章将详细探讨三种常见的数据库驱动包,包括其作用、使用场景以及如何安装和配置。 1. **JDBC驱动** (Java Database Connectivity) JDBC是Java平台的标准接口,用于连接Java应用程序与各种类型的数据库。它...
标题中的“强大的数据库工具”指的是一个能够高效管理和操作多种数据库的应用程序。这样的工具通常具有广泛的数据连接能力,允许用户连接到各种类型的数据库管理系统(DBMS),包括但不限于Oracle、MySQL、SQL ...
在IT行业中,数据库连接是应用程序开发中的重要环节,特别是在使用Delphi这种强大的Windows应用程序开发工具时。Delphi提供了多种方式来连接和操作数据库,使得开发者能够灵活地选择适合项目需求的解决方案。以下将...
在实际应用中,DBUtils是一个常用的数据库操作工具包,它简化了JDBC的使用,提供了连接池的封装,如`getConnection()`和`closeQuietly()`方法,便于管理和控制数据库连接。DBException是DBUtils自定义的异常类,用于...
### WEB数据库中几种数据库连接方法比较 #### 一、引言 随着互联网技术的迅猛发展,特别是电子商务领域的兴起,数据库技术已成为网络应用的核心技术之一。为了实现网站与数据库之间的高效连接,开发人员需要掌握...
在实际应用中,前三种方法使用最为广泛,这三种方法都可以满足 LabVIEW 对数据库的访问需求。第二种方法使用 ADO 技术访问数据库,ADO 对象在 LabVIEW 中是以 ActiveX 对象的形式提供的,LabVIEW 中可以使用 ActiveX...
以上是2010年三级数据库技术考试1至11章的重点内容概述,每个章节都包含了大量的理论知识和实践应用,对于理解和掌握数据库技术至关重要。通过深入学习和实践,可以有效地应对考试并应用于实际工作场景。
在三级数据库技术考试中,考生需要掌握以下几个关键知识点: 1. **数据库系统基础**:理解数据库的概念、功能和类型,如关系型数据库、非关系型数据库等。学习数据库系统的基本组成,包括数据库、数据库管理系统...
本篇文章将详细探讨Delphi中常见的几种数据库连接方式,帮助开发者更好地理解和应用。 一、Borland Database Engine (BDE) BDE,全称为Borland Database Engine,是早期Delphi版本中广泛使用的数据库连接技术。它...
Delphi数据库的三层架构是一种设计模式,用于构建分布式应用程序,特别是在数据库应用中。这种架构将应用程序分为三个主要部分:表示层(Presentation Layer)、业务逻辑层(Business Logic Layer)和数据访问层...
XML文件在数据库连接中的角色主要是配置和管理数据源,包括但不限于以下几点: 1. 存储数据库驱动类名(driverClassName) 2. 存储数据库连接URL(url) 3. 存储数据库用户名(username) 4. 存储数据库密码...
SQL SERVER 连接 Oracle 数据库几种方法 在实际开发中,我们经常需要在 SQL Server 中连接 Oracle 数据库,以便实现数据交换和集成。那么,如何在 SQL Server 中连接 Oracle 数据库呢?下面我们将介绍几种常见的...
在本文中,我们将比较几种常见的数据库管理系统,包括SQL Server、Oracle、MySql、Access等。 SQL Server SQL Server是微软公司开发的一种关系数据库管理系统。其主要特点包括: * 高性能设计,充分利用Windows ...
在SQL Server环境中,有时我们需要将一个数据库中的某个表复制到另一个数据库中,这可能是为了备份、数据迁移或创建测试环境等目的。根据提供的标题、描述和部分代码内容,我们可以整理出一套较为完整的操作流程和...
本文将深入探讨C#中几种常用的数据库封装技术,包括SQLite和BerkeleyDB,以及与数据库交互时涉及的序列化和通信机制。同时,我们将重点关注如何利用数据库连接池来优化性能。 首先,C#中的SQLite是一种轻量级、开源...
OpenSQL是一种特定于SAP的数据库访问语言,它是跨平台的,可以在不同的数据库系统中使用,例如Oracle、DB2、SQL Server等,它提供了一套标准的SQL接口,从而允许开发者在不同数据库系统中编写相同的代码。...