如何基于 JDBC 结果集创建 MySQL 表?
jdbcobject oriented programmingprogramming
ResultSetMetadata 类提供各种方法,提供有关当前 ResultSet 对象的信息,例如列数、表名称、列名称、列数据类型等……
要准备 CREATE 查询,您需要获取 −
- 表的名称,使用 getTableName() 方法。
- 列计数,使用 getColumnCount() 方法迭代列。
- 使用 getColumnName() 方法获取每列的名称。
- 使用 getColumnTypeName() 方法获取每列的数据类型。
- 使用getPrecision() 方法。
示例
让我们使用 CREATE 查询在 MySQL 数据库中创建一个名为 customers 的表,如下所示 −
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 程序在数据库中创建另一个名为 customers2 的表。
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 ......
注意 − 这可能不适用于您不需要声明精度的数据类型。例如,日期。