Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да създадете таблица въз основа на JDBC Result Set

Можем да извлечем най-близкото съвпадение структура от набора от резултати и конструирайте таблица.
Но това не може да бъде точното копие по отношение на името на таблицата, ключовете, типа на машината, дали полето може да се нула или не и т.н. .

Следващият кодов фрагмент ви помага да продължите по начин, за да получите подходящ резултат.

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

Изпълнение с горната част от кода, отпечатан следния низ:

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

Надявам се това да ви помогне да продължите по-нататък.

Подобен пример може да се намери на: Създайте таблица с помощта на ResultSet ???

АКТУАЛИЗИРАНЕ 1 :

Не можете да направите нищо, когато зависите само от набор от резултати в приложението от страна на клиента.
Винаги трябва да е главната заявка за избор който избира правилни данни от съставен тип данни като geometry , address и др.
Пример :select addess.city, address.zipcode, x( geometry_column ), y( geometry_column )

За да дадете пример за geometry тип данни :
MySQL има дефиниции за своя Пространствена поддръжка . Но не съм сигурен доколко са добри в сравнение с SQL Сървърна реализация на пространствени данни .

geometry е съставен тип данни и следователно не може да бъде извлечен чрез директна заявка.
Имате нужда от зависима функция(и), която анализира данни от такива колони с данни и връща в четим , разпознаваеми формати на данни.
Пример :create table geom ( g geometry );
Преобразуване на ResultSet от select g from geom използването на JAVA за израз за създаване на таблица ще доведе до unknwon тип данни за колона g .

Create table geom ( g UNKNOWN )

Използване на x(g) , y(g) координатни функции на колона g ще върне правилни и приемливи типове данни.
Запитване select x(g), y(g) from geom ще се преобразува в

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

АКТУАЛИЗИРАНЕ 2 :
Набор от резултати може да бъде генериран в комбинация от множество таблици с помощта на релации. Също така има вероятност полетата на набора от резултати да са съставени от изрази и техните псевдоними. Следователно типовете данни на получените полета на колона или псевдоними се определят динамично. Метаданните не са наясно с точните имена на таблици, имена на колони и техните оригинални/родителски типове данни от заявката.

Така че не е възможно да се получи

  1. единичното име на таблица и го използвайте.
  2. типа данни на родителската колона и го използвайте.

Забележка :Това е приложимо и за всички други специфични за кръстосаната база данни типове данни, като NVARCHAR , и т.н..Но, моля, вижте тази публикация за алтернатива на използването на NVARCHAR в MySQL .

Преди да опитате такава динамична миграция на данни, клиентските приложения трябва да носят отговорност да знаят еквивалентните типове данни и да ги използват съответно.

Също така вижте Типове данни и диапазони за Microsoft Access , MySQL и SQL Server за повече информация.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Мога ли да използвам подготвен израз на PDO, за да обвържа идентификатор (име на таблица или поле) или ключова дума за синтаксис?

  2. Mysql - избор на година от времеви печат на unix

  3. Пакетни вмъквания с PHP

  4. Функция MySQL TRUNCATE() – съкращаване на число до определен брой десетични знаци

  5. Защо идентификаторът на auto_increment не се увеличава един по един, как да го настроя?