0

列/フィールドが動的に変化するテーブルに行を挿入するという私の問題を解決できますか? schedule という名前のテーブルがあり、フィールドに応じて動的に増減します。私の要件は、このテーブルにデータを挿入することです。問題は、動的に増加または減少するため、フィールドがいくつあるかわからないことです。

私の考え: フィールド名を動的に知るために ResultSetMetaData を使用しました。これにより、次のような挿入クエリを使用できます。

ResultSet res = stat.executeUpdate("insert into scheduletab (name,date,shift,'"+col_name[i]+"') values (....., ...., .....)");

ここでの問題は、「i」の値をどのように初期化または指定するかということです。

私のコードは次のとおりです。

注: b34 は送信するボタンです。

if (e.getSource() == b34)
{
    String[] col_name = new String[25];
    try
    {
        Class.forName("com.mysql.jdbc.Driver");
        Connection con = DriverManager.getConnection(
           "jdbc:mysql://localhost/nursedb", "root", "123456");
        try
        {
            Statement st = con.createStatement();
            ResultSet rs = st.executeQuery("SELECT * FROM scheduletab");
            ResultSetMetaData md = rs.getMetaData();
            int col = md.getColumnCount();
            System.out.println("Number of Column : " + col);
            System.out.println("Columns Name: ");
            for (int i = 1; i <= col; i++)
            {
                col_name[i] = md.getColumnName(i);
                System.out.println(col_name[i]);
            }
        }
        catch (SQLException s)
        {
            System.out.println("SQL statement is not executed!");
        }

        // Start Inserting data into Schedule Tab by specifying the
        // column names.
        Statement stat = con.createStatement();
        // ResultSet res =
        // stat.executeUpdate("insert into scheduletab (name,date,shift,'"values();
        // End Inserting data into Schedule Tab by specifying the column
        // names.

    }
    catch (Exception ex)
    {
        ex.printStackTrace();
    }
}
4

1 に答える 1

1

データベーススキーマが動的に変化している場合は、ほぼ間違いなく悪い道を進んでいます。

注意深いアドバイスについては、この古い質問を確認してください。

于 2013-01-30T01:25:36.667 に答える