最も近い一致を抽出できます 結果セットから構造化してテーブルを作成します。
ただし、 テーブル名、キー、エンジンタイプ、フィールドがnull許容かどうかなどの点で、これを正確に複製することはできません。 。
次のコードスニペットは、適切な結果を得る方法で進めるのに役立ちます。
String sql = "select * from visitors";
ResultSet rs = stmt.executeQuery( sql );
ResultSetMetaData rsmd = rs.getMetaData();
int columnCount = rsmd.getColumnCount();
String tableName = null;
StringBuilder sb = new StringBuilder( 1024 );
if ( columnCount > 0 ) {
sb.append( "Create table " ).append( rsmd.getTableName( 1 ) ).append( " ( " );
}
for ( int i = 1; i <= columnCount; i ++ ) {
if ( i > 1 ) sb.append( ", " );
String columnName = rsmd.getColumnLabel( i );
String columnType = rsmd.getColumnTypeName( i );
sb.append( columnName ).append( " " ).append( columnType );
int precision = rsmd.getPrecision( i );
if ( precision != 0 ) {
sb.append( "( " ).append( precision ).append( " )" );
}
} // for columns
sb.append( " ) " );
System.out.println( sb.toString() );
コードの上記の部分で実行し、次の文字列を出力します:
Create table visitors ( ip VARCHAR( 6 ), bro VARCHAR( 6 ) )
これがあなたがさらに進むのに役立つことを願っています。
同様の例は、次の場所にあります。 ResultSetを使用してテーブルを作成します???
アップデート1 :
クライアント側のアプリケーションで結果セットのみに依存している場合は、何もできません。
常にメインの選択クエリである必要があります。 geometry
などの複合データ型から適切なデータを選択します 、address
、など。
例 :select addess.city, address.zipcode, x( geometry_column ), y( geometry_column )
geometry
の例を示すには データ型 :
MySQLには、の定義があります。 空間サポート
。しかし、 SQLと比較してどれだけ優れているかはわかりません。サーバーによる空間データの実装
。
geometry
は複合データ型であるため、直接クエリでは取得できません。
このようなデータ列のデータを解析し、読み取り可能で返す依存関数が必要です。 、識別可能 データ形式。
例 :create table geom ( g geometry );
ResultSet from select g from geom
を変換する JAVAを使用してテーブルステートメントを作成すると、unknwon
になります。 列g
のデータ型 。
Create table geom ( g UNKNOWN )
x(g)
を使用する 、y(g)
列g
の座標関数 適切で許容可能なデータ型を返します。
クエリselect x(g), y(g) from geom
Create table ( x(g) DOUBLE( 23, 31 ), y(g) DOUBLE( 23, 31 ) )
アップデート2 :
結果セットは、リレーションを使用して複数のテーブルの組み合わせで生成される場合があります。結果セットフィールドが式とそのエイリアスで構成されている可能性もあります。したがって、結果の列フィールドまたはエイリアスのデータ型は動的に決定されます。メタデータは、テーブルの正確な名前、列名、およびクエリからの元の/親のデータ型を認識しません。
したがって、取得することはできません
- テーブルの単一の名前とそれを使用します。
- 親列のデータ型とそれを使用します。
注 :これは、 NVARCHAR など、他のすべてのクロスデータベース固有のデータ型にも適用できます。 など。ただし、MySQLでのNVARCHARの使用に代わる方法については、この投稿を参照してください 。
このような動的なデータ移行を試みる前に、同等のデータ型を知り、それに応じてそれらを使用するのはクライアントアプリケーションの責任である必要があります。
また、 MicrosoftAccessのデータ型と範囲も参照してください。 、MySQLおよびSQL Server 詳細については。