2016-04-28 1252 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;
  • 你可以看到你的表名是存在還是不使用上面的查詢
相關問題