jdk1.6下使用jdbc连接oracle9以及oracle10的不同表现的原因求教

uniconwang 2009-12-01 07:26:13
大家好,我最近在写一个jsp的页面,要往oracle里面批量导数据,量也不是很大,也就500条记录/次。我用的是 jdbc的thin模式连接的。当我在测试库上面写代码的时候,一切都很顺利,500条记录导入一直都是很成功的。但是在我把程序连接到正式库上面的时候,就有问题了,每次导入的时候只能够导20条,运气最好的时候也不过60多条,我很郁闷了,反反复复的检查,甚至把整个程序复制过去,只改一下他的url连接,也还是不行。我的测试库是以前厂家装的oracle9(基于AIX),现在用的生产库是自己装的oracle10,装在windows上面的。我用的jdbc是从生产库上面的oracle10数据库安装目录里拷贝下来的claa12.jar以及ojdbc14.jar。两个文件在连接oracle9的时候表现都很好,但是在连接它自己的oracle10的时候却如此的糟糕,请教一下是怎么回事啊?有没有哪位高人以前有遇到过类似问题的?还望赐教一下。谢谢!!我的连接数据库的javabean的代码如下:

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package newpackage;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Vector;

/**
*
* @author Administrator
*/
public class connecttodb {
Connection conn;
Statement stmt=null;
ResultSet rs=null;
public void connectTODB(){
String CLASSFORNAME="oracle.jdbc.driver.OracleDriver";
try{
Class.forName(CLASSFORNAME);
conn=DriverManager.getConnection("jdbc:oracle:thin:@193.34.7.18:1521:wk","wk","123456");
} catch(Exception e) {
e.printStackTrace();
}
}
/** Creates a new instance of AdminDataBaseBean */
public connecttodb() {
}



public ResultSet executeQuery(String sql)
{
// Statement stmt=null;
// ResultSet rs=null;
stmt=null;
rs=null;
connectTODB();
try
{

stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
}
catch(SQLException ex)
{
System.err.println("db.executeQuery: ".concat(String.valueOf(String.valueOf(ex.getMessage()))));
}
finally{
// this.close();
// this.closeconn();
}
//conn.close();
return rs;
}


public boolean executeUpdate(String sql)
{
boolean bupdate = false;
connectTODB();
stmt=null;
try
{
stmt = conn.createStatement();
int rowCount = stmt.executeUpdate(sql);
if(rowCount != 0)
bupdate = true;
}
catch(SQLException ex)
{
System.err.println("db.executeUpdate: ".concat(String.valueOf(String.valueOf(ex.getMessage()))));
}
finally{
close();
}
return bupdate;
}


public boolean log(String user_name,String operation,String service_num)
{
boolean bupdate = false;
String sql=null;
stmt=null;
rs=null;
connectTODB();
try
{
stmt = conn.createStatement();
sql ="insert into WK_WEA_OPELOG values(SEQ_WK_WEA_ROLE_BAK.nextval,'"+user_name+"','"+operation+"','"+service_num+"',sysdate)";
stmt.executeUpdate(sql);
}
catch(Exception e)
{
System.err.println("db.executeUpdate: ".concat(String.valueOf(String.valueOf(e.getMessage()))));
}
finally
{
close();
}
return bupdate;
}



public void close(){
try {
if(rs!=null){
rs.close();
rs=null;
}
if(stmt!=null){
stmt.close();
stmt=null;
}
if(conn!=null){
conn.close();
conn=null;
}
}catch(Exception ee){
ee.printStackTrace();
}
}

public void close2(){
try {

/*this.rs.close();
this.rs=null;*/


this.stmt.close();
this.stmt=null;


this.conn.close();
this.conn=null;

}catch(Exception ee){
ee.printStackTrace();
}
}

public void closers()
{
try
{
if(rs!=null){
rs.close();
rs=null;
}
}
catch(SQLException ex)
{
System.err.println("closeconn()".concat(String.valueOf(String.valueOf(ex.getMessage()))));
}
}




public void closeconn()
{
try
{
if(conn!=null){
conn.close();
conn=null;
}
}
catch(SQLException ex)
{
System.err.println("closeconn()".concat(String.valueOf(String.valueOf(ex.getMessage()))));
}
}


public void closestmt()
{
try
{
if(stmt!=null){
stmt.close();
stmt=null;
}
}
catch(SQLException ex)
{
System.err.println("closestmt():".concat(String.valueOf(String.valueOf(ex.getMessage()))));
}
}

}
...全文
408 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
uniconwang 2010-01-05
  • 打赏
  • 举报
回复
后来改了一下程序,捕捉到了出错的异常:ORA-12519 ,网上搜索了一把:按以下的方法做就好了:
1、查询数据库当前的连接数:
SQL> select count(*) from v$process;
2、查询数据库允许的最大连接数:
SQL> select value from v$parameter where name = 'processes';
3、修改数据库允许的最大连接数:
SQL> alter system set processes = 300 scope = spfile;
4、重启数据库:
SQL> shutdown immediate;
SQL> startup;
uniconwang 2009-12-01
  • 打赏
  • 举报
回复
楼上的,不是啊,你的和我的基本没有区别啊…………
zl3450341 2009-12-01
  • 打赏
  • 举报
回复

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DBCon {
private static String driver = "oracle.jdbc.driver.OracleDriver";
private static String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
private static String user = "scott";
private static String password = "tiger";

public static Connection getConnection(){
try {
Class.forName(driver);
Connection con=DriverManager.getConnection(url, user, password);
System.out.println("ok");
return con;
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}

public static void close(Connection con,Statement stm,ResultSet rs){
if(con!=null){
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(stm!=null){
try {
stm.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

public static void main(String[] args) {
DBCon.getConnection();
}
}
]


给楼主一个我以前的例子
uniconwang 2009-12-01
  • 打赏
  • 举报
回复
晕死,才发现不行的,我要插一条记录,就在网页上反馈一条是否成功的信息的。如果用批处理的话,貌似不能按条反馈信息啊?
uniconwang 2009-12-01
  • 打赏
  • 举报
回复
在找了,但愿有用,不过还是很忐忑,要知道,代码在9i下世一点问题都没有的啊,刚刚下了个jdbc6,还是不行,一如既往…………
道光2008 2009-12-01
  • 打赏
  • 举报
回复
上网找个jdbc批处理的列子看看
uniconwang 2009-12-01
  • 打赏
  • 举报
回复
楼上能不能详细一点点啊?
道光2008 2009-12-01
  • 打赏
  • 举报
回复
使用jdbc的批处理方式保存数据,并设定下每次处理的大小batch.size

81,092

社区成员

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

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