本人刚学习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)不知是什么原因

解决方案 »

  1.   

    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.
      

  2.   

    楼上兄弟,我进入isqlplus 用户名是:manager 数据库是bookshop
    能够执行insert into book values (1005,'oo','hh',90); String sl="insert into manager.book values (1005,'oo','hh',90)";
    这样也不行,相同的错误哟
      

  3.   

    1楼的大哥,我试了,你说的换另一个用户(system)就对了,但是我建的那个用户manager进入isqlplus能添加数据啊,我给这个用户赋了DBA的权限了的,是为什么啊?
      

  4.   

    用mysql测试了一下,代码没有问题。那么可能的原因应该是数据库表的位置了,连接也正常,
    1. book这个表是建在哪个schema下面的,在哪个schema下面就在表名前加schema名字试试。
    2. 测试一下查询语句,比如select * from user_objects,看看返回结果是什么
      

  5.   

    啊,#3已经有结果了,那么#4可以忽略了。可能和连接身份验证有关系。java代码登陆以普通用户的形式如果manager需要有插入数据的权限,给他赋予dba权限不是很合适,可以grant insert on book to manager这种形式。
      

  6.   

    我在isqlplus里用manager联到bookshop数据库,能操作book表,但是在sqlplus命令方式下就报表或视图不存在的错误,我用system用户进入后,grant insert,select,updatr on book to manager后,再用manager进入还是不行,报表不存在的错误,。
    大哥,我晕死了。用system在命令方式是对的
      

  7.   

    在sqlplus命令方式下,执行,select * from user_objects 后显示:未选定行。manager身份进入
    在sqlplus命令方式下,执行,select * from user_objects 后显示:很多信息。system身份进入
      

  8.   

    比如a用户的表book,b用户想要操作那么,a先
    grant all on book to b;然后b登录后,
    insert into a.book values(..);