JDBC连接数据库的问题

pc2s 2004-05-12 12:00:11
其实是一个特简单的程序,连接Oracle数据库查询一个表中的全部数据(100多个字段)。
用两种方法:

1、使用jdbc:oracle:...的方式连接,查询1000条数据,当用ResultSet对象的next()方法,遍历完全部1000条数据,居然花费38秒的时间。

2、同样的程序,使用jdbc:odbc:...的方式连接(TNS连接),同样的数据,却只需要11秒。

差距这么大吗?如果使用第一种方法,有什么办法能提高查询效率?(这要是10000条数据,还不得死机?)

...全文
47 点赞 收藏 16
写回复
16 条回复
孙亖 2004年05月14日
没试过,可能是微软欺负sun,去unix上试试
回复 点赞
pc2s 2004年05月14日
怎么没人回答阿?
回复 点赞
yoyodd 2004年05月14日
这个问题没有试过!不得而知了!
回复 点赞
pc2s 2004年05月13日
用Class.forName("sun.jdbc.odbc.JdbcOdbcDriver")连接,进行检索用38秒;
用Class.forName("oracle.jdbc.driver.OracleDriver")连接,进行检索用11秒。
其他的全一样(当然包括SQL语句)。

-------------------
写错了,正确的如下:
用Class.forName("sun.jdbc.odbc.JdbcOdbcDriver")连接,进行检索用11秒;
用Class.forName("oracle.jdbc.driver.OracleDriver")连接,进行检索用38秒。
其他的全一样(当然包括SQL语句)。

回复 点赞
pc2s 2004年05月13日
楼上的,是jdbc:oracle...这个慢(消耗38秒),jdbc:odbc...这个快(消耗11秒)
回复 点赞
neuhawk 2004年05月13日
jdbc-odbc这种驱动肯定是很慢了拉。
回复 点赞
pc2s 2004年05月13日
难道没人能解释吗?
回复 点赞
pc2s 2004年05月12日
能详细点儿吗?
回复 点赞
rainboy20024 2004年05月12日
SQLWarning,SQLException
回复 点赞
pc2s 2004年05月12日
还有,当SQL语句出错的时候,能否从Exception中取得出错的位置?
回复 点赞
pc2s 2004年05月12日
用Class.forName("sun.jdbc.odbc.JdbcOdbcDriver")连接,进行检索用38秒;
用Class.forName("oracle.jdbc.driver.OracleDriver")连接,进行检索用11秒。
其他的全一样(当然包括SQL语句)。
回复 点赞
pc2s 2004年05月12日
关键问题是,SQL语句是最简单的“SELECT * FORM test”。还要怎么优化?

源码如下:
public boolean execute(String LsSql) throws SQLException {
clearResult();

if(bIsSelect = oStatement.execute(LsSql)) {
oResultSet = oStatement.getResultSet();
oResultSetMetaData = oResultSet.getMetaData();
iColumnCount = oResultSetMetaData.getColumnCount();
sColumnNames = new String[iColumnCount];

for(int i = 0; i < iColumnCount; i++)
sColumnNames[i] = oResultSetMetaData.getColumnLabel(i+1);

oResultSet.setFetchSize(1000);
iRowCount = 0;
while(oResultSet.next()) iRowCount++;

oSelectResult = new Object[iRowCount][iColumnCount];
...
以下省略(没有匹配大括号,看个意思就行了)

我是想说,为什么同样的数据、同样的SQL语句,使用jdbc:oracle要比jdbc:odbc慢3倍之多。

还要,谁能解释一下SQLWarning怎么用?怎么能找到错误出在SQL语句的哪个字符上?(PL/SQL Developer就可以实现定位错误位置。别告诉我是自己做语法分析)

JDK1.3.1
回复 点赞
lasersong2004 2004年05月12日
(1)优化你的SQL语句(例如将 in 改成 exists 等等)
(2)调整你的数据库(例如添加索引等等)

(*)Select有索引的表,速度快n倍
回复 点赞
caiyanying732 2004年05月12日
看源码先
回复 点赞
sniperlei 2004年05月12日
你最好还是给出源程序
回复 点赞
icewhite 2004年05月12日
用最新的jdbc试试看!
回复 点赞
发动态
发帖子
Java SE
创建于2007-09-28

3.4w+

社区成员

30.7w+

社区内容

Java 2 Standard Edition
社区公告
暂无公告