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
- il nome unico di una tabella e utilizzalo.
- 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.