Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cách tạo bảng dựa trên Tập kết quả JDBC

Chúng tôi có thể trích xuất kết hợp gần nhất cấu trúc từ tập kết quả và tạo một bảng.
Nhưng đây không thể là bản sao chính xác, xét về tên bảng, khóa, loại công cụ, trường có thể trống hay không, v.v. .

Đoạn mã sau giúp bạn tiến hành theo cách để có được kết quả thích hợp.

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

Đang thực thi với phần trên của mã, được in chuỗi sau:

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

Hãy để tôi hy vọng điều này sẽ giúp bạn tiến xa hơn.

Ví dụ tương tự có thể được tìm thấy tại: Tạo bảng bằng ResultSet ???

CẬP NHẬT 1 :

Bạn không thể làm gì khi chỉ phụ thuộc vào tập kết quả ở ứng dụng phía máy khách.
Nó phải luôn là truy vấn chọn chính chọn dữ liệu thích hợp từ kiểu dữ liệu tổng hợp như geometry , address , v.v.
Bài kiểm tra :select addess.city, address.zipcode, x( geometry_column ), y( geometry_column )

Để đưa ra một ví dụ về geometry kiểu dữ liệu :
MySQL có các định nghĩa cho Hỗ trợ về không gian . Nhưng tôi không chắc chúng tốt đến mức nào so với SQL Việc máy chủ triển khai Dữ liệu không gian .

geometry là kiểu dữ liệu tổng hợp và do đó không thể truy xuất bằng truy vấn trực tiếp.
Bạn yêu cầu (các) hàm phụ thuộc phân tích cú pháp dữ liệu từ các cột dữ liệu đó và trả về ở dạng có thể đọc được , có thể nhận dạng các định dạng dữ liệu.
Ví dụ :create table geom ( g geometry ); Kết quả chuyển đổi
từ select g from geom sử dụng JAVA để tạo một câu lệnh bảng sẽ dẫn đến một unknwon kiểu dữ liệu cho cột g .

Create table geom ( g UNKNOWN )

Sử dụng x(g) , y(g) điều phối các chức năng trên cột g sẽ trả về kiểu dữ liệu thích hợp và được chấp nhận.
Truy vấn select x(g), y(g) from geom sẽ được chuyển đổi thành

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

CẬP NHẬT 2 :
Một tập kết quả có thể được tạo ra với sự kết hợp của nhiều bảng bằng cách sử dụng các quan hệ. Cũng có khả năng các trường tập kết quả bao gồm các biểu thức và bí danh của chúng. Do đó, kiểu dữ liệu của các trường cột hoặc bí danh kết quả được quyết định động. Siêu dữ liệu không biết tên chính xác của bảng, tên cột và kiểu dữ liệu gốc / mẹ của chúng từ truy vấn.

Vì vậy, không thể lấy đ ược

  1. tên duy nhất của một bảng và sử dụng nó.
  2. kiểu dữ liệu của cột chính và sử dụng nó.

Lưu ý :Điều này cũng có thể áp dụng cho tất cả các kiểu dữ liệu cụ thể của cơ sở dữ liệu chéo khác, như NVARCHAR , v.v. Tuy nhiên, vui lòng tham khảo bài đăng này để biết giải pháp thay thế cho việc sử dụng NVARCHAR trong MySQL .

Trước khi thử di chuyển dữ liệu động như vậy, ứng dụng khách phải có trách nhiệm biết các kiểu dữ liệu tương đương và sử dụng chúng cho phù hợp.

Ngoài ra, hãy tham khảo Loại và phạm vi dữ liệu cho Microsoft Access , MySQL và SQL Server để biết thêm thông tin.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sao chép / đồng bộ hóa db Firebird cục bộ sang db trực tuyến

  2. SQLAlchemy:Cách xóa bằng phép nối

  3. MySQL - bùng nổ / tách đầu vào cho thủ tục được lưu trữ

  4. Hàm lưu trữ mySQL để tạo một slug

  5. Cột không được để trống Mysql