Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Cara membuat tabel berdasarkan Kumpulan Hasil JDBC

Kita dapat mengekstrak pencocokan terdekat struktur dari resultet dan buat tabel.
Tapi ini tidak bisa menjadi replika yang tepat, dalam hal nama tabel, kunci, jenis mesin, apakah bidang nullable atau tidak, dll. .

Cuplikan kode berikut membantu Anda melanjutkan dengan cara mendapatkan hasil yang sesuai.

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

Dieksekusi dengan bagian kode di atas, dicetak string berikut:

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

Biarkan saya berharap ini membantu Anda melangkah lebih jauh.

Contoh serupa dapat ditemukan di: Buat tabel menggunakan ResultSet ???

PERBARUI 1 :

Anda tidak dapat melakukan apa pun jika hanya bergantung pada kumpulan hasil di aplikasi sisi klien.
Itu harus selalu menjadi kueri pemilihan utama yang memilih data yang tepat dari tipe data komposit seperti geometry , address , dll.
Contoh :select addess.city, address.zipcode, x( geometry_column ), y( geometry_column )

Untuk memberikan contoh geometry tipe data :
MySQL memiliki definisi untuk Dukungan Spasial . Tapi saya tidak yakin seberapa jauh mereka baik dibandingkan dengan SQL Implementasi Server Data Spasial .

geometry adalah tipe data komposit dan karenanya tidak dapat diambil dengan kueri langsung.
Anda memerlukan fungsi dependen yang mem-parsing data dari kolom data tersebut dan mengembalikan dalam dapat dibaca , dapat diidentifikasi format data.
Contoh :create table geom ( g geometry );
Mengonversi ResultSet dari select g from geom menggunakan JAVA untuk membuat pernyataan tabel akan menghasilkan unknwon tipe data untuk kolom g .

Create table geom ( g UNKNOWN )

Menggunakan x(g) , y(g) fungsi koordinat pada kolom g akan mengembalikan tipe data yang sesuai dan dapat diterima.
Kueri select x(g), y(g) from geom akan diubah menjadi

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

PERBARUI 2 :
Resultset mungkin dihasilkan dalam kombinasi beberapa tabel menggunakan relasi. Ada juga kemungkinan bahwa bidang hasil terdiri dari ekspresi dan aliasnya. Oleh karena itu, tipe data bidang kolom atau alias yang dihasilkan diputuskan dinamis. Metadata tidak mengetahui nama pasti tabel, nama kolom, dan tipe data asli/induknya dari kueri.

Jadi, tidak mungkin untuk mendapatkan

  1. satu nama tabel dan gunakan itu.
  2. tipe data kolom induk dan gunakan.

Catatan :Ini juga berlaku untuk semua tipe data spesifik lintas basis data lainnya, seperti NVARCHAR , dll.Tapi, silakan lihat postingan ini untuk alternatif penggunaan NVARCHAR di MySQL .

Sebelum mencoba migrasi data dinamis seperti itu, aplikasi klien harus bertanggung jawab untuk mengetahui tipe data yang setara dan menggunakannya sesuai dengan itu.

Lihat juga Jenis dan rentang data untuk Microsoft Access , MySQL dan SQL Server untuk informasi lebih lanjut.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL SELECT AS menggabungkan dua kolom menjadi satu

  2. LOAD DATA LOCAL INFILE dilarang di... PHP

  3. Bagaimana cara membuat database multi-penyewa dengan struktur tabel bersama?

  4. Cara Mengganti Nama Database di MySQL

  5. Pengambilan PDO tidak menghasilkan apa-apa