Можем да извлечем най-близкото съвпадение структура от набора от резултати и конструирайте таблица.
Но това не може да бъде точното копие по отношение на името на таблицата, ключовете, типа на машината, дали полето може да се нула или не и т.н. .
Следващият кодов фрагмент ви помага да продължите по начин, за да получите подходящ резултат.
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 от 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 , и т.н..Но, моля, вижте тази публикация за алтернатива на използването на NVARCHAR в MySQL .
Преди да опитате такава динамична миграция на данни, клиентските приложения трябва да носят отговорност да знаят еквивалентните типове данни и да ги използват съответно.
Също така вижте Типове данни и диапазони за Microsoft Access , MySQL и SQL Server за повече информация.