Oracle数据库连接问题

corner1988 2012-08-17 02:45:35
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Timestamp;

public class NewsDao {
public void getNewsList() {
Connection con=null;
Statement stmt=null;
ResultSet rs=null;
try {
//加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
//获得连接
con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:webDemo","system","manager");
//获得Statement对象
String sql="select*from news_detail";
stmt=con.createStatement();
rs=stmt.executeQuery(sql);
//处理结果集
while(rs.next()){
int id=rs.getInt("id");
String title=rs.getString("title");
String summary=rs.getString("summary");
String content=rs.getString("content");
String author=rs.getString("author");
Timestamp time=rs.getTimestamp("createdate");
System.out.println(id+"\t"+title+"\t"+summary+"\t"+content+"\t"+author+"\t"+time);
}

} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
rs.close();
stmt.close();
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}
public static void main(String args[]){
NewsDao nd=new NewsDao();
nd.getNewsList();

}

}

报异常
java.sql.SQLException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
The Connection descriptor used by the client was:
localhost:1521:webDemo

at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:125)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:280)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:319)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:344)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:148)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:545)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at com.pb.news.dao.NewsDao.getNewsList(NewsDao.java:20)
at com.pb.news.dao.NewsDao.main(NewsDao.java:57)
Exception in thread "main" java.lang.NullPointerException
at com.pb.news.dao.NewsDao.getNewsList(NewsDao.java:44)
at com.pb.news.dao.NewsDao.main(NewsDao.java:57)

我的项目名 是 webDemo
然后数据库是正常启动的
Oracle驱动也是正常加载的
怀疑是获得连接的地方出错了。。麻烦帮我看看
...全文
226 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
rj0917 2012-08-17
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 的回复:]
引用 14 楼 的回复:

引用 12 楼 的回复:
我登陆Oracle用的 system 登陆的
我在Java中是用的身份是 scott
因为我在Java中用 system的时候 暴异常 说 账号锁定


说明你这张表是创建在 system 这个用户下的,那么:

SELECT * FROM system.NEWS_DETAIL;

现在问题 已经解决了。。。
但是有个……
[/Quote]
the account is locked, 出现这种原因,是因为用户被锁定了,一般出现这种情况,有几个原因:

一、是因为程序连接数据库的数量大于配置的连接数;

二、在线程中一直用错误的秘码去连接数据库,导致Oracle数据库认为是有人在破解其密码,超过一定连接次数,就会把该用户上锁。

解决办法:

1.以超级管理员身份登陆Oracle,再执行解锁语句:alter user username account unlock; (注:username为被上锁的用户名)

2.把连接池的连接数设置大一些。

3.以其他用户名登录Oracle-->选择myjob-->查看users-->找到被锁定的用户名,右击点击“编辑”-->把“帐户被锁住”的勾去掉-->点击“应用”再点击“关闭”-->重新登录-->OK.
corner1988 2012-08-17
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]

引用 12 楼 的回复:
我登陆Oracle用的 system 登陆的
我在Java中是用的身份是 scott
因为我在Java中用 system的时候 暴异常 说 账号锁定


说明你这张表是创建在 system 这个用户下的,那么:

SELECT * FROM system.NEWS_DETAIL;
[/Quote]
现在问题 已经解决了。。。
但是有个疑问 为什么 当我在Java中用system登陆的时候
java.sql.SQLException: ORA-28000: the account is locked
MiceRice 2012-08-17
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]
我登陆Oracle用的 system 登陆的
我在Java中是用的身份是 scott
因为我在Java中用 system的时候 暴异常 说 账号锁定
[/Quote]

说明你这张表是创建在 system 这个用户下的,那么:

SELECT * FROM system.NEWS_DETAIL;
王者_来归 2012-08-17
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]
另外还需要检查身份(Schema)问题,你在PL/SQL中是使用什么用户登录的?

你在Java中用的身份是:system,这个身份是系统用户,可能并不是你所创建表所在的Schema


那么可能要修改为:SELECT * FROM 身份.NEWS_DETAIL;
或者你把数据库连接所使用的用户,改为你所创建表的Schema。
[/Quote]
是的,如果你在pl/sql中使用的用户与程序使用的用户不一样,同样会报表不存在,如果数据库不存在什么太大的安全问题,建议使用管理员用户。
corner1988 2012-08-17
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]

另外还需要检查身份(Schema)问题,你在PL/SQL中是使用什么用户登录的?

你在Java中用的身份是:system,这个身份是系统用户,可能并不是你所创建表所在的Schema


那么可能要修改为:SELECT * FROM 身份.NEWS_DETAIL;
或者你把数据库连接所使用的用户,改为你所创建表的Schema。
[/Quote]
我登陆Oracle用的 system 登陆的
我在Java中是用的身份是 scott
因为我在Java中用 system的时候 暴异常 说 账号锁定
MiceRice 2012-08-17
  • 打赏
  • 举报
回复
另外还需要检查身份(Schema)问题,你在PL/SQL中是使用什么用户登录的?

你在Java中用的身份是:system,这个身份是系统用户,可能并不是你所创建表所在的Schema


那么可能要修改为:SELECT * FROM 身份.NEWS_DETAIL;
或者你把数据库连接所使用的用户,改为你所创建表的Schema。
corner1988 2012-08-17
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

数据库监听服务没有开启?!?
[/Quote]

OracleOraDb10g_home2TNSListener 启动的
OracleServiceSHOP 启动的


reate table NEWS_DETAIL(
id number(10,0) NOT NULL PRIMARY KEY, --id
categoryId number(10,0) NOT NULL, --新闻类别id
title varchar2(100) NOT NULL,--新闻标题
summary varchar2(255) NULL, --新闻摘要
content CLOB NULL, --新闻内容
picpath varchar2(255) NULL, --新闻图片路径
author varchar2(50) NULL,--发表者
createdate date NULL, --创建时间
modifydate date NULL, --修改时间
Foreign key(categoryId) references NEWS_CATEGORY(id)
);

表是存在的 数据也插入了 。。。在PL/SQL中可以正常查询
查询语句 : 没区别 SELECT * FROM NEWS_DETAIL;
maobing8090 2012-08-17
  • 打赏
  • 举报
回复
楼上正解!
五哥 2012-08-17
  • 打赏
  • 举报
回复
java.sql.SQLException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
The Connection descriptor used by the client was:
localhost:1521:webDemo

应该是oracle的监听器没开


java.sql.SQLException: ORA-00942: table or view does not exist


应该是你的 news_detials这个表在库中没有

ylovep 2012-08-17
  • 打赏
  • 举报
回复
数据库监听服务没有开启?!?
corner1988 2012-08-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

java.sql.SQLException: ORA-00942: table or view does not exist

String sql="select*from news_detail";

这里面空格为啥都没了?另外检查下表名是否正确?
[/Quote]
String sql="SELECT * FROM news_detail";

我的SQL语句在Pl/sql 里面是可以正常查询的啊
MiceRice 2012-08-17
  • 打赏
  • 举报
回复
java.sql.SQLException: ORA-00942: table or view does not exist

String sql="select*from news_detail";

这里面空格为啥都没了?另外检查下表名是否正确?
corner1988 2012-08-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:webDemo","system","manager");
这一句里的 webDemo应该是你的oracle数据库的 全局数据库名 SID。 而不是你的项目名。
全局数据库名是lz自己装oracle时填写的。lz看看吧。
[/Quote]
我改过之后报异常

java.sql.SQLException: ORA-00942: table or view does not exist

at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:125)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:305)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:272)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:623)
at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:112)
at oracle.jdbc.driver.T4CStatement.execute_for_describe(T4CStatement.java:351)
at oracle.jdbc.driver.OracleStatement.execute_maybe_describe(OracleStatement.java:896)
at oracle.jdbc.driver.T4CStatement.execute_maybe_describe(T4CStatement.java:383)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:986)
at oracle.jdbc.driver.OracleStatement.executeQuery(OracleStatement.java:1125)
at com.pb.news.dao.NewsDao.getNewsList(NewsDao.java:24)
at com.pb.news.dao.NewsDao.main(NewsDao.java:57)
Exception in thread "main" java.lang.NullPointerException
at com.pb.news.dao.NewsDao.getNewsList(NewsDao.java:44)
at com.pb.news.dao.NewsDao.main(NewsDao.java:57)

我在 PL/sql 可以正常查询 有正常结果
scbb 2012-08-17
  • 打赏
  • 举报
回复
jsut_yi 2012-08-17
  • 打赏
  • 举报
回复
con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:webDemo","system","manager");
这一句里的 webDemo应该是你的oracle数据库的 全局数据库名 SID。 而不是你的项目名。
全局数据库名是lz自己装oracle时填写的。lz看看吧。

67,512

社区成员

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

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