如何基于JDBC结果集创建MySQL表?

ResultSetMetaData的类提供了提供关于当前信息的各种方法的ResultSet对象,如列数,表名,列名,列的数据类型等...

要准备CREATE查询,您需要获得-

  • 表的名称,使用getTableName()方法。

  • 列数,使用getColumnCount()方法迭代列。

  • 使用getColumnName()方法的每一列的名称。

  • 使用getColumnTypeName()方法的每一列的数据类型。

  • 使用getPrecision()方法的每一列的精度

示例

让我们使用CREATE查询在MySQL数据库中创建一个名称为customer的表,如下所示-

CREATE TABLE Customers (
   ID INT NOT NULL,
   NAME VARCHAR (20) NOT NULL,
   AGE INT NOT NULL,
   SALARY DECIMAL (18, 2),
   ADDRESS VARCHAR (25),
   PRIMARY KEY (ID)
);

以下JDBC程序在数据库中创建另一个名称为customer2的表。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
public class CreatingTableFromReusultSet {
   public static void main(String args[]) throws SQLException {
      //注册驱动程序
      DriverManager.registerDriver(new com.mysql.jdbc.Driver());
      //获得连接
      String mysqlUrl = "jdbc:mysql://localhost/sampledatabase";
      Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
      System.out.println("Connection established......");
      //创建语句
      Statement stmt = con.createStatement();
      //查询以检索记录
      String query = "Select * from Customers";
      //执行查询
      ResultSet rs = stmt.executeQuery(query);
      //检索ResultSetMetaData对象
      ResultSetMetaData resultSetMetaData = rs.getMetaData();
      //检索当前表的列数
      int columnCount = resultSetMetaData.getColumnCount();
      String createQuery = "CREATE TABLE "
         +resultSetMetaData.getTableName(1)+"2 (";
         String createQuery2 = "";
      for(int i = 1; i<columnCount; i++ ) {
         createQuery2 = createQuery2+
            resultSetMetaData.getColumnName(i)+
            " "+resultSetMetaData.getColumnTypeName(i)
            +"("+resultSetMetaData.getPrecision(i)+"), ";
      }
      createQuery2 = createQuery2+
         resultSetMetaData.getColumnName(columnCount)+
         " "+resultSetMetaData.getColumnTypeName(columnCount)
         +"("+resultSetMetaData.getPrecision(columnCount)+") ) ";
      System.out.println("Query to create new table: ");
      System.out.println(createQuery+createQuery2);
      stmt.execute(createQuery+createQuery2);
      System.out.println("Table created .......");
   }
}

输出结果

Connection established......
Query to create new table:
CREATE TABLE customers2 (ID INT(11), NAME VARCHAR(20), AGE INT(11), SALARY DECIMAL(18), ADDRESS VARCHAR(25) )
Table created ......

注意-这可能不适用于不需要声明精度的数据类型。例如,日期。