谈谈优化JDBC数据库编程(转)

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

谈谈优化JDBC数据库编程

2009-07-16 17:22 xiaoyuerwzy 新浪博客  字号: T |  T
一键收藏,随时查看,分享好友!

这是我根据微软SQL Server 2000 JDBC DRIVER HELP,并参考其它资料整理而成。希望能对大家了解JDBC数据库编程有帮助。

AD:干货来了,不要等!WOT2015 北京站演讲PPT开放下载!

JDBC数据库编程1.尽量减少对数据库元数据方法的使用

同样是产生一个ResultSet对象,DatabaseMetaData 对象的方法比其它JDBC方法相对要慢,因此平繁使用该方法会降低系统的性能。 在程序中应当对产生的结果集信息进行高速缓存,比如将getTypeInfo()返回的结果集存入Vector或Hashtable中,这样可大大提高程序的效率。

JDBC数据库编程2.应避免的方法调用模式

在方法调用时应当尽量避免传入null做为参数,虽然有时能执行成功,但这对DB Server负担很重。其实在很多情况下所需的参数是已知的。比如:

   
  1. //这里略去了捕获违例代码(下同)。  
  2. DatabaseMetaData md=...;  
  3. ResultSet rs=md.getTables(null,null,"authors",null);//取得MS SQL SERVER pubs数据库中authors表的信息. 

应当写成:

   
  1. ResultSet rs=md.getTables("northwind","dbo","authors",new String[]{"TABLE"}); 

这样使程序更有效可靠。

JDBC数据库编程3.使用哑查询语句来取得表的相关特征信息

一个哑查询语句(Dummy Query,译为哑查询不知是否恰当,愿与大家探讨)不会产生有记录的结果集,比如:select * from tableName where 1=0,因为条件永不成立,DB Server 不会执行这条语句。因此,在不需产生记录行的情况下,哑查询能极大地提高程序的执行效率。比如我们要了解一个表的有关列信息时,上面的语句比select * from tableName这个语句要高效得多,后者数据库服务器要检索所有的行并返回一个记录集,而前者不需要。针对这一问题,JDBC可以有以下两种方法:

   
  1. case1:使用getColumns()方法
  2. //getColumns()是DatabaseMetaData的一个方法,其有关信息请查阅JDK1.3文档
  3. ResultSetrs=md.getColumns("pubs","dbo","authors",...);//返回一个有记录的结果集
  4. while(rs.next())//通过滚动结果集取得列名
  5. System.out.println(rs.getString(4));
  6. case2:使用getMetaData()方法
  7. Statementstmt=conn.createStatement();
  8. //数据库服务器永远不会执行这条查询语句
  9. ResultSetrs=stmt.executeQuery("select*fromauthorswhere1=0");
  10. ResultSetMetaDatarsrsmd=rs.getMetaData();
  11. intcolCount=rsmd.getColumnCount();//取得列数
  12. for(intcol=1;col<=colCount;col++)
  13. System.out.println(rsmd.getColumnName(col));
  14. //!这里列的顺序是select后列出现的顺序,并不一定与表中列顺序对应

通过以上的分析,第二种方法应是我们的选择。

JDBC数据库编程4.关于存储过程的调用

由于所有的JDBC驱动总是将SQL语句作为字符串发送到数据库服务器,数据库服务器经过语法分析、参数类型验证,然后将参数转换成正确的数据类型再去执行。比如有这么一个存储过程:

   
  1. CallableStatementcstmt=conn.prepareCall("{callgetCustomerName(123)}");
  2. //获得指定id的客户的名字,输入参数,id是个正整数
  3. ResultSetrs=cstmt.executeQuery();

在这里我们认为123是一个正整数,但实际"call getCustomerName(123)"作为字符串整个被发送到数据库服务器端,数据库服务器经过分析,离析出"123"将其转换为整数型值再做为参数送给存储过程执行。很明显,这样效率极低,因为我们把已知的东西仍要服务器去判断,这无疑额外加重了服务器的负担。做为优化也是我们常见的存储过程的调用方法应是:

   
  1. CallableStatementcstmt=conn.prepareCall("callgetCustomerName(?)");
  2. cstmt.setLong(1,123);//将值和类型信息编码后发送
  3. ResultSetrs=cstmt.executeQuery();
  4. //dosomething

JDBC数据库编程5.正确使用Statement和PreparedStatement对象及其execute方法

Statement 对象是为仅执行一次的查询语句优化而设计的,PreparedStatement 对象是为两次或更多次执行同一查询语句而设计的。PreparedStatement 对象第一次执行一个准备好的查询要花一定的代价,然而它带来的好处是为以后的查询加快了速度;因为SQL语句已经进行编译并放入高速缓存,你可以一直重复使用;想要改变查询条件获得不同的结果集只需用setXXX方法改变主机变量(?)的值就行了。

由于PreparedStatement 及 CallableStatement都是Statement的子类,所以它们都有execute(String sql),executeQuery(String sql),executeUpdate(String sql),executeBatch()方法。

execute(String sql)方法返回一个boolean值,它执行任意复杂的sql语句,可以产生多个结果集。如果有结果产生返回 true,如果没有结果集产生或仅是一个更新记数则返回 false。它产生的结果集可以通过getResultSet()和getMoreResults()获得,更新记数可通过getUpdateCount()获得。显然execute(String sql)方法的使用要复杂一些,因此如果只是简单的查询或更新操作请使用executeQuery(String sql)和executeUpdate(String sql)方法。executeUpdate(String sql)能执行INSERT,UPDATE,DELETE语句,及DDL和DML命令(此时返回值为0)。

如果需要进行更多的更新操作,只需将这些更新命令打包后一起提交给数据库,数据库一次处理所有的请求,这比逐条提交要高效得多。例如:

   
  1. //保存当前提交模式
  2. booleancommitState=conn.getAutoCommit();
  3. //关闭自动提交模式
  4. conn.setAutoCommit(false);
  5. Statementstmt=conn.createStatement();
JDBC优化 Mysql 优化 DriverManager 阅读详情

相关推荐

QTableView为例:Qt模型视图委托(MVD)(Model-View-Delegate)

QT中的MVD(模型-视图-委托)模式是一种类似于MVC的设计模式,将数据、界面和交互逻辑分离。模型负责数据管理,视图负责显示界面,而委托则嵌入在视图中处理数据的显示和编辑。QT提供了多种视图组件(如QListView、QTreeView、QTableView)和模型类(如QStandardItemModel、QAbstractItemModel),支持数据的多样化呈现。委托(Delegate)通过定制显示和编辑行为增强了视图的灵活性。该模式适用于各类数据结构展示(列表、表格、树形),能够高效处理数据与界面

菜一头包的博客 1965

JDBC性能优化方案

近期用到了利用JDBC查询Oracle数据库,但是查询效率不尽人意,研究了一下JDBC方面可以优化的地方,在这里跟大家分享一下。 1.设置最优的预取值 defaultRowPrefetch:预取条数默认值 defaultBatchValue:触发查询操作的批量请求值

Heaven Wang 的专栏 1万+

3D点云修复实战:用PCN网络快速补全缺失的激光雷达数据(附代码)

本文详细介绍了PCN(Point Completion Network)网络在3D点云修复领域的实战应用。针对激光雷达数据常见的缺失问题,PCN通过端到端的深度学习架构,直接处理原始点云,实现由粗到精的快速补全。文章深入解析了其核心思想与编码器-解码器架构,并提供了完整的环境搭建、数据准备、模型实现、训练评估及在真实场景下的优化策略与代码示例,为自动驾驶、机器人等领域的开发者提供了高效的数据修复解决方案。

weixin_29041195的博客 367

详解JDBC的实现与优化(万字详解)

JDBC详解 简介 JDBCJava 数据库连接,是一种标准Java应用编程接口( JAVA API),用来连接 Java 编程语言和广泛的数据库。从根本上来说,JDBC 是一种规范,它提供了一套完整的接口,允许便携式访问到底层数据库,因此可以用 Java 编写不同类型的可执行文件。 执行流程: 连接数据源,如:数据库。 为数据库传递查询和更新指令。 处理数据库响应并返回的结果。 所需的接口和类 1.Connection接口 Connection 对象的数据库能够提供信息描述其表、所支持的 SQL

cout_s的博客 1296

Java_JDBC优化策略

via: http://lavasoft.blog.51cto.com/62575/225828/ 相比Hibernate、iBatis、DBUtils等,理论上JDBC的性能都超过它们。JDBC提供更底层更精细的数据访问策略,这是Hibernate等框架所不具备的。   在一些高性能的数据操作中,越高级的框架越不适合使用。这里是我在开发中对JDBC使用过程中一些优化经验总结。   ...

ALL TECHNOLOGIES ARE CLOUDS 281

Java程序设计——数据库的访问优化JDBC编程

通过对数据库访问的基础代码的封装,可以简化访问数据库的操作,从而实现减少代码冗余以及提高效率在项目的根目录下新建一个config子目录,在子目录中创建一个jdbc.properties属性文件 属性文件内容: DataBaseName:数据库名字数据库驱动管理类:8.0版本属性配置类:.........

Mr_John 910

初始MYSQL数据库(8)—— JDBC编程

JDBC的概念、JDBC的使用、SQL注入、优化后的JDBCJDBC编程的两种方式对比

我要学编程的博客 1690

JDBC 连接 MySQL

JDBCJava DataBase Connectivity (Java 数据连接)技术的简称,是一种可用于执行SQL 语句的 Java API。它由一些 java 语言编写的类和接口组成;程序员通过使用 jdbc 可以方便地将 SQL 语句传送给几乎任何一种数据库。......

程序猿追的博客 11万+

JDBCJava Database Connectivity(Java语言连接数据库

JDBC课堂笔记 1、什么是JDBCJava DataBase Connectivity 在java语言中编写sql语句,对mysql数据库中的数据进行CRUD操作。 2、JDBC相关的类库在哪里? java.sql.*; 3、JDBC本质上是一堆什么呢? java.sql.*; 这个包下都是JDBC的接口,SUN公司制定的! JDBC是体现“接口作用”的非常经典的例子。 JDBC降低了耦合度,提高了扩展力。 对于java程序员来说,不需要关心数据库是哪个品牌。只要面向JDBC接口编程就行! JDBC

途中的博客 1万+

【MySQL】从连接数据库开始:JDBC 编程入门指南

DriverManger是JDBC中的一个核心类,位于java.sql包下,他负责管理数据库驱动程序,并为客户端程序提供获取数据库连接的方法。它就像一个“驱动管理器”,协调不同数据库驱动与应用程序之间的交互。是Java数据库连接(JDBC)的一个接口,用于获取数据库连接,可方便数据库连接资源,实现连接池等高级功能。

2301_80543957的博客 1994

JDBC数据库连接池。

▶ 概述JDBC为访问不同的数据库提供了统一的接口,为使用者屏蔽了细节问题。Java程序员使用JDBC, 可以连接任何提供了JDBC驱动程序的数据库系统,从而完成对数据库的各种操作。▶ 原理示意图▶ JDBC的好处JDBCJava提供一套用于数据库操作的接口API, Java程序员只需要面向这套接口编程即可。不同的数据库厂商,需要针对这套接口,提供不同实现。▶ API。...

yzh2776680982的博客 2931

JDBC编程Java程序操作数据库

JDBC(即Java Database Connectivity,java数据库连接)是 Java 提供的标准接口,用于在 Java 程序中实现与数据库的连接和操作。通过 JDBC,你可以使用 Java 代码来执行 SQL 语句、连接数据库、处理事务以及处理查询结果等。这个API由 java.sql.*,javax.sql.* 包中的一些类和接口组成,它为Java 开发人员操作数据库提供了一个标准的API,可以为多种关系数据库提供统一访问。

StuLearn-LJC的博客 1179

Java学习手册:JDBC 数据库编程

JDBCJava Database Connectivity)是 Java 编程语言中用于执行 SQL 语句的 API,它为 Java 应用程序与各种关系型数据库之间的交互提供了标准化的接口和方法。通过 JDBC,开发人员可以方便地执行数据库操作,实现数据的存储、查询、更新和删除等功能。JDBC 技术为 Java 开发人员提供了一种灵活且高效的方式来与关系型数据库进行交互,是 JavaWeb 开发中实现数据持久化的重要手段。

佩奇的技术笔记 893

JDBC如何与数据库进行连接

开发工具与关键技术:MyEclipse 10,JDBC应用 作者:丁晓娟 撰写时间:2019-6-4 JDBCJava Database Connectivity):Java数据库连接,它是与数据库进行连接的纽带(与数据库进行交互)。使用JDBC,可以在不同的数据库功能模块层次上提供统一的用户界面,可以建立与数据库的连接,发送SQL语句和处理结果。 JDBC是跨数据库平台的,我们可以在java编...

weixin_44543324的博客 2173

史上最全的Java JDBC编程详细教程,你值得拥有~

package com.insist.day08.review; import java.io.BufferedReader; import java.io.InputStreamReader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import

smilehappiness的博客 7760

JavaWeb(JDBC编程)看这一篇就够了 —— 如何使用Java操作mysql数据库

JDBC就是使用Java语言操作关系型数据库的一套APIJDBC(Java Database Connectivity)全称为Java数据库连接。JABC是一套连接数据库的标准接口,Java可以通过JDBC编程实现操作不同的数据库。不同的数据库想要被Java代码操作,都要定义自己对于JDBC的实现类,也就是数据库驱动。官方(sun公司)定义的一套所有关系型数据库的规则,即接口。

宁可枝头抱香死,何曾吹落北风中。 6885

如何用代码操作数据库JDBC编程

前言。

weixin_64874291的博客 1466

JDBC编程数据库连接池事务处理优化

一、JDBC编程 1.什么是JDBCJDBC即(java data base connection),是java提供的一套java数据库连接接口,是一套连接标准,各数据库厂商以及第三方对JDBC进行实现,从而生产数据库驱动;当前各主流数据库基本都显现了对JDBC的支持;也就是说掌握JDBC编程可以将你的程序连接到任意实现了JDBC数据库; 2.JDBC编程基...

WuHuaRou123的博客 880

JavaJDBC连接数据库详细步骤(面试必备)

面试必备,带你寻根知源JDBC连接数据库的六步,知其然知其所以然,超详细步骤手把手带你探究反射注册驱动以及工具类的封装

m0_56164356的博客 4595

JDBC编程

编程语言:C, C++. JAVA, python等数据库:mysql, oracle, sql server等数据库驱动包:不同的数据库,对应不同的编程语言提供了不同的数据库驱动包,如:MySQL提供了Java的驱动包mysql-connector-java,需要基于Java操作MySQL即需要该驱动包。同样的,要基于Java操作Oracle数据库则需要Oracle的数据库驱动包ojdbc

2401_83177222的博客 1017
上一篇: MySql常用命令(转)
下一篇: Java写入xml (1)
八六上山啦
博客等级 码龄12年 42粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值