Můžeme extrahovat nejbližší shodu strukturu z výsledkové sady a vytvořte tabulku.
Ale toto nemůže být přesná replika, pokud jde o název tabulky, klíče, typ motoru, zda je pole s možnou hodnotou Null nebo ne atd. .
Následující fragment kódu vám pomůže postupovat tak, abyste získali vhodný výsledek.
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() );
Probíhá s výše uvedenou částí kódu, vytiskne se následující řetězec:
Create table visitors ( ip VARCHAR( 6 ), bro VARCHAR( 6 ) )
Doufám, že vám to pomůže v dalším postupu.
Podobný příklad lze nalézt na: Vytvořte tabulku pomocí ResultSet ???
AKTUALIZACE 1 :
Pokud jste závislí pouze na sadě výsledků v klientské aplikaci, nemůžete nic dělat.
Vždy by to měl být hlavní výběrový dotaz který vybere správná data ze složeného datového typu, jako je geometry
, address
atd.
Příklad :select addess.city, address.zipcode, x( geometry_column ), y( geometry_column )
Uvedeme příklad geometry
datový typ :
MySQL má definice pro svůj Prostorová podpora
. Nejsem si ale jistý, jak dalece jsou dobré ve srovnání s SQL Serverová implementace prostorových dat
.
geometry
je složený datový typ, a proto jej nelze načíst přímým dotazem.
Požadujete závislé funkce, které analyzují data z takových datových sloupců a vrátí je v čitelném , identifikovatelné datové formáty.
Příklad :create table geom ( g geometry );
Převod sady výsledků z select g from geom
použití JAVA k vytvoření tabulky by mělo za následek unknwon
datový typ pro sloupec g
.
Create table geom ( g UNKNOWN )
Pomocí x(g)
, y(g)
souřadnicové funkce ve sloupci g
vrátí správné a přijatelné datové typy.
Dotaz select x(g), y(g) from geom
bude převeden na
Create table ( x(g) DOUBLE( 23, 31 ), y(g) DOUBLE( 23, 31 ) )
AKTUALIZACE 2 :
Výsledková sada může být generována v kombinaci více tabulek pomocí relací. Existuje také šance, že pole resultset se skládají z výrazů a jejich aliasů. Datové typy výsledných sloupcových polí nebo aliasů se tedy rozhodují jako dynamické. Metadata nezná přesné názvy tabulek, názvy sloupců a jejich původní/nadřazené datové typy z dotazu.
Takže není možné získat
- jediný název tabulky a jeho použití.
- datový typ nadřazeného sloupce a jeho použití.
Poznámka :Toto platí také pro všechny ostatní datové typy specifické pro různé databáze, jako je NVARCHAR , atd..Ale podívejte se prosím na tento příspěvek, kde najdete alternativu k použití NVARCHAR v MySQL .
Než se pokusíte o takovou dynamickou migraci dat, měla by být odpovědností klientských aplikací znát ekvivalentní datové typy a odpovídajícím způsobem je používat.
Viz také Datové typy a rozsahy pro Microsoft Access , MySQL a SQL Server pro více informací.