2016-04-28 23 views
1

当我试图使用下面的代码我是越来越异常java.sql.SQLSyntaxErrorException:ORA-00942:表或视图不存在

ResultSet res=stmt.executeQuery("select * from food"); 

读取来自Oracle数据库的数据,但这张表是实际存在在我的数据库中,当我在命令提示符中直接使用这个命令时,它的工作正常。而且对于数据库中的表格之间的一个表格,这个代码工作正常,但对于其他表格名称,它不能正常工作。所以有人请解释为什么这是发生。

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

    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:440) 
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396) 
    at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:837) 
    at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:445) 
    at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:191) 
    at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:523) 
    at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:193) 
    at oracle.jdbc.driver.T4CStatement.executeForDescribe(T4CStatement.java:852) 
    at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1153) 
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1275) 
    at oracle.jdbc.driver.OracleStatement.executeQuery(OracleStatement.java:1477) 
    at oracle.jdbc.driver.OracleStatementWrapper.executeQuery(OracleStatementWrapper.java:392) 
    at connecttooracle.ConnectOracle.main(ConnectOracle.java:67) 

我正在从Toad访问食物表中的数据。那为什么我在java中得到这个错误?

我完整的代码:

public class ConnectOracle { 

public static void main(String[] args) { 

    String driver = "oracle.jdbc.driver.OracleDriver"; // 

    String serverName = "10.11.201.84"; 
    String portNumber = "1521"; 
    String db = "XE"; 
    String url = "jdbc:oracle:thin:@" + serverName + ":" + portNumber + ":" 
    + db; // connectOracle is the data 
    // source name 
    String user = "ORAP"; // username of oracle database 
    String pwd = "ORAP"; // password of oracle database 
    Connection con = null; 
    ServerSocket serverSocket = null; 
    Socket socket = null; 
    DataInputStream dataInputStream = null; 
    DataOutputStream dataOutputStream = null; 

    try { 
    Class.forName(driver);// for loading the jdbc driver 

    System.out.println("JDBC Driver loaded"); 

    con = DriverManager.getConnection(url, user, pwd);// for 
       // establishing 
    // connection 
    // with database 
    Statement stmt = (Statement) con.createStatement(); 

    serverSocket = new ServerSocket(8888); 
    System.out.println("Listening :8888"); 

    while (true) { 
    try { 

    socket = serverSocket.accept(); 
    System.out.println("Connection Created"); 
    dataInputStream = new DataInputStream(
     socket.getInputStream()); 
    dataOutputStream = new DataOutputStream(
     socket.getOutputStream()); 
    System.out.println("ip: " + socket.getInetAddress()); 
    // System.out.println("message: " + 
    // dataInputStream.readUTF()); 

    ResultSet res=stmt.executeQuery("select * from food"); 
    while(res.next()){ 
     System.out.println(res.getString(1)); 
    } 

    } catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } 

    if (dataInputStream != null) { 
    try { 
     dataInputStream.close(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    } 

    if (dataOutputStream != null) { 
    try { 
     dataOutputStream.close(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    } 
    } 
    } catch (Exception e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } 
} 
} 
+0

如果表是存在的在你的数据库上,然后在你的应用程序中检查你的数据库连接 –

+0

尝试在你的表'食物'之前添加你的数据库模式。 – Blank

+0

如何添加数据库模式? –

回答

5

如果你的表是模式的下位于:

select * from A.food 

编辑

如果您可以通过蟾蜍与用户ORAP登录并执行相同的查询(select * from food),那么你肯定有ORAP模式中的表。我没有理由“从ORAP.food选择*”失败。

+0

我试过了。 ResultSet res = stmt.executeQuery(“select * from XE.food”);但是我得到了同样的错误。 –

+0

XE是您的数据库名称。使用“ORAP.food” –

+0

同样的错误是由我得到 –

-1

阅读this。有所有原因和解决方案。

0

由于这个原因,你发现这个例外。 您试图执行引用表或视图的SQL语句,该表或视图不存在,您无权访问或属于另一个模式,并且未按模式名称引用该表。

+0

我已经检查了所有这些,但没有发生任何事情。 –

+0

您能否详细说明您的问题,以便我可以给出解决方案。 – user3864613

+0

在查询中使用您的scemaName.tableName – user3864613

0

按照使用相同的用户名和密码,这些步骤

  • 首先登录癞蛤蟆。如果提示错误,然后你的凭据是错误的
  • 如果你能成功登录,然后尝试此查询:SELECT table_name, owner, tablespace_name FROM all_tables;
  • 你可以看到你的表名是存在还是不使用上面的查询
相关问题