Vi kan udtrække den nærmeste match struktur fra resultatsættet og konstruer en tabel.
Men dette kan ikke være den nøjagtige replika, hvad angår tabelnavn, nøgler, motortype, om et felt er nullbart eller ej, osv. .
Følgende kodestykke hjælper dig med at komme videre på en måde, så du får et passende resultat.
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() );
Udføres med ovenstående del af koden, udskrevet følgende streng:
Create table visitors ( ip VARCHAR( 6 ), bro VARCHAR( 6 ) )
Lad mig håbe, at dette hjælper dig videre.
Lignende eksempel kan findes på: Opret en tabel ved hjælp af ResultSet ???
OPDATERING 1 :
Du kan ikke gøre noget, når du kun er afhængig af et resultatsæt på klientsiden.
Det bør altid være hovedvalgsforespørgslen der vælger korrekte data fra en sammensat datatype som geometry
, address
osv.
Eksempel :select addess.city, address.zipcode, x( geometry_column ), y( geometry_column )
For at give et eksempel på geometry
datatype :
MySQL har definitioner for sin Spatial support
. Men jeg er ikke sikker på, hvor langt de er gode sammenlignet med SQL Serverens implementering af Spatial Data
.
geometry
er en sammensat datatype og kan derfor ikke hentes ved direkte forespørgsel.
Du kræver afhængig(e) funktion(er), der analyserer data fra sådanne datakolonner og returnerer i læsbar , identificerbar dataformater.
Eksempel :create table geom ( g geometry );
Konvertering af ResultSet fra select g from geom
Brug af JAVA til en oprettelse af tabelsætningen ville resultere med en unknwon
datatype for kolonne g
.
Create table geom ( g UNKNOWN )
Brug af x(g)
, y(g)
koordinere funktioner på kolonne g
returnerer korrekte og acceptable datatyper.
Forespørgsel select x(g), y(g) from geom
vil blive konverteret til
Create table ( x(g) DOUBLE( 23, 31 ), y(g) DOUBLE( 23, 31 ) )
OPDATERING 2 :
Et resultatsæt kan genereres i kombination af flere tabeller ved hjælp af relationer. Der er også en chance for, at resultatsætfelterne er sammensat af udtryk og deres aliaser. Derfor afgøres datatyperne for de resulterende kolonnefelter eller aliaser dynamiske. Metadata er ikke bekendt med nøjagtige navne på tabeller, kolonnenavne og deres oprindelige/overordnede datatyper fra forespørgslen.
Så det er ikke muligt at få
- det enkelte navn på en tabel, og brug det.
- den overordnede kolonnes datatype og brug den.
Bemærk :Dette gælder også for alle andre krydsdatabasespecifikke datatyper, såsom NVARCHAR , osv..Men se venligst dette opslag for et alternativ til NVARCHAR-brug i MySQL .
Før du prøver en sådan dynamisk datamigrering, bør det være klientapplikationernes ansvar at kende de tilsvarende datatyper og bruge dem i overensstemmelse hermed.
Se også Datatyper og -områder for Microsoft Access , MySQL og SQL Server for mere information.