一、先创建对应类,具体代码如下
public class UserTable {
private String tableName;
public UserTable(String str){
tableName = str;
}
@Override
public String toString() {
return "create table u" + tableName + "(" + "time varchar(50) not null, content varchar(100) not null );";
}
}
二、JDBC操作,先检查表是否存在,若不存在则创建
public void createRecordsTable() throws SQLException {
//1.创建数据库连接池
Properties prop = new Properties();
prop.load(new FileInputStream("src/druid.properties"));
//2. 获取连接池对象
DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
//3. 获取数据库连接 Connection
Connection conn = dataSource.getConnection();
//4. 定义SQL语句
sql = "select user_id from `user`";
//5. 根据sql语句获取PreparedStatement对象
PreparedStatement pstmt = conn.prepareStatement(sql);
//6. 先查询,获取查询结果
ResultSet rs = pstmt.executeQuery();
//7. 创建集合
HashMap<Integer,Boolean> users = new HashMap(); //用来存储每个表是否创建
//8. 集合赋初值
while (rs.next()) {
int userId = rs.getInt("user_id");
users.put(userId,true); //先全是true
}
//9. 检查表是否存在,更新集合中的表是否存在的状态
for (Integer key : users.keySet()) {
users.put(key,validateTableExist("u"+key));
}
//10. 遍历集合,如果不存在则创建表
for (Integer key : users.keySet()) {
if (users.get(key) == false) { //表不存在
UserTable ut = new UserTable(key.toString()); //创建对应的表实例
int cnt = pstmt.executeUpdate(ut.toString());
System.out.println(cnt); //打印受影响行数
}
}
rs.close();
}
三、检查表是否存在的方法
public boolean validateTableExist(String tableName){
boolean flag = false;
try {
DatabaseMetaData meta = conn.getMetaData();
String type [] = {"TABLE"};
rs = meta.getTables(null, null, tableName, type);
flag = rs.next();
} catch (Exception e) {
e.printStackTrace();
}
return flag;
}
这部分也可以参考我自己的宁外一篇博客,详细介绍了检查表的方法,链接如下。