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