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

时间:2015-12-24 06:04:46

标签: java mysql

我花了几个小时研究如何创建一个有助于我的程序的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:  我需要做专栏的原因是我需要存储'包'用户名有。可以有无限的"包的数量。

谢谢, 千斤顶

2 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分:0)

你可以这样做,

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
      }