データベース対応のJSPを既存のTomcat 5.5アプリケーションに追加しようとしています(GeoServer 2.0.0、それが役立つ場合)。
アプリ自体はPostgresとうまく通信するので、データベースが起動し、ユーザーがアクセスできること、その他すべてのことを知っています。私がやろうとしているのは、追加したJSPのデータベースクエリです。 Tomcat datasource example の設定サンプルをほとんど使用しました。必要なtaglibは適切な場所にあります。taglibrefがあればエラーは発生しないため、これらのJARが見つかります。 postgres jdbcドライバー、postgresql-8.4.701.jdbc3.jarは$ CATALINA_HOME/common/libにあります。
JSPのトップは次のとおりです。
<%@ 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/mmas">
select current_validstart as ValidTime from runoff_forecast_valid_time
</sql:query>
<Host>
内の$ CATALINA_HOME/conf/server.xmlからの関連セクション:<Engine>
内:
<Context path="/gs2" allowLinking="true">
<Resource name="jdbc/mmas" type="javax.sql.Datasource"
auth="Container" driverClassName="org.postgresql.Driver"
maxActive="100" maxIdle="30" maxWait="10000"
username="mmas" password="very_secure_yess_precious!"
url="jdbc:postgresql//localhost:5432/mmas" />
</Context>
これらの行は、webapps/gs2/WEB-INF/web.xmlのタグの最後です。
<resource-ref>
<description>
The database resource for the MMAS PostGIS database
</description>
<res-ref-name>
jdbc/mmas
</res-ref-name>
<res-type>
javax.sql.DataSource
</res-type>
<res-auth>
Container
</res-auth>
</resource-ref>
最後に、例外:
exception
org.Apache.jasper.JasperException: Unable to get connection, DataSource invalid: "Java.sql.SQLException: No suitable driver"
[...wads of ensuing goo elided]
悪名高いJava.sql.SQLException:適切なドライバーが見つかりません
この例外には、基本的にtwoの原因があります。
JDBCドライバーがサーバー独自の_/lib
_フォルダーに配置されていることを確認する必要があります。
または、実際にサーバー管理の接続プールデータソースを使用していないが、WARでDriverManager#getConnection()
を手動で操作している場合は、WARの_/WEB-INF/lib
_にJDBCドライバーを配置する必要があります。実行する..
_Class.forName("com.example.jdbc.Driver");
_
..コード内でbefore最初のDriverManager#getConnection()
呼び出しの前に、必ずnotスローされるClassNotFoundException
を飲み込み/無視し、例外が発生しなかったかのようにコードフローを続行します。 Tomcatの接続プール用のJDBCドライバーはどこに配置する必要がありますか も参照してください。
JDBC URLがJDBCドライバーのドキュメントに準拠していることを確認する必要があり、通常は大文字と小文字が区別されることに注意してください。 JDBC URLが Driver#acceptsURL()
に対してtrue
を返さない場合、ロードされたドライバーのいずれかに対しても、まさにこの例外が発生します。
PostgreSQLの場合、文書化されています here 。
JDBCでは、データベースはURL(Uniform Resource Locator)で表されます。 PostgreSQL™では、これは次のいずれかの形式を取ります。
- _
jdbc:postgresql:database
_- _
jdbc:postgresql://Host/database
_- _
jdbc:postgresql://Host:port/database
_
MySQLの場合、文書化されています here 。
MySQLサーバーに接続するためのJDBC URLの一般的な形式は次のとおりです。角括弧内の項目(_
[ ]
_)はオプションです。_
jdbc:mysql://[Host1][:port1][,[Host2][:port2]]...[/[database]] » [?propertyName1=propertyValue1[&propertyName2=propertyValue2]...]
_
Oracleの場合、文書化されています here 。
URL構文は2つあり、古い構文はSIDでのみ機能し、新しい構文はOracleサービス名で機能します。
古い構文_
jdbc:Oracle:thin:@[Host][:PORT]:SID
_新しい構文_
jdbc:Oracle:thin:@//[Host][:PORT]/SERVICE
_
url="jdbc:postgresql//localhost:5432/mmas"
そのURLは間違っているようですが、次のものが必要ですか?
url="jdbc:postgresql://localhost:5432/mmas"
同様の問題に直面しました。コンテキスト内の私のプロジェクトはダイナミックWebプロジェクト(Java 8 + Tomcat 8)であり、エラーはPostgreSQLドライバーの例外用です:適切なドライバーが見つかりません
Class.forName("org.postgresql.Driver")
メソッドを呼び出す前にgetConnection()
を追加することで解決しました
これが私のサンプルコードです。
try {
Connection conn = null;
Class.forName("org.postgresql.Driver");
conn = DriverManager.getConnection("jdbc:postgresql://" + Host + ":" + port + "/?preferQueryMode="
+ sql_auth,sql_user , sql_password);
} catch (Exception e) {
System.out.println("Failed to create JDBC db connection " + e.toString() + e.getMessage());
}
PostgreSQL JDBC Driverをプロジェクトに追加するのを忘れていました Mvnrepository 。
Gradle:
// http://mvnrepository.com/artifact/postgresql/postgresql
compile group: 'postgresql', name: 'postgresql', version: '9.0-801.jdbc4'
Maven:
<dependency>
<groupId>postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.0-801.jdbc4</version>
</dependency>
ダウンロード the[〜#〜] jar [〜#〜]を手動でプロジェクトにインポートすることもできます。
Tomcatでこの問題を解消するために、次のヒントが役立ちました-
最初にClass.forName( "org.postgresql.Driver")を実行して、必ずドライバーをロードしてください。あなたのコードで。
これはポストからです- https://www.postgresql.org/message-id/[email protected]
Jdbcコードはスタンドアロンプログラムとしては正常に機能しましたが、Tomcatでは「適切なドライバーが見つかりません」というエラーが発生しました
これは、Windowsが安全ではないと判断したダウンロードをブロックするときにも発生する可能性があることに注意してください。これは、jarファイル(ojdbc7.jarなど)を右クリックし、下部の「ブロック解除」ボックスをチェックすることで対処できます。
Windows JARファイルのプロパティダイアログ:
結果として起こり得る非常に愚かな間違いは、JDBC URL接続の開始時にスペースを追加することです。
私が意味するのは:-
次のようなjdbcのURLが与えられた場合、あなたは間違いを抱えていると仮定します。
String jdbcUrl=" jdbc:mysql://localhost:3306/web_customer_tracker?useSSL=false&serverTimeZone=UTC";
(URLの凝視にスペースがあることに注意してください、これはエラーになります)
正しい方法は次のとおりです。
String jdbcUrl="jdbc:mysql://localhost:3306/web_customer_tracker?useSSL=false&serverTimeZone=UTC";
(注視点にスペースがないことに注意してください。URLの末尾にスペースを与えることができますが、そうしないことは安全です)
私は外部で動作するスプリングデータを使用するmysqlデータソースで同じ問題を抱えていましたが、Tomcatにデプロイしたときにこのエラーが発生しました。
ドライバjar mysql-connector-Java-8.0.16.jarをjres lib/extフォルダに追加すると、エラーはなくなりました
ただし、他のアプリケーションとの干渉を恐れて、実稼働環境でこれを実行したくありませんでした。ドライバークラスを明示的に定義すると、この問題は解決しました
spring.datasource.driver-class-name: com.mysql.cj.jdbc.Driver
私はjrubyを使用していましたが、私の場合はconfig/initializersの下に作成しました
postgres_driver.rb
$CLASSPATH << '~/.rbenv/versions/jruby-1.7.17/lib/Ruby/gems/shared/gems/jdbc-postgres-9.4.1200/lib/postgresql-9.4-1200.jdbc4.jar'
またはあなたのドライバーがどこにいても、それだけです!
STSでSpring Bootアプリケーションを開発するときにこの問題がありましたが、最終的にはパッケージ化されたwarをWebSphere(v.9)にデプロイしました。以前の回答に基づいて、私の状況は独特でした。 ojdbc8.jarはWEB-INF/libフォルダーにParent Last class loading setが含まれていましたが、常に適切なドライバーが見つからなかったと表示されます。
私の究極の問題は、オンラインチュートリアル/例に従っているだけなので、誤ったDataSourceクラスを使用していたことです。ここで彼自身の質問に対するデビッド・ダイのコメントのおかげでヒントが見つかりました: Spring JDBC JDBCドライバークラスをロードできませんでした[Oracle.jdbc.driver.OracleDriver]
また、後でOracle固有のドライバーを使用したSpring Guruの例が見つかりました: https://springframework.guru/configuring-spring-boot-for-Oracle/
一般的な例に基づいてorg.springframework.jdbc.datasource.DriverManagerDataSource
を使用してエラーをスローする例。
@Config
@EnableTransactionManagement
public class appDataConfig {
\* Other Bean Defs *\
@Bean
public DataSource dataSource() {
// configure and return the necessary JDBC DataSource
DriverManagerDataSource dataSource = new DriverManagerDataSource("jdbc:Oracle:thin:@//Host:PORT/SID", "user", "password");
dataSource.setSchema("MY_SCHEMA");
return dataSource;
}
}
Oracle.jdbc.pool.OracleDataSource
を使用した修正された例:
@Config
@EnableTransactionManagement
public class appDataConfig {
/* Other Bean Defs */
@Bean
public DataSource dataSource() {
// configure and return the necessary JDBC DataSource
OracleDataSource datasource = null;
try {
datasource = new OracleDataSource();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
datasource.setURL("jdbc:Oracle:thin:@//Host:PORT/SID");
datasource.setUser("user");
datasource.setPassword("password");
return datasource;
}
}
Java
環境変数がドライバーのJARファイルを指している状態でCLASSPATH
を実行します。
CLASSPATH='.:drivers/mssql-jdbc-6.2.1.jre8.jar' Java ConnectURL
ここで、drivers/mssql-jdbc-6.2.1.jre8.jar
はドライバーファイルへのパスです(例: SQL Server用のJDBC )。
ConnectURL
は、そのドライバーのサンプルアプリ(samples/connections/ConnectURL.Java
)であり、javac ConnectURL.Java
を介してコンパイルされます。
MySQL JDBCコネクターを追加するだけでなく、context.xml(Tomcat webappsフォルダーに解凍されていない場合)がDB接続定義とともにTomcatのconfディレクトリーに含まれていることを確認してください。
この問題は、XMLファイルをsrc/main/resources
間違って、私はそれを削除し、すべて正常に戻った。