1

mysql データベースに 1 つのテーブルがあり、oracle データベースに別のテーブルがあります。あるテーブルからデータを取得して別のテーブルに挿入するユーティリティを作成しています。

以下は、Swing でのユーティリティ ツールの私の設計です。

選択クエリのテキストエリア。挿入クエリ用の別のテキストエリア。ロードデータというボタン。

データの読み込みをクリックすると、選択したクエリが実行され、データが取得されます。そして、挿入クエリを実行してテーブルに挿入します。

注意 : ユーティリティ ツールであるため、テーブル名は動的です。

私が今直面している問題は、挿入クエリにあります。実行時にsetString、setLong、またはectを使用できるように、テーブルのdescを動的に見つけるにはどうすればよいですか?

4

3 に答える 3

1

ResultSetMetaDataResultSetは、 (したがってテーブル)について教えてくれます。

 ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM TABLE2");
 ResultSetMetaData rsmd = rs.getMetaData();
 int numberOfColumns = rsmd.getColumnCount();
 boolean b = rsmd.isSearchable(1);
于 2013-11-06T16:30:15.383 に答える
1

以下は、ResultSetMetaDataクエリしたテーブルについてオブジェクトがどのように通知するかの例です。

import java.sql.*;

public class JDBCQuery {

    public static void main(String args[]) {
        Connection conn = null;
        Statement s = null;
        try {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            conn = DriverManager.getConnection(
                    "jdbc:odbc:Driver={SQL Server};" + 
                    "Server=.\\SQLEXPRESS;" +
                    "Trusted_Connection=yes;" +
                    "Database=myDb");
            s = conn.createStatement();
            s.executeQuery("SELECT * FROM dbo.SalesSummary WHERE 0 = 1");
            ResultSet rs = s.getResultSet();
            ResultSetMetaData rsmd = rs.getMetaData();
            for (int i = 1; i <= rsmd.getColumnCount(); i++) {
                System.out.println(String.format("-- Column %d --", i));
                System.out.println(String.format("Column name: %s", rsmd.getColumnName(i)));
                System.out.println(String.format("Database-specific type name: %s", rsmd.getColumnTypeName(i)));
                System.out.println(String.format("Column size (DisplaySize): %d", rsmd.getColumnDisplaySize(i)));
                System.out.println(String.format("java.sql.Type of column: %d", rsmd.getColumnType(i)));
                System.out.println();
            }
        } catch( Exception e ) {
            e.printStackTrace();
        } finally {
            try {
                if (s != null) {
                    s.close();
                }
                if (conn != null) {
                    conn.close();
                }
            } catch( Exception e ) {
                e.printStackTrace();
            }
        }
    }
}

出力は次のとおりです。

-- Column 1 --
Column name: Item
Database-specific type name: nvarchar
Column size (DisplaySize): 255
java.sql.Type of column: -9

-- Column 2 --
Column name: FiscalYear
Database-specific type name: int
Column size (DisplaySize): 11
java.sql.Type of column: 4

-- Column 3 --
Column name: Quarter
Database-specific type name: int
Column size (DisplaySize): 11
java.sql.Type of column: 4

-- Column 4 --
Column name: Sales
Database-specific type name: money
Column size (DisplaySize): 21
java.sql.Type of column: 3

の完全なリストは、こちらからjava.sql.Types入手できます。

于 2013-11-06T20:51:29.480 に答える
0

ここでは、いくつかのスクリプトを動的に生成するために最近書いたコードをいくつか示します。データベース メタデータをクエリして、接頭辞 vw_as を持つすべてのビューに関する情報を取得します。これを開始点として使用して、挿入するテーブルをクエリし、その定義を取得できるはずです。

DataSource ds = ...;
Connection c = ds.getConnection();
DatabaseMetaData metaData = c.getMetaData();

ResultSet rs = metaData.getTables(null, "dbo", "vw_as%", new String[] { "VIEW" });

while (rs.next()) {
    String tableName = rs.getString("TABLE_NAME"));

    ResultSet rs1 = metaData.getColumns(null, "dbo", tableName, "%");

    while (rs1.next()) {
        String columnName = rs1.getString("COLUMN_NAME"));
    }
  }
}
于 2013-11-06T16:34:57.090 に答える