繁体   English   中英

MySQL - 如果没有在 Java 中创建列,则检查列是否存在

[英]MySQL - checking if column exists if not create it in Java

我花了几个小时研究如何创建一个有助于我的程序的 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();
        }
    }

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

谢谢,杰克

您可以使用 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();
}

你可以做这样的事情,

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
      }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM