【问题标题】:MySQL - checking if column exists if not create it in JavaMySQL - 检查列是否存在,如果不在 Java 中创建它
【发布时间】:2015-12-24 06:04:45
【问题描述】:

我花了几个小时研究如何创建一个有助于我的程序的 Java 方法。我对 MySQL 很陌生,所以我不是最有经验的人。

我要做的是编写一个 Java 方法,该方法检查表中是否存在以用户名命名的列。如果它不存在,它将创建该列。

我在互联网上看到了很多关于我的问题的类似解决方案的教程。我不明白我应该如何将 TABLE_SCHEMA 实现为 java 方法,因为我只知道 MySql 的基础知识。

很高兴看到如何在 Java 方法中实现这个或其他一些解决方案。由于我无法弄清楚,我大部分都删除了我以前的工作,如果我需要证明这一点,很抱歉(这是我的第一个问题。)

编辑:

        try {
        ResultSet res = conn.createStatement()
                .executeQuery("ALTER TABLE `package_table` ADD " + username + "  VARCHAR(15);");
        if (!res.next()) {
            conn.createStatement()
                    .executeUpdate("INSERT INTO `package_table` (`uuid`, `name`, `packages`) VALUE ('"
                            + event.getPlayer().getUniqueId() + "', '" + event.getPlayer().getName() + "', '" + "" + "');");
        }
    } catch (SQLException e) {
        e.printStackTrace();
        try {
            conn.close();
        } catch (SQLException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
    }

编辑2: 我需要做列的原因是我需要存储用户名的“包”。可以有“无限”数量的包。

谢谢, 杰克

【问题讨论】:

  • 您的代码在这里会有所帮助,因为我们不一定知道您的实现细节(例如,您使用的是原始 JDBC 还是 Hibernate 等框架)。
  • “我不明白我应该如何实现 TABLE_SCHEMA”是什么意思?
  • 我添加了我正在使用的代码示例。
  • 您真的需要为每个用户添加一列吗?它错了..!
  • 为我正在做的项目做行更好。至少一个程序员朋友是这么说的。我会用更多信息更新帖子!

标签: java mysql


【解决方案1】:

您可以使用 jdbc 来完成。只需获取列名,然后根据需要添加一个。

类似这样的:

Connection con;
Statement st;
ResultSet rs;

try {
  Class.forName("com.mysql.jdbc.Driver");
  con = DriverManager.getConnection(
      "jdbc:mysql://localhost:3306/dbname",
      "dbuser",
      "bdpass"
  );

  st = con.createStatement();

  String sql = "select * from table";
  rs = st.executeQuery(sql);
  ResultSetMetaData metaData = rs.getMetaData();
  int rowCount = metaData.getColumnCount();

  boolean isMyColumnPresent = false;
  String myColumnName = "myColumnName";
  for (int i = 1; i <= rowCount; i++) {
    if (myColumnName.equals(metaData.getColumnName(i))) {
      isMyColumnPresent = true;
    }
  }

  if (!isMyColumnPresent) {
    String myColumnType = "some type";
    st.executeUpdate("ALTER TABLE table ADD " + myColumnName + " " + myColumnType);
  }
} catch (Exception e) {
  e.printStackTrace();
}

【讨论】:

  • 很好的答案!正是我想要的!
【解决方案2】:

你可以这样做,

DatabaseMetaData  metadata = conn.getMetaData();
Resultset rs = null; 
  rs=metadata.getColumns(null, null, "package_table", null);
boolean found=false;

         while (rs.next()) {

               if(username.equals(rs.getString("COLUMN_NAME"))
              {
              found=true;
              }                       

             } 

       if(found){
       //Skip column creation    
       }else{
       //Create column
      }

【讨论】:

    猜你喜欢
    • 2011-05-16
    • 2011-09-15
    • 1970-01-01
    • 2015-10-05
    • 1970-01-01
    • 1970-01-01
    • 2019-04-21
    • 1970-01-01
    • 2017-11-22
    相关资源
    最近更新 更多