上一篇博客讲到如何对表的字段进行操作,本篇将围绕使用JDBC对表的操作展开讨论。
当管理员在用户数据库建立一张新表后,系统数据库会在DBid_charts表中插入一条新表的数据,包括表英文名、中文名和对表的描述,还会有一张新表DBid_Cid_meta表来存储该新表的字段信息。所以在删除用户数据库表的时候,还要注意同时删除系统数据库的DBid_charts表中关于被删除表的数据和DBid_Cid_meta表。
删除用户数据库中的表要使用JDBC,连接用户数据库后执行sql语句drop table chartName
同时删除表结构和数据。此方法设置删除成功就返回1。对系统数据库,即springboot项目通过application.properties文件进行连接的数据库,进行删表还是通过mapper文件操作数据库,其xml文件中的代码为:
<!--删除表-->
<update id="deleteSC" parameterType="int">
drop table if exists #{DBId}_#{CId}_meta
</update>
注意deleteSC的返回值为0!mybatis对删除操作的返回值由具体删除行数决定,drop操作直接删除表,就默认影响行数为0,所以返回为0,在对方法是否成功做出判断时要注意这一点。
删除顺序非常重要!如果先删除DBid_charts表中的数据,则再进行之后操作时将无法获得表所在数据库的名字。因此要先删除用户数据库表,接着是字段表,最后才是DBid_charts表中的数据。controller文件中的删除方法代码如下:
//删除表
@RequestMapping("/deleteChart/{cid}/{bid}")
public Map<String, Object> deleteChart(@PathVariable int cid,@PathVariable int bid) throws Exception {
Map<String, Object> map = new HashMap<>();
int sd = chartService.specificDelete(cid,bid);
int msd = chartService.specificDChart(cid,bid);//返回值受涉及的行数影响
int info = chartService.deleteChart(cid,bid);
System.out.println("具体删除表:"+sd);
System.out.println("具体删除表项表:"+msd);
System.out.println("表所在数据库信息表的数据:"+info);
if ((info > 0)&&(msd==0)&&(sd>0)) {
map.put("state", true);
map.put("msg", "删除成功!");
} else {
map.put("state", false);
map.put("msg", "删除失败!");
}
return map;
}
修改表名时涉及用户数据库中的被修改表和系统数据库的DBid_charts表的该表数据项。用户数据库的表修改表名的操作比较简单,使用JDBC连接用户数据库后执行sql语句alter table chartName rename newName
就可以了。对系统数据库中表的操作依旧通过mapper来实现,xml文件中相应的代码如下:
<update id="updateChart" parameterType="com.example.server.domain.Chart">
update #{DBId}_charts set CEN=#{Chart.EN},CCN=#{Chart.CN},CDes=#{Chart.Des}
where id=#{Chart.id};
</update>
controller文件中相应的代码如下:
@PostMapping("/updateChart/{DBId}")
public int updateChart(@RequestBody Chart nc,@PathVariable int DBId) throws Exception {
int id=nc.getId();
String nn=nc.getEN();
int su = chartService.specificUpdate(id,DBId,nn);
System.out.println("具体更改表名"+su);
int i = chartService.updateChart(nc,DBId);
return i;
}
前端将更改过表数据以Chart对象的格式发回后端,表的新名就从Chart对象中获得。对表的其他信息进行的修改与用户数据库无关,只涉及系统数据库DBid_charts表的信息。