动态添加列和列名Jdbc / MySql

时间:2016-09-11 16:56:35

标签: java mysql jdbc

有没有办法使用jdbc动态地将列和列名添加到现有表?

例如:

如果NumberOfColumns = 3,我希望列名称为“Column1”,Column2“,”Column3“。

我尝试动态添加一些名为iterator的列,仅用于测试我的代码,但它给我一个SQL语法错误。

以下是我刚才描述的代码的一些部分。如果我删除整个循环,代码就像一个魅力。

public class something {

    //Some Variables Declaration///
    //Number of columns in test table//
    int NumberOfColumns = 3;

    public static void main(String args[]) {

        //..... SOME CODE....//       
        //Create database//
        sql = "CREATE DATABASE mydb";
        stmt.executeUpdate(sql);

        //Create test table// 
        sql = "CREATE TABLE mydb.table "
                + "(id INTEGER not NULL ";

        stmt.executeUpdate(sql);

        //Add columns dynamically//
        for (int i = 0; i < NumberOfColumns; i++) {

            sql = "ALTER TABLE mydb.test ADD'" + i + "' VARCHAR(30)";
            stmt.executeUpdate(sql);
        }
        stmt.executeUpdate(sql);
    }
}

2 个答案:

答案 0 :(得分:0)

alter语句中的关键字ADD后面需要一个空格。我还建议为列名添加前缀,而不是仅使用数字。

您是否也可以发布SQL错误,以帮助澄清错误实际上是什么。

答案 1 :(得分:-1)

首先,您应该在循环后删除stmt.executeUpdate(sql);,这可能会出现问题,

改变这一行:

for (int i = 0; i < NumberOfColumns; i++) {

    sql = "ALTER TABLE mydb.test ADD'" + i + "' VARCHAR(30)";
    stmt.executeUpdate(sql);
}
stmt.executeUpdate(sql);

就这样:

for (int i = 0; i < NumberOfColumns; i++) {
    colname = "Column" + i;
    sql = "ALTER TABLE mydatabase.table ADD " + colname + " VARCHAR(30)";
    stmt.executeUpdate(sql);
}

因为您可能会收到3ed列存在的错误

也不需要'id'列的名称,您只需删除两个小数

这是一个例子可以解决你的问题:

需要初始化驱动程序,以便在创建数据库表和列之后打开与数据库的通信通道,

package DataBase;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class createdatabase {

    //Number of columns in test table//
    private static int NumberOfColumns = 3;

    static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
    static final String DB_URL = "jdbc:mysql://localhost/";

    static final String USER = "root";
    static final String PASS = "mypass";

    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");

            conn = DriverManager.getConnection(DB_URL, USER, PASS);

            stmt = conn.createStatement();

            String sql = "CREATE DATABASE mydatabase";
            stmt.executeUpdate(sql);

            sql = "CREATE TABLE mydatabase.table (id INTEGER not NULL)";
            stmt.executeUpdate(sql);
            String colname;
            for (int i = 0; i < NumberOfColumns; i++) {
                colname = "Column" + i;
                sql = "ALTER TABLE mydatabase.table ADD " + colname + " VARCHAR(30)";
                stmt.executeUpdate(sql);
            }

        } catch (ClassNotFoundException | SQLException e) {
            System.out.println("Exception = " + e);
        } finally {
            try {
                if (stmt != null) {
                    stmt.close();
                }
            } catch (SQLException se2) {
            }
            try {
                if (conn != null) {
                    conn.close();
                }
            } catch (SQLException se) {
                System.out.println("Exception" + se);
            }
        }
    }
}

希望这可以帮到你