Możemy wyodrębnić najbliższe dopasowanie struktury ze zbioru wyników i skonstruuj tabelę.
Ale nie może to być dokładna replika, jeśli chodzi o nazwę tabeli, klucze, typ silnika, czy pole może być puste, czy nie, itp. .
Poniższy fragment kodu pomaga postępować w taki sposób, aby uzyskać odpowiedni wynik.
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() );
Wykonywanie z powyższą częścią kodu, wydrukowaną następującym ciągiem:
Create table visitors ( ip VARCHAR( 6 ), bro VARCHAR( 6 ) )
Mam nadzieję, że to pomoże Ci przejść dalej.
Podobny przykład można znaleźć pod adresem: Utwórz tabelę za pomocą zestawu wyników ???
AKTUALIZACJA 1 :
Nie możesz nic zrobić, gdy polegasz tylko na zestawie wyników w aplikacji po stronie klienta.
Powinno to być zawsze główne zapytanie wybierające który wybiera właściwe dane ze złożonego typu danych, takiego jak geometry
, address
itp.
Przykład :select addess.city, address.zipcode, x( geometry_column ), y( geometry_column )
Aby podać przykład geometry
typ danych :
MySQL ma definicje dla swojego Wsparcie przestrzenne
. Ale nie jestem pewien, jak daleko są one dobre w porównaniu z SQL Implementacja danych przestrzennych na serwerze
.
geometry
jest złożonym typem danych i dlatego nie można go pobrać za pomocą bezpośredniego zapytania.
Wymagane są zależne funkcje, które analizują dane z takich kolumn danych i zwracają w postaci czytelnej , możliwy do zidentyfikowania formaty danych.
Przykład :create table geom ( g geometry );
Konwertowanie zestawu wyników z select g from geom
użycie JAVA do instrukcji tworzenia tabeli skutkowałoby unknwon
typ danych dla kolumny g
.
Create table geom ( g UNKNOWN )
Używanie x(g)
, y(g)
funkcje współrzędnych w kolumnie g
zwróci prawidłowe i akceptowalne typy danych.
Zapytanie select x(g), y(g) from geom
zostanie przekonwertowany na
Create table ( x(g) DOUBLE( 23, 31 ), y(g) DOUBLE( 23, 31 ) )
AKTUALIZACJA 2 :
Zestaw wyników może być generowany z kombinacji wielu tabel przy użyciu relacji. Istnieje również szansa, że pola zestawu wyników składają się z wyrażeń i ich aliasów. W związku z tym typy danych wynikowych pól kolumn lub aliasów są określane jako dynamiczne. Metadane nie znają dokładnych nazw tabel, nazw kolumn i ich oryginalnych/nadrzędnych typów danych z zapytania.
Tak więc nie można uzyskać
- pojedyncza nazwa tabeli i użyj jej.
- typ danych kolumny nadrzędnej i użyj go.
Uwaga :dotyczy to również wszystkich innych typów danych specyficznych dla różnych baz danych, takich jak NVARCHAR , itp..Ale proszę zapoznać się z ten post, aby uzyskać alternatywę dla użycia NVARCHAR w MySQL .
Przed próbą takiej dynamicznej migracji danych aplikacja kliencka powinna znać równoważne typy danych i odpowiednio ich używać.
Zobacz także Typy i zakresy danych dla programu Microsoft Access , MySQL i SQL Server aby uzyskać więcej informacji.