sql >> Databasteknik >  >> RDS >> Mysql

Hur man skapar en tabell baserat på JDBC-resultatuppsättning

Vi kan extrahera den närmaste matchningen strukturera från resultatuppsättningen och konstruera en tabell.
Men det här kan inte vara den exakta repliken, vad gäller tabellnamn, nycklar, motortyp, om ett fält är nullbart eller inte osv. .

Följande kodavsnitt hjälper dig att gå vidare på ett sätt för att få ett lämpligt 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() );

Exekverar med ovanstående del av koden, tryckt följande sträng:

Create table visitors ( ip VARCHAR( 6 ), bro VARCHAR( 6 ) )

Låt mig hoppas att detta hjälper dig att gå vidare.

Liknande exempel finns på: Skapa en tabell med ResultSet ???

UPPDATERING 1 :

Du kan inte göra någonting när du bara är beroende av en resultatuppsättning på klientsidans applikation.
Det ska alltid vara huvudvalsfrågan som väljer rätt data från en sammansatt datatyp som geometry , address , etc.
Exempel :select addess.city, address.zipcode, x( geometry_column ), y( geometry_column )

För att ge ett exempel på geometry datatyp :
MySQL har definitioner för sin Spatialt stöd . Men jag är inte säker på hur långt de är bra jämfört med SQL Serverns implementering av Spatial Data .

geometry är en sammansatt datatyp och kan därför inte hämtas med direkt fråga.
Du behöver beroende funktion(er) som analyserar data från sådana datakolumner och returnerar i läsbar , identifierbar dataformat.
Exempel :create table geom ( g geometry );
Konverterar ResultSet från select g from geom att använda JAVA för att skapa en tabell-sats skulle resultera med en unknwon datatyp för kolumn g .

Create table geom ( g UNKNOWN )

Använder x(g) , y(g) koordinera funktioner i kolumn g returnerar korrekta och acceptabla datatyper.
Fråga select x(g), y(g) from geom kommer att konverteras till

Create table  ( x(g) DOUBLE( 23, 31 ), y(g) DOUBLE( 23, 31 ) ) 

UPPDATERING 2 :
En resultatuppsättning kan genereras i kombination av flera tabeller med hjälp av relationer. Det finns också en chans att resultatuppsättningsfälten är sammansatta av uttryck och deras alias. Därför avgörs datatyperna för de resulterande kolumnfälten eller aliasen dynamiska. Metadata känner inte till exakta namn på tabeller, kolumnnamn och deras ursprungliga/överordnade datatyper från frågan.

Så, är det inte möjligt att få

  1. det enda namnet på en tabell och använd det.
  2. den överordnade kolumns datatyp och använd den.

Obs :Detta är även tillämpligt på alla andra datatyper som är specifika för olika databaser, som NVARCHAR , etc..Men, se det här inlägget för ett alternativ till NVARCHAR-användning i MySQL .

Innan du försöker en sådan dynamisk datamigrering bör det vara klientapplikationernas ansvar att känna till motsvarande datatyper och använda dem därefter.

Se även Datatyper och intervall för Microsoft Access , MySQL och SQL Server för mer information.



  1. Vad händer egentligen med det sökandet?

  2. Mysql-fråga problem

  3. Skaffa alla föräldrar till ett barn

  4. Oracle Ta bort rader som matchar flera värden