java - Jdbc/MySql动态添加列和列名

标签 java mysql jdbc

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

例如:

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

我试图动态添加一些带有迭代器名称的列,只是为了测试我的代码,但它给了我一个 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);
    }
}

最佳答案

首先你应该在你的循环之后删除你的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' 你只需要删除两个引号

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

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

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);
            }
        }
    }
}

希望对你有帮助

关于java - Jdbc/MySql动态添加列和列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39438467/

相关文章:

java - URL 对象无法识别

java - 是否有任何 ESAPI 替代方案可以进行 SQL 注入(inject)和 XSS 验证

mysql - 我想找到一个在 5 分钟内尝试了 3 次登录的用户。在 MySQL 5.7 中

mysql - 优化慢查询MySQL InnoDB(Doctrine2)

mysql - 在数据库中存储 100K 个不同的表

mysql - 配置 MyBatis 使用轻量级 MySQL ping/* ping */

java - 如何从 SAXParser 处理程序返回数据(字符串数组)?

java - 动态线程池管理

java - 如何在 Google App Engine 中使用 CachedRowSet?

java - 数据库扩展名是 accdb,而我希望它是 mdb