sql >> Database >  >> RDS >> Mysql

Een tabel maken op basis van JDBC-resultatenset

We kunnen de meest overeenkomende extract extraheren structuur uit de resultatenset en maak een tabel.
Maar dit kan niet de exacte replica zijn, in termen van tabelnaam, sleutels, enginetype, of een veld nullable is of niet, enz. .

Door het volgende codefragment te volgen, kunt u op een manier doorgaan om een ​​geschikt resultaat te krijgen.

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() );

Uitvoeren met bovenstaand deel van de code, gedrukt volgende string:

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

Ik hoop dat dit je helpt om verder te gaan.

Een vergelijkbaar voorbeeld is te vinden op: Maak een tabel met ResultSet ???

UPDATE 1 :

U kunt niets doen als u alleen afhankelijk bent van een resultatenset bij de client-side applicatie.
Het moet altijd de hoofdselectiequery zijn die de juiste gegevens selecteert uit een samengesteld gegevenstype zoals geometry , address , enz.
Voorbeeld :select addess.city, address.zipcode, x( geometry_column ), y( geometry_column )

Om een ​​voorbeeld te geven van geometry gegevenstype :
MySQL heeft definities voor zijn Ruimtelijke ondersteuning . Maar ik weet niet zeker in hoeverre ze goed zijn in vergelijking met SQL Server's implementatie van Spatial Data .

geometry is een samengesteld gegevenstype en kan daarom niet worden opgehaald door een directe zoekopdracht.
U hebt afhankelijke functie(s) nodig die gegevens uit dergelijke gegevenskolommen parseert en teruggeeft in leesbaar , identificeerbaar gegevensformaten.
Voorbeeld :create table geom ( g geometry );
ResultSet converteren van select g from geom JAVA gebruiken om een ​​tabel aan te maken instructie zou resulteren met een unknwon gegevenstype voor kolom g .

Create table geom ( g UNKNOWN )

Gebruik x(g) , y(g) coördinaatfuncties op kolom g zal de juiste en acceptabele gegevenstypen retourneren.
Query select x(g), y(g) from geom wordt geconverteerd naar

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

UPDATE 2 :
Een resultatenset kan worden gegenereerd in combinatie van meerdere tabellen met behulp van relaties. Er is ook een kans dat de velden van de resultatenset zijn samengesteld uit expressies en hun aliassen. Daarom worden gegevenstypen van de resulterende kolomvelden of aliassen dynamisch bepaald. Metagegevens zijn niet op de hoogte van de exacte namen van tabellen, kolomnamen en hun oorspronkelijke/bovenliggende gegevenstypen uit de zoekopdracht.

Dus het is niet mogelijk om

  1. de enkele naam van een tabel en gebruik deze.
  2. het gegevenstype van de bovenliggende kolom en gebruik het.

Opmerking :Dit is ook van toepassing op alle andere datatypes die specifiek zijn voor meerdere databases, zoals NVARCHAR , etc..Maar raadpleeg dit bericht voor een alternatief voor het gebruik van NVARCHAR in MySQL .

Alvorens een dergelijke dynamische gegevensmigratie uit te proberen, zou het de verantwoordelijkheid van de clienttoepassingen moeten zijn om de equivalente gegevenstypen te kennen en ze dienovereenkomstig te gebruiken.

Raadpleeg ook Gegevenstypen en -bereiken voor Microsoft Access , MySQL en SQL Server voor meer informatie.



  1. SQLite-weergave maken

  2. Oracle E-Business Suite-architectuur in 12.2

  3. mysql2 gem kan niet compileren met MySQL 5.6.12 op OS X met Homebrew

  4. MySQL - Hoe in te voegen in meerdere tabellen met externe sleutels