使用JDBC在表中动态插入数据

时间:2013-11-06 16:26:03

标签: java jdbc

我在mysql数据库中有1个表,在oracle数据库中有另一个表。我正在编写一个实用程序来从一个表中获取数据并插入到另一个表中。

以下是摆动实用工具的设计。

Textarea用于选择查询; 插入查询的另一个Textarea; 一个名为加载数据的按钮。

现在,如果我单击加载数据,则选择查询应该运行并获取数据。并执行insert查询以插入表中。

注意:由于它是一个实用工具,因此表名是动态的。

我现在面临的问题是插入查询。如何动态查找表的desc,以便在运行时可以使用setString,setLong或ect?

3 个答案:

答案 0 :(得分:1)

ResultSetMetaData可以告诉您ResultSet(以及表格):

 ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM TABLE2");
 ResultSetMetaData rsmd = rs.getMetaData();
 int numberOfColumns = rsmd.getColumnCount();
 boolean b = rsmd.isSearchable(1);

答案 1 :(得分:1)

以下是ResultSetMetaData对象如何告诉您所查询的表格的示例:

import java.sql.*;

public class JDBCQuery {

    public static void main(String args[]) {
        Connection conn = null;
        Statement s = null;
        try {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            conn = DriverManager.getConnection(
                    "jdbc:odbc:Driver={SQL Server};" + 
                    "Server=.\\SQLEXPRESS;" +
                    "Trusted_Connection=yes;" +
                    "Database=myDb");
            s = conn.createStatement();
            s.executeQuery("SELECT * FROM dbo.SalesSummary WHERE 0 = 1");
            ResultSet rs = s.getResultSet();
            ResultSetMetaData rsmd = rs.getMetaData();
            for (int i = 1; i <= rsmd.getColumnCount(); i++) {
                System.out.println(String.format("-- Column %d --", i));
                System.out.println(String.format("Column name: %s", rsmd.getColumnName(i)));
                System.out.println(String.format("Database-specific type name: %s", rsmd.getColumnTypeName(i)));
                System.out.println(String.format("Column size (DisplaySize): %d", rsmd.getColumnDisplaySize(i)));
                System.out.println(String.format("java.sql.Type of column: %d", rsmd.getColumnType(i)));
                System.out.println();
            }
        } catch( Exception e ) {
            e.printStackTrace();
        } finally {
            try {
                if (s != null) {
                    s.close();
                }
                if (conn != null) {
                    conn.close();
                }
            } catch( Exception e ) {
                e.printStackTrace();
            }
        }
    }
}

这是输出:

-- Column 1 --
Column name: Item
Database-specific type name: nvarchar
Column size (DisplaySize): 255
java.sql.Type of column: -9

-- Column 2 --
Column name: FiscalYear
Database-specific type name: int
Column size (DisplaySize): 11
java.sql.Type of column: 4

-- Column 3 --
Column name: Quarter
Database-specific type name: int
Column size (DisplaySize): 11
java.sql.Type of column: 4

-- Column 4 --
Column name: Sales
Database-specific type name: money
Column size (DisplaySize): 21
java.sql.Type of column: 3

java.sql.Types的完整列表可用here

答案 2 :(得分:0)

这里是我最近编写的一些代码,用于动态生成一些脚本。查询数据库元数据以获取有关前缀为vw_as的所有视图的信息。您应该能够以此为起点来查询要插入的表并获取其定义。

DataSource ds = ...;
Connection c = ds.getConnection();
DatabaseMetaData metaData = c.getMetaData();

ResultSet rs = metaData.getTables(null, "dbo", "vw_as%", new String[] { "VIEW" });

while (rs.next()) {
    String tableName = rs.getString("TABLE_NAME"));

    ResultSet rs1 = metaData.getColumns(null, "dbo", tableName, "%");

    while (rs1.next()) {
        String columnName = rs1.getString("COLUMN_NAME"));
    }
  }
}