[英]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.