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

Come creare una tabella basata sul set di risultati JDBC

Possiamo estrarre la corrispondenza più vicina struttura dal set di risultati e costruire una tabella.
Ma questa non può essere la replica esatta, in termini di nome della tabella, chiavi, tipo di motore, se un campo è annullabile o meno, ecc. .

Il seguente frammento di codice ti aiuta a procedere in modo da ottenere un risultato appropriato.

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

In esecuzione con la parte sopra del codice, stampata la seguente stringa:

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

Spero che questo ti aiuti a procedere ulteriormente.

Un esempio simile può essere trovato su: Crea una tabella usando ResultSet ???

AGGIORNAMENTO 1 :

Non puoi fare nulla quando dipendi solo da un set di risultati nell'applicazione lato client.
Dovrebbe sempre essere la query di selezione principale che seleziona i dati corretti da un tipo di dati composito come geometry , address , ecc.
Esempio :select addess.city, address.zipcode, x( geometry_column ), y( geometry_column )

Per fare un esempio di geometry tipo di dati :
MySQL ha le definizioni per il suo Supporto spaziale . Ma non sono sicuro di quanto siano buoni rispetto a SQL Implementazione dei dati spaziali da parte del server .

geometry è un tipo di dati composito e quindi non può essere recuperato tramite query diretta.
Sono necessarie funzioni dipendenti che analizzino i dati da tali colonne di dati e restituiscano in leggibile , identificabile formati di dati.
Esempio :create table geom ( g geometry );
Conversione di ResultSet da select g from geom l'utilizzo di JAVA per un'istruzione di creazione tabella risulterebbe con un unknwon tipo di dati per la colonna g .

Create table geom ( g UNKNOWN )

Usando x(g) , y(g) coordinare le funzioni sulla colonna g restituirà tipi di dati corretti e accettabili.
Query select x(g), y(g) from geom verrà convertito in

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

AGGIORNAMENTO 2 :
Un set di risultati potrebbe essere generato in combinazione di più tabelle utilizzando le relazioni. Esiste anche la possibilità che i campi del set di risultati siano composti da espressioni e dai relativi alias. Pertanto, i tipi di dati dei campi o degli alias della colonna risultanti sono decisi dinamici. I metadati non sono a conoscenza dei nomi esatti delle tabelle, dei nomi delle colonne e dei loro tipi di dati originali/principali dalla query.

Quindi, non è possibile ottenere

  1. il nome unico di una tabella e utilizzalo.
  2. il tipo di dati della colonna principale e utilizzalo.

Nota :Questo è applicabile anche a tutti gli altri tipi di dati specifici di database incrociati, come NVARCHAR , ecc. Tuttavia, fai riferimento a questo post per un'alternativa all'utilizzo di NVARCHAR in MySQL .

Prima di provare tale migrazione dinamica dei dati, dovrebbe essere responsabilità delle applicazioni client conoscere i tipi di dati equivalenti e utilizzarli di conseguenza.

Inoltre, fare riferimento a Tipi e intervalli di dati per Microsoft Access , MySQL e SQL Server per ulteriori informazioni.