oracle数据库联接成功,但不能执行SQL语句

hh81658388 2009-10-11 12:07:47
本人刚学习ORACLE,请高手指点一下,万分感谢!!!
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DBUtil {
//oracle联接
private static String user="manager";
private static String password="admin";
private static String DRIVER="oracle.jdbc.driver.OracleDriver";
private static String url="jdbc:oracl:thin:@127.0.0.1:1521:bookshop";
private Connection con=null;
private PreparedStatement ps=null;
private ResultSet rs=null;

public DBUtil(){
con=DBUtil.getConnection();
}

/**
* 取得数据库联接对象
* @return 数据库联接对象
*/
public static Connection getConnection(){
Connection conn=null;

try {
Class.forName(DRIVER);
conn=DriverManager.getConnection(url, user, password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}

/**
* 数据的更新,添加,删除
* @param sql Statement
*/
public void update(String sql){
try {
Statement st=this.con.createStatement();
st.executeUpdate(sql);
st.close();
} catch (SQLException e) {
e.printStackTrace();
}
}

/**
* 关闭数据库联接,会话,结果集
*/
public void closeAll(){
if(this.rs!=null){
try {
this.rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(this.ps!=null){
try {
this.ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(this.con!=null){
try {
this.con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

/**
* 测试主类数据库的连接
* @param args
*/
public static void main(String[] args) {
System.out.println(DBUtil.getConnection().toString());
DBUtil db=new DBUtil();
//以下SQL语句在isplplus下执行通过
String sl="insert into book values (1005,'oo','hh',90)";
db.update(sl);
db.closeAll();
}
}


报如下如错误:

oracle.jdbc.driver.T4CConnection@1bac748
java.sql.SQLException: ORA-00942: 表或视图不存在

at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:743)
at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:207)
at oracle.jdbc.driver.T4CStatement.executeForRows(T4CStatement.java:946)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1160)
at oracle.jdbc.driver.OracleStatement.executeUpdateInternal(OracleStatement.java:1606)
at oracle.jdbc.driver.OracleStatement.executeUpdate(OracleStatement.java:1571)
at lovo.xml.DBUtil.update(DBUtil.java:73)
at lovo.xml.DBUtil.main(DBUtil.java:133)

不知是什么原因
...全文
302 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
shiyiwan 2009-10-11
  • 打赏
  • 举报
回复
比如a用户的表book,b用户想要操作

那么,a先
grant all on book to b;

然后b登录后,
insert into a.book values(..);
hh81658388 2009-10-11
  • 打赏
  • 举报
回复
没有建立表空间哦
hh81658388 2009-10-11
  • 打赏
  • 举报
回复
在sqlplus命令方式下,执行,select * from user_objects 后显示:未选定行。manager身份进入
在sqlplus命令方式下,执行,select * from user_objects 后显示:很多信息。system身份进入
hh81658388 2009-10-11
  • 打赏
  • 举报
回复
我在isqlplus里用manager联到bookshop数据库,能操作book表,

但是在sqlplus命令方式下就报表或视图不存在的错误,我用system用户进入后,grant insert,select,updatr on book to manager后,再用manager进入还是不行,报表不存在的错误,。
大哥,我晕死了。用system在命令方式是对的
shiyiwan 2009-10-11
  • 打赏
  • 举报
回复
啊,#3已经有结果了,那么#4可以忽略了。

可能和连接身份验证有关系。java代码登陆以普通用户的形式

如果manager需要有插入数据的权限,给他赋予dba权限不是很合适,可以grant insert on book to manager这种形式。
shiyiwan 2009-10-11
  • 打赏
  • 举报
回复
用mysql测试了一下,代码没有问题。

那么可能的原因应该是数据库表的位置了,连接也正常,
1. book这个表是建在哪个schema下面的,在哪个schema下面就在表名前加schema名字试试。
2. 测试一下查询语句,比如select * from user_objects,看看返回结果是什么
hh81658388 2009-10-11
  • 打赏
  • 举报
回复
1楼的大哥,我试了,你说的换另一个用户(system)就对了,但是我建的那个用户manager进入isqlplus能添加数据啊,我给这个用户赋了DBA的权限了的,是为什么啊?
hh81658388 2009-10-11
  • 打赏
  • 举报
回复
楼上兄弟,我进入isqlplus 用户名是:manager 数据库是bookshop
能够执行insert into book values (1005,'oo','hh',90);

String sl="insert into manager.book values (1005,'oo','hh',90)";
这样也不行,相同的错误哟
shiyiwan 2009-10-11
  • 打赏
  • 举报
回复
which username did you choose when login into isqlplus?
same username 'manager' or others?

or your can try to use
"insert into manager.book values (1005,'oo','hh',90)"
in your code.
hh81658388 2009-10-11
  • 打赏
  • 举报
回复
谢谢楼上的大哥,明白了,

17,378

社区成员

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

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