java连接oracle出现错误,高手请帮助啊~~~~~~~~

shanxia 2005-04-26 09:09:39
各位高手:
我最近做一个项目,需要连接oracle数据库,我这样写程序连接:
public Connection getConnection()throws InstantiationException{
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
String url="jdbc:oracle:thin:172.21.3.201:1521:IERP";
//orcl为数据库的SID
String user="iufotest";
String password="1";
Connection conn= DriverManager.getConnection(url,user,password);
return conn;
} catch (ClassNotFoundException e) {
System.out.println("3");
System.out.println(e.toString());
return null;
} catch (SQLException e) {
System.out.println("4");
System.out.println(e.toString());
return null;
}
}
可是显示连接不上数据库,请问我哪里错了?搞了很久都不行,请高手救救我啊!!!!
...全文
175 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
roomine 2005-04-27
  • 打赏
  • 举报
回复
这是我的连接ORACLE的例子:
--------------------------------------------
import java.sql.*;

public class Oracle2 {
public static void main(String[] arguments) {

try {
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String url="jdbc:oracle:thin:@localhost:1521:isorcl1"; //orcl为数据库的SID
String user="inte";
String password="inter";
Connection conn=DriverManager.getConnection(url,user,password);
Statement st=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="SELECT test1,test2 FROM test";
ResultSet rec=st.executeQuery(sql);

System.out.println("Test1\t" +
"test2");
while(rec.next()) {
System.out.println(rec.getString(1) + "\t"
+ rec.getString(2));
}


st.close();
} catch (SQLException s) {
System.out.println("SQL Error: " + s.toString() + " "
+ s.getErrorCode() + " " + s.getSQLState());
} catch (Exception e) {
System.out.println("Error: " + e.toString()
+ e.getMessage());
}
}
}

--------------------------
fangbo111 2005-04-27
  • 打赏
  • 举报
回复
在你的IP地址前面+"@"就可以了
java_renyusheng 2005-04-27
  • 打赏
  • 举报
回复
你的是取不出数据,还是根本就连接不上数据库???
如果是连接不上数据库,可能是orcale驱动的问题。
如果取不出数据,那就应该是你的程序的问题了。
你连接数据库和取数据的代码完全正确,
检查一下看看是不是逻辑问题!!!
寒舍人 2005-04-27
  • 打赏
  • 举报
回复
J2EE应用中与Oracle数据库的连接
在J2EE应用程序开发中,应用程序与数据库连接的建立是我们经常遇到的问题之一。在这里我主要谈谈在本地应用程序中通过OCI方式、thin方式和JdbcOdbc桥方式连接Oracle数据库,在iPlanet Application Server 6.5和Sun Java System Application Server 7中对Oracle数据库连接池的配置以及应用中如何从连接池中获得连接
一、本地通过JDBC获得Oracle数据库连接
通过JDBC获得Oracle数据库连接,有三种方式:OCI方式、thin方式和JdbcOdbc桥方式。OCI方式依赖于本地的动态链接库,如果在本地安装了Oracle数据库客户端可以采用该方式;而thin方式为纯java的数据库连接方式;JdbcOdbc桥方式依赖于本地ODBC数据库源的配置,这种方式一般不太被采用。
1、OCI方式
先在本地安装Oracle客户端,安装完之后,在安装的路径中可以找到…/jdbc/lib/classes12.zip文件,我们在环境变量classpath中设置classes12.zip所在的路径。
然后通过以下的数据库连接类,在本地通过OCI方式获得Oracle数据库连接
/**
* 在本地获得数据库连接
*/

package com.j2ee.db;

import java.util.*;
import java.sql.*;
import javax.sql.*;
import java.io.*;
import oracle.jdbc.driver.*;
import javax.naming.*;

/**
* 通过OCI方式获得Oracle数据库连接
*/
public class DbConnection
{
final static String sDBDriver = "oracle.jdbc.driver.OracleDriver";
final static String sConnStr = "jdbc:oracle:oci8:sr/sr@ora199";

/**
*
*/
public DbConnection()
{
}

/**
* 获得Oracle数据库连接
*/
public java.sql.Connection connectDbByOci()
{
java.sql.Connection conn=null;
try
{
Class.forName(sDBDriver);
conn = DriverManager.getConnection(sConnStr);
}
catch (Exception e)
{
System.out.println("ERROR:"+e.getMessage());
}
return conn;
}
}
在连接字符串 "jdbc:oracle:oci8:sr/sr@ora199" 中,"sr/sr"为Oracle用户的用户名和口令,"ora199"为数据库服务名。
2、thin方式
先到Oracle技术网(http://otn.oracle.com/global/cn/software/tech/java/sqlj_jdbc/index.html)下载Oracle JDBC Drivers,同样地将下载后的zip文件的路径设置在环境变量classpath。
然后通过以下的数据库连接类,在本地通过thin方式获得Oracle数据库连接。
/**
* 在本地获得数据库连接
*/

package com.j2ee.db;

import java.util.*;
import java.sql.*;
import javax.sql.*;
import java.io.*;
import oracle.jdbc.driver.*;
import javax.naming.*;

/**
* 通过thin方式获得Oracle数据库连接
*/
public class DbConnection
{
private String sConnStr = "";

/**
* 缺省构造器
*/
public DbConnection()
{
sConnStr = "jdbc:oracle:thin:@10.1.4.199:1521:ora199";
}

/**
* @param ip,serviceName
*/
public DbConnection(String ip,String serviceName)
{
sConnStr = "jdbc:oracle:thin:@"+ip+":1521:"+serviceName;
}

/**
* 通过thin方式获得Oracle数据库的连接.
*/
public java.sql.Connection connectDbByThin()
{
java.sql.Connection conn=null;
try
{
Class.forName(sDBDriver);
conn = DriverManager.getConnection(sConnStr,"sr","sr");
}
catch (Exception e)
{
System.out.println("ERROR:"+e.getMessage());
}
return conn;
}

/**
* 通过thin方式获得Oracle数据库的连接.
* @param userId,password
*/
public java.sql.Connection connectByJdbc(String userId,String password)
{
java.sql.Connection conn=null;
try
{
Class.forName(sDBDriver);
conn = DriverManager.getConnection(sConnStr,userId,password);
}
catch (Exception e)
{
System.out.println("ERROR:"+e.getMessage());
}
return conn;
}
}
这种方式运用起来比较灵活,简单,具有较强的移植性和适用性。只要注意连接字符串"jdbc:oracle:thin:@10.1.4.199:1521:ora199"中具体参数的设置即可
3、JdbcOdbc桥方式
先通过管理工具中的数据源来添加本地对Oracle数据库的连接,然后通过以下的数据库连接类,在本地通过JdbcOdbc桥方式获得Oracle数据库连接。
/**
* 在本地获得数据库连接
*/

package com.j2ee.db;

import java.util.*;
import java.sql.*;
import javax.sql.*;
import java.io.*;
import oracle.jdbc.driver.*;
import javax.naming.*;

/**
* 通过JdbcOdbc桥方式获得Oracle数据库连接
*/
public class DbConnection
{
/**
*
*/
public DbConnection()
{
}

/**
* 获得Oracle数据库连接
*/
public java.sql.Connection connectDbByJdbcOdbcBridge()
{
java.sql.Connection conn=null;
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con=DriverManager.getConnection("jdbc:odbc:ora199","sr","sr");
}
catch (Exception e)
{
System.out.println("ERROR:"+e.getMessage());
}
return conn;
}
}
在getConnection方法中第一个参数"jdbc:odbc:ora199" 中的"ora199"为本地ODBC数据源的数据源名称,第二个参数和第三个参数分别为Oracle的用户名和口令。
二、通过连接池获得Oracle数据库连接
这部分主要讲述在iPlanet Application Server 6.5和Sun Java System Application Server 7中Oracle数据库连接池的配置,以及在应用中如何通过连接池获得数据库的连接。
1、iPlanet Application Server 6.5连接池的配置
先打开iPlanet Application Server 6.5的管理控制台,选中"database"面板,再选择"External JDBC Drivers"选项后,点击"Add…"按钮,在弹出的对话框中,添加一个名为"ora-type4"的JDBC Driver。

Driver Classpath:该参数填写classes12.zip文件的物理路径。
然后在"External JDBC DataSources"中选择"Add…",在弹出的对话框中添加一个JNDI名称为"credit2"的数据源。

DriverType:选择刚添加好的"ora-type4";
Datasource:ora199,为Oracle数据库服务名;
Datasource:ora199,为Oracle数据库服务名;
Connection Pool Parameters:图中显示的是缺省设置,可以根据自己环境情况来更改这些设置。
保存完设置后,在"DataSource Selection Box"中,选择刚添加的"credit2"数据源,再选择"Vendor Specific Properties"按钮。在对话中添加一个URL属性。

至此,iPlanet Application Server 6.5中的数据库连接池配置完毕,重起服务使之生效。
2、Sun Java System Application Server 7连接池的配置
在配置之前将classes12.zip文件置于…/server1/lib目录下。通过浏览器的4848端口打开Sun Java System Application Server 7的管理界面,选择"server1"->"JDBC"-> "Connection Pools"下的"New…"

添加一个名称为"MyConnectionPool"的Oracle数据库连接池。"Next"下一步。

在"General"中填写"Datasource Classname"。

在"Properties"中将不需要的属性删除,同时添加"URL"属性。
"dataSourceName"中填写Oracle数据库服务名。
以下连接池的缺省设置,可以根据自己环境的情况作相应的调整。

选择"Finish"完成连接池的设置。
下一步为"MyConnectionPool"连接池创建一个JNDI,以便应用程序能够通过该名称获得连接池中的连接。 "server1"->"JDBC"-> "JDBC Resources"下的"New…"

至此,Sun Java System Application Server7中的数据库连接池配置完毕,重起服务使之生效。
3、通过连接池获得连接
以上在iPlanet Application Server 6.5和Sun Java System Application Server7中配置的连接池都可以通过以下的数据库连接类,从连接池中获得Oracle数据库连接。
/**
* 从连接池中获得数据库连接
*/

package com.j2ee.db;

import java.util.*;
import java.sql.*;
import javax.sql.*;
import java.io.*;
import oracle.jdbc.driver.*;
import javax.naming.*;

/**
* 通过连接池方式获得Oracle数据库连接
*/
public class DbConnection
{
/**
*
*/
public DbConnection()
{
}

/**
* 获得Oracle数据库连接
*/
public java.sql.Connection connectDbByConnectionPool()
{
java.sql.Connection conn=null;
try
{
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("jdbc/credit2");
conn=ds.getConnection();
}
catch (Exception e)
{
System.out.println("ERROR:"+e.getMessage());
}
return conn;
}
}
4、使用连接池的优点使用连接池的优点主要体现在两个方面:对数据库的连接统一进行配置、管理、监控,以及对数据库连接池的参数进行优化调整,同时对应用中没有关闭或其他原因造成没有关闭的数据库连接由连接池统一进行管理。便于应用的移植和后端数据库的切换,因为在应用中通过统一的JNDI获得数据库的连接,而具体连接的是哪一台机器上的数据库与应用无关。

silverend 2005-04-27
  • 打赏
  • 举报
回复
NULL Pointer 异常
原因可能是与数据库连接的几个对象conn,statement,resultset未成功赋值而造成指针的悬空

首先驱动程序的JAR包加了吗;
再者我看你用的是预查询PrepareStatement,里面的SQL语句好象应该不同于一般的SQL语句吧,
按楼主的写法应用普通查询的
shuxiongquang 2005-04-27
  • 打赏
  • 举报
回复
你的环境变量设置吗?你打过补丁了吗?
charmgjj 2005-04-27
  • 打赏
  • 举报
回复
认真学习
jingjing50 2005-04-27
  • 打赏
  • 举报
回复
resultset= statement .executeQuery();错了
因该为resultset= statement .executeQuery(sql);
lahmyyc 2005-04-26
  • 打赏
  • 举报
回复
先试一下不操作数据库连接,如果没有报错就说明是你的数据库操作语句有问题,你就应该用简单一点的Statement来操作,PreparedStatement我很少用,感觉规范但实际上麻烦;如果报错就是数据库连接的问题,InstantiationException是当应用试图使用 Class 类中的 newInstance 方法创建一个类的实例,而指定的类对象是一个接口或是抽象类而不能实现时,就抛该异常,看不出你为什么要抛这个,检查你的Driver和url,如果还是不行可以尝试用向导作。
shanxia 2005-04-26
  • 打赏
  • 举报
回复
哪位有连接成功的例子吗?
请给我一段代码吧
公司白天不能上网
好烦啊!!
shanxia 2005-04-26
  • 打赏
  • 举报
回复
谢谢回答
报的是jdbc错误,NullPoint,我这样取数:
PreparedStatement statement = null;
ResultSet resultset = null;
String sql= "select * from IUFO_USERINFO where USER_NAME = '" + s1 + "'";
statement = con.getConnection().prepareStatement(sql);
resultset= statement .executeQuery();
while(resultset.next())
{ }
jFresH_MaN 2005-04-26
  • 打赏
  • 举报
回复
报的是什么异常啊?

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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