sql >> Database teknologi >  >> RDS >> Mysql

Sådan opretter du tabel baseret på JDBC-resultatsæt

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.

det er ikke muligt at få

  1. det enkelte navn på en tabel, og brug det.
  2. 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.



  1. Flet 2 arrays og summer værdierne (numeriske taster)

  2. Logger du ALLE forespørgsler på en SQL Server 2008 Express-database?

  3. Minimering af virkningen af ​​at udvide en IDENTITY-søjle – del 4

  4. Sådan rettes fejl:MySQL lukning uventet på Xampp på grund af plugin 'Aria'