今日は昼間に問題が発生しました。既知のテーブル名のテーブルがデータベースに存在するかどうかを判断する方法が要求されました。このような問題は少し悩ましいですが、まずは GG して、その後で baidu を検索しました。結果として、見つけた方法は専用のデータベースにしか適用できないか、X 排他ロックの問題を考慮していないものでした。しかし、幸いにも SUN の API を思い出しました。java.sql パッケージの DatabaseMetaData というインターフェースがあり、データベースのメタデータからテーブルが必要かどうかを簡単に取得できます。しかも、JDBC ドライバがサポートしている限り、汎用性が非常に高く、デモコードを書いてみましたので、参考にしてください。
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
// テーブル名を指定して未知のテーブルを検出する
// TableName
public class Main {
public static void main(String[] argv) throws Exception {
Connection c = null; // データベース接続
DatabaseMetaData dbm = c.getMetaData();
ResultSet rs = dbm.getTables(null, null, "tablename", null);
if (rs.next()) {
System.out.println ("存在します");
}
else {
System.out.println ("存在しません");
}
}
}
以下は getTables の関数プロトタイプ public ResultSet getTables (String catalog,String schemaPattern, String tableNamePattern,String [] types) throws SQLException に対応するパラメータの説明です: catalog は、ディレクトリ名、一般的にはデータベースの名前です。test のデータベースは test です。null の場合はすべてのテーブルを検索します。 schemaPattern は、データテーブルのパターンに一致します。null の場合はスキーマを考慮しません。 tableNamePattern は、データテーブルの名前の一致です。上記では直接テーブル名を使用していますが、1 つのテーブルにしか一致しません。ここでは正規表現を使用して複数のテーブルを一致させることができます。 types 配列は、データテーブルのタイプです。例えば、Mysql でよく使用される MyISAM や InnoDB など、複数のタイプのテーブルを検索することができます。