`
wxq276
  • 浏览: 10109 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

三种数据库的使用中发现的几个问题

阅读更多
三种数据库的测试:
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包

    总的来说,这三种数据库连接jar包是Java开发中不可或缺的工具,它们简化了数据库操作,使得开发者能够高效地进行数据存取和处理。有了这些jar包和相应的连接说明,即使是初学者也能快速上手数据库编程,实现数据的...

    vc中使用mysql api连接数据库的几个例子

    总之,在VC++中使用MySQL API连接数据库涉及多个步骤,包括初始化连接、执行SQL、处理结果以及关闭连接。通过封装类可以简化这些步骤,提高代码的可读性和复用性。如果在实际项目中遇到问题,可以参考提供的示例代码...

    三种数据库驱动包

    本篇文章将详细探讨三种常见的数据库驱动包,包括其作用、使用场景以及如何安装和配置。 1. **JDBC驱动** (Java Database Connectivity) JDBC是Java平台的标准接口,用于连接Java应用程序与各种类型的数据库。它...

    强大的数据库工具,支持几十种数据库

    标题中的“强大的数据库工具”指的是一个能够高效管理和操作多种数据库的应用程序。这样的工具通常具有广泛的数据连接能力,允许用户连接到各种类型的数据库管理系统(DBMS),包括但不限于Oracle、MySQL、SQL ...

    Delphi几种数据库连接

    在IT行业中,数据库连接是应用程序开发中的重要环节,特别是在使用Delphi这种强大的Windows应用程序开发工具时。Delphi提供了多种方式来连接和操作数据库,使得开发者能够灵活地选择适合项目需求的解决方案。以下将...

    访问数据库的三种方式

    在实际应用中,DBUtils是一个常用的数据库操作工具包,它简化了JDBC的使用,提供了连接池的封装,如`getConnection()`和`closeQuietly()`方法,便于管理和控制数据库连接。DBException是DBUtils自定义的异常类,用于...

    WEB数据库中几种数据库连接方法比较

    ### WEB数据库中几种数据库连接方法比较 #### 一、引言 随着互联网技术的迅猛发展,特别是电子商务领域的兴起,数据库技术已成为网络应用的核心技术之一。为了实现网站与数据库之间的高效连接,开发人员需要掌握...

    LabVIEW中访问数据库的几种不同方法.docx

    在实际应用中,前三种方法使用最为广泛,这三种方法都可以满足 LabVIEW 对数据库的访问需求。第二种方法使用 ADO 技术访问数据库,ADO 对象在 LabVIEW 中是以 ActiveX 对象的形式提供的,LabVIEW 中可以使用 ActiveX...

    三级数据库技术总结(1~11章重点)

    以上是2010年三级数据库技术考试1至11章的重点内容概述,每个章节都包含了大量的理论知识和实践应用,对于理解和掌握数据库技术至关重要。通过深入学习和实践,可以有效地应对考试并应用于实际工作场景。

    全国计算机等级考试-三级数据库技术-电子版

    在三级数据库技术考试中,考生需要掌握以下几个关键知识点: 1. **数据库系统基础**:理解数据库的概念、功能和类型,如关系型数据库、非关系型数据库等。学习数据库系统的基本组成,包括数据库、数据库管理系统...

    delphi几种数据库连接方式

    本篇文章将详细探讨Delphi中常见的几种数据库连接方式,帮助开发者更好地理解和应用。 一、Borland Database Engine (BDE) BDE,全称为Borland Database Engine,是早期Delphi版本中广泛使用的数据库连接技术。它...

    delphi数据库的三层架构

    Delphi数据库的三层架构是一种设计模式,用于构建分布式应用程序,特别是在数据库应用中。这种架构将应用程序分为三个主要部分:表示层(Presentation Layer)、业务逻辑层(Business Logic Layer)和数据访问层...

    三种数据库连接的配置XML文件

    XML文件在数据库连接中的角色主要是配置和管理数据源,包括但不限于以下几点: 1. 存储数据库驱动类名(driverClassName) 2. 存储数据库连接URL(url) 3. 存储数据库用户名(username) 4. 存储数据库密码...

    SQL SERVER连接oracle数据库几种方法

    SQL SERVER 连接 Oracle 数据库几种方法 在实际开发中,我们经常需要在 SQL Server 中连接 Oracle 数据库,以便实现数据交换和集成。那么,如何在 SQL Server 中连接 Oracle 数据库呢?下面我们将介绍几种常见的...

    几种常见的数据库比较

    在本文中,我们将比较几种常见的数据库管理系统,包括SQL Server、Oracle、MySql、Access等。 SQL Server SQL Server是微软公司开发的一种关系数据库管理系统。其主要特点包括: * 高性能设计,充分利用Windows ...

    sql-server中复制数据库某一个表到另一个数据库中

    在SQL Server环境中,有时我们需要将一个数据库中的某个表复制到另一个数据库中,这可能是为了备份、数据迁移或创建测试环境等目的。根据提供的标题、描述和部分代码内容,我们可以整理出一套较为完整的操作流程和...

    c#几种常用数据库封装

    本文将深入探讨C#中几种常用的数据库封装技术,包括SQLite和BerkeleyDB,以及与数据库交互时涉及的序列化和通信机制。同时,我们将重点关注如何利用数据库连接池来优化性能。 首先,C#中的SQLite是一种轻量级、开源...

    abap逻辑数据库ABAP数据库操作

    OpenSQL是一种特定于SAP的数据库访问语言,它是跨平台的,可以在不同的数据库系统中使用,例如Oracle、DB2、SQL Server等,它提供了一套标准的SQL接口,从而允许开发者在不同数据库系统中编写相同的代码。...

Global site tag (gtag.js) - Google Analytics