JDBC无法连接上oracle数据库,请高手不吝赐教!谢谢!!!

hjp101111 2011-05-25 01:18:25
实在没办法了,问题是这样的.
我用的oracle服务器.我用客户端用账号scott 密码tiger连接上去,可以用SQL语句往数据表里正常insert数据,也可以正常SELECT数据.
在JAVA里用的JDBC访问数据库,写了一个servlet访问数据库的时候(数据量很小),在网上查了下,都说是字符集的问题.我数据库用的是默认GBK字符集.程序里也没有哪里是设置字符集的地方.

总是提示如下错误:


java.sql.SQLException: ORA-03120: 双工转换例行程序: 整数溢出

at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:440)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396)
at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:837)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:445)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:191)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:523)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:207)
at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:1010)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1315)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3576)
at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3657)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper.java:1350)
at com.wephp.example.JDBCExample.main(JDBCExample.java:22)



程序代码如下:

package com.wephp.example;

import java.sql.*;

public class JDBCExample {

public static void main(String[] args) {
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@192.168.1.102:1521:guest";
String username = "scott";
String password = "tiger";
String sql = "insert into users (usersname,password) values (?,?)";
try {
Class.forName(driver);
// new oracle.jdbc.driver.OracleDriver();
Connection conn = DriverManager.getConnection(url, username, password);
// Statement stat = conn.createStatement();

PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "hjp");
pstmt.setString(2, "iloveyou");
pstmt.executeUpdate();

pstmt.close();
conn.close();

} catch (ClassNotFoundException e) {

e.printStackTrace();
} catch (SQLException e) {

e.printStackTrace();
}

}

}



实在是没办法了.请高手看看是什么问题?
...全文
676 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
hjp101111 2011-05-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 clxclx1990 的回复:]
不带这么写的,真是晕
[/Quote]

我是初学者,以前不是做JAVA的.代码是照的视频做的.

字符集,我查了server和客户端的都是一样的.还请指正一下.谢谢!
clxclx1990 2011-05-25
  • 打赏
  • 举报
回复
private static final String DRIVER = "oracle.jdbc.driver.OracleDriver";
private static final String URL = "jdbc:oracle:thin:@localhost:1521:Oracle";
private static final String DRIVERNAME = "scott";
private static final String DRIVERPWD = "tiger";

private Connection connection;
private PreparedStatement psm;
private Statement sm;
private ResultSet rs;

public void open() throws ClassNotFoundException, SQLException {
Class.forName(DRIVER);
this.connection = DriverManager.getConnection(URL, DRIVERNAME, DRIVERPWD);
}

public void close() {
if (null != rs) {
try {
this.rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (null != sm) {
try {
this.sm.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (null != psm) {
try {
this.psm.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (null != connection) {
try {
this.connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
clxclx1990 2011-05-25
  • 打赏
  • 举报
回复
不带这么写的,真是晕
meteor1015 2011-05-25
  • 打赏
  • 举报
回复
代码没有问题 :

帮助文档描述如:
ORA-03120 two-task conversion routine: integer overflow

Cause: An integer value in an internal Oracle structure overflowed when being sent or received over a heterogeneous connection. This can happen when an invalid buffer length or too great a row count is specified. It usually indicates a bug in the user application.

Action: Check parameters to Oracle calls. If the problem recurs, reduce all integer parameters, column values not included, to less than 32767.



去这个看看http://www.itpub.net/thread-287328-1-1.html# 帖子的8楼 看看对你是否有帮助
穆大叔 2011-05-25
  • 打赏
  • 举报
回复
应该是oracle的驱动问题,换个别的驱动包试试。。
飞哥在线 2011-05-25
  • 打赏
  • 举报
回复
从你的代码中看,你的users表中的
两个字段:usersname password都是字符类型
你查看一下你这个表在数据库中的字段定义类型是什么,如果你的username是number型,就改成varchar2(50)
hepeng_8 2011-05-25
  • 打赏
  • 举报
回复
暂时还未出现过的错误
职业宅男 2011-05-25
  • 打赏
  • 举报
回复
楼主把数据库里的username和password的字段再设长一点看看插入的是什么东西。
gbjjjgb 2011-05-25
  • 打赏
  • 举报
回复
我也遇到这个问题 是驱动包出现了问题,换一下可能就好了 可以选择一个oracle12的驱动包看下
demohunter 2011-05-25
  • 打赏
  • 举报
回复
用任何版本的oracle客户端,只要是客户端装在windows操作系统下,数据库服务器使用solaris操作系统,当全部报错"two-task conversion routine: integer overflow
你的服务器系统和客户端一致吗
demohunter 2011-05-25
  • 打赏
  • 举报
回复
看下表里列的数据类型和你插入的一致吗
andyniuandyniu 2011-05-25
  • 打赏
  • 举报
回复
学习学习啦。。。。
qm4050 2011-05-25
  • 打赏
  • 举报
回复
你的表里面的列是什么数据类型啊?
licip 2011-05-25
  • 打赏
  • 举报
回复
可能是你页面上的参数传递到servlet里的时候是乱码了,你看看是不是这个问题,如果是,你先把乱码的问题解决。
lixin5678 2011-05-25
  • 打赏
  • 举报
回复
是不是ORACLE客户端和ORACLE服务器端的位制不一致?
32位和64位的一起用,有可能出现以上问题!


wangldy 2011-05-25
  • 打赏
  • 举报
回复
是不是oracle本身有问题啊,在sqlplus里面执行一下你的语句看看能不能插入。
UPC_思念 2011-05-25
  • 打赏
  • 举报
回复
我感觉是oracle驱动有问题,你换个jar包试试
hjp101111 2011-05-25
  • 打赏
  • 举报
回复
数据表结构很简单:
表名:users
字段:usersname password

就两个字段,都是字符型的.

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧