20

Java プログラムで MySQL データベースに接続していますが、同じ接続で現在のデータベースを別のデータベースに変更するにはどうすればよいですか?

次のように MySQL に接続します。

DriverManager.getConnection("jdbc:mysql://"+server+"/",log,pass);

いくつかの操作の後、同じ接続で別の mysql データベースに接続したいと考えています。どうやってやるの?

私は使用しようとしました:

Statement stat= con.createStatement();
ResultSet r=stat.executeQuery("use mysql"); 

ただし、使用するデータベースは変わりません。

4

2 に答える 2

36

MySQL のドキュメントで説明されているように、Connection.setCatalog()別のデータベースに切り替えるために使用する必要があります。また、 a to switch を実行してはならないことも明示しています。USE <databasename>

この警告の理由は、JDBC がデータベースへの一般的なインターフェイスであり、そのためcatalogs(またはdatabasesMySQL のように) 切り替えを含む最も一般的なタスクのメソッドを提供するためです。JDBC 仕様/javadoc では、データベース固有のコマンドよりも API を使用する必要があることも明示的に述べています (両方が利用可能な場合)。これにはいくつかの理由があります。1) データベースに依存しないコードを促進するため、2) API メソッドの 1 つに応答してドライバーが内部的に追加の処理を行う可能性があるためです。データベース固有のコマンドを使用すると、ドライバーの内部状態がデータベースの状態と一致しないため、ドライバーが誤動作する可能性があります。

JDBC API ドキュメントで指定されているように、への呼び出しsetCatalog(String)は既存のステートメントには影響しません。

呼び出しsetCatalogは、以前に作成または準備されたStatementオブジェクトには影響しません。Connectionメソッドが呼び出されたときにすぐに DBMS の準備操作が行われるかどうかは、実装によって定義さprepareStatementれます。prepareCall移植性を最大限に高めるには、を作成または準備setCatalogする前に呼び出す必要があります。Statement

于 2012-11-17T18:18:55.563 に答える
4

このように、テーブル名にデータベース名のプレフィックスを付けることができます。

例:db1 has table1db2 has table2

select * from db1.table1, db2.table2;

これにより、クロスデータベースクエリを実行できます

于 2012-11-17T18:19:07.910 に答える