2012-04-02 7 views
0

は、私は次のように生のJDBC接続を作成し、それを次のように見えるのプロパティファイルでOracleのJDBCデータソース - ORA-00942:表またはビューが

public static Connection createConnection(Properties props) { 
    Connection conn = null; 
    { 
     try 
     { 
     Class.forName(props.getProperty("jdbcClass")); 
     conn = DriverManager.getConnection(
      props.getProperty("jdbcUrl"), 
      props.getProperty("username"), 
      props.getProperty("password") 
      ); 
     return conn; 
     } 
     catch (ClassNotFoundException e) 
     { 
     e.printStackTrace(); 
     } 
     catch (SQLException e) 
     { 
     e.printStackTrace(); 
     } 
    } 
    return null; 
} 

を返す小さなJavaコンソールアプリケーションを持って存在しません。 :

jdbcClass=oracle.jdbc.xa.client.OracleXADataSource 
jdbcUrl=jdbc:oracle:thin:@stiddb01:1538:DSTD 
username=***** 
password=***** 

次に、表からプレーン・セレクト*を除外し、結果を解析します。これまではすべてこの点までうまく動作します。

その後、私は、データソースのための私のcontext.xmlファイルにこの小さなJSP/JSTLのTomcatアプリケーションを作成しました:私のweb.xmlの

<Context> 
    <WatchedResource>WEB-INF/web.xml</WatchedResource> 
    <Resource 
     name="jdbc/devdb" 
     auth="Container" 
     type="javax.sql.DataSource" 
     maxActive="100" 
     maxIdle="30" 
     maxWait="10000" 
     username="******" 
     password="******" 
     driverClassName="oracle.jdbc.xa.client.OracleXADataSource" 
     url="jdbc:oracle:thin:@stiddb01:1537:DSTD"> 
    </Resource> 
</Context> 

そして、この:と

<resource-ref> 
     <description>Dev Environment</description> 
     <res-ref-name>jdbc/devdb</res-ref-name> 
     <res-type>javax.sql.DataSource</res-type> 
     <res-auth>Container</res-auth> 
</resource-ref> 

jsp/jstlコードをjspのquery.jspと呼びます。

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 

<sql:query var="rs" dataSource="jdbc/devdb"> 
    select * from "ST_FINANCE"."STF_FINANCE_REQUEST" 
</sql:query> 

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
    <title>Insert title here</title> 
</head> 
<body> 
    <h2>Results</h2> 

    <c:forEach var="row" items="${rs.rows}"> 
     ${row.FINANCE_REQUEST_NO}<br /> 


    </c:forEach> 
</body> 
</html> 

次に、このページにヒットするとこのエラーが発生します:

ORA-00942: table or view does not exist 

なぜ私のコンソールアプリケーションは完璧に動作しますが、Webアプリケーションのベールはですか? 私がそれを稼働させることができるのは、DB上にテーブルを一般公開してアクセスできるようにすることだけでしたが、私たちのプロダクションサーバーではアクセスできませんでした...

+0

あなたは公然とアクセス可能であることを意味するかどうかは不明です。あなたは詳細を教えていただけますか? –

+0

Javaコンソールアプリケーションは、jsp/jstl tomcatアプリケーションと同じデータベースにアクセスしているはずですか? 2つのアプリケーションでURLとユーザー名/パスワードが異なるように見えます。 –

答えて

0

2つのアプリケーションが異なるユーザーとして異なるデータベースにアクセスしているようです。 jsp/jstl tomcatアプリケーションによってアクセスされるデータベース内のユーザーdewet1_dに対して、ST_FINANCE.STF_FINANCE_REQUESTに対する選択権限を付与してみてください。