我正在使用Tomcat 7.0.12并且每当我通过名为'ROOT'的webapp中的.jsp页面访问连接到postgresql数据库的JNDI数据源时都会收到此错误:
SEVERE: Servlet.service() for servlet [jsp] in context with path [] threw exception
[java.lang.RuntimeException: Cannot create JDBC driver of class '' for connect URL 'null'] with root cause
java.lang.NullPointerException
at sun.jdbc.odbc.JdbcOdbcDriver.getProtocol(JdbcOdbcDriver.java:507)
at sun.jdbc.odbc.JdbcOdbcDriver.knownURL(JdbcOdbcDriver.java:476)
at sun.jdbc.odbc.JdbcOdbcDriver.acceptsURL(JdbcOdbcDriver.java:307)
at java.sql.DriverManager.getDriver(DriverManager.java:253)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1437)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1371)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
Run Code Online (Sandbox Code Playgroud)
postgresql JDBC驱动程序位于我的CATALINA/lib文件夹中.
这是我的META-INF/context.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource name="jdbc/webdbro" auth="Container" type="javax.sql.DataSource"
driverClassName="org.postgresql.Driver" url="jdbc:postgresql://127.0.0.1:5432/webdb"
username="webdbro" password="pass" maxWait="-1" removeAbandoned="true" removeAbandonedTimeout="30"/>
<Resource name="jdbc/webdbrw" auth="Container" type="javax.sql.DataSource"
driverClassName="org.postgresql.Driver" url="jdbc:postgresql://127.0.0.1:5432/webdb"
username="webdbrw" password="pass" maxWait="-1" removeAbandoned="true" removeAbandonedTimeout="30"/>
<Resource name="jdbc/shadowdbro" auth="Container" type="javax.sql.DataSource"
driverClassName="org.postgresql.Driver" url="jdbc:postgresql://127.0.0.1:5432/shadowdb"
username="shadowdbro" …Run Code Online (Sandbox Code Playgroud) 我是PostgreSQL的新手.我在PostgreSQL 9.0,db1和db2中有2个数据库,而对于db2我有只读访问权限.我想创建一个存储函数,否则可以通过JOIN或嵌套查询轻松完成,这是PostgreSQL跨数据库无法做到的.
在db1中,我有table1,我可以在其中查询一组外键,我可以用它来搜索db2中table2中的记录,如:
SELECT * from db2.table2 WHERE db2.table2.primary_key IN (
SELECT db1.table1.foreign_key FROM db1.table1 WHERE
db1.table1.primary_key="whatever");
Run Code Online (Sandbox Code Playgroud)
在Postgres中执行此操作的最佳做法是什么?我不能在db2中使用临时表,并且在db2中运行的存储函数中传入外键作为参数似乎不是一个好的解决方案.
注意:键都是VARCHAR(11)