《一对多新增数据》

《一对多新增数据》

开发工具与关键技术:MyEclipse 10、Java
作者:潘玉莹
撰写时间:2019-08-05

以下一对多新增文件为例,用一对多的关系来进行新增,设计好数据是及其重要的一步,设计数据库需要两张表连接起来。如下图一
这是你所要新增的多的数据
在这里插入图片描述

此图是连接上图的主键ID 图二
在这里插入图片描述
实现一对多的数据图,如HeZuoFangHeTongID为 10的对应两条文件,为11的对应三条文件。
在这里插入图片描述
如果你所要新增的数据除了文件还有其他数据的话,可以用一个对象接收,而多条数据我这里则用一个String集合来接收。新增的话要写两个SQL语句,因为到最后是用新增到的主键ID付给另外一张表的字段。新增第一张表(图一)的代码如下
Dao层代码
try {
con=DBUtil.getConnection();
ps=con.prepareStatement(insertHeZuoFangContract,PreparedStatement.RETURN_GENERATED_KEYS);
ps.setInt(1,heZuoFangHeTong.getGuanLianXiangMuID());
ps.setString(3,heZuoFangHeTong.getHeTongMingChen());
ps.setInt(2,heZuoFangHeTong.getHeZuoFanMingChenID());
ps.setString(4,heZuoFangHeTong.getShengXiaoRiQi());

RETURN_GENERATED_KEYS是获取主键的意思,标明主键的作用这主要是把获取到的主键付给图二对应的ID
再通过for循环把获取到的主键ID付给图二,
如果图一新增成功,如果新增成功ps.executeUpdate() > 0将大于0;则获取其主键ID
if (rs.next()) {key=rs.getInt(1);}
再通过for循环去遍历赋值
if (ps.executeUpdate() > 0) {
rs=ps.getGeneratedKeys();//获取刚刚新增的主键
if (rs.next()) {
key=rs.getInt(1);
}
//添加多条文件路径数据
for (String filePath : list) {
ps = conn.prepareStatement(insertFileCustomerContract);
ps.setInt(1, key);
ps.setString(2, filePath);
ps.executeUpdate();
}
Servlet层
JsonReturn jsonReturn = new JsonReturn();
try {
response.setContentType(“application/json”);
int z=0;
KeHuHeTong keHuHeTong=new KeHuHeTong();
List listFile=new ArrayList();
String fileName="";//获取文件名称
获取当前项目文件路径
String savePath = this.getServletContext().getRealPath("/WEB-INF/upload"); File file = new File(savePath);
if(!file.exists()&&!file.isDirectory()){
file.mkdir();
}
String message = “”;
try {
DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
ServletFileUpload fileUpload = new ServletFileUpload(diskFileItemFactory);
fileUpload.setHeaderEncoding(“UTF-8”);
if(!fileUpload.isMultipartContent(request)){
return;
}
List list = fileUpload.parseRequest(request);
这部分代码是通过反射获取除了文件外的其他数据

对文件进行处理
//注意:不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的,如: c:\a\b\1.txt,而有些只是单纯的文件名,如:1.txt
//处理获取到的上传文件的文件名的路径部分,只保留文件名部
fileName = fileName.substring(fileName.lastIndexOf(File.separator)+1);
//获取扩展名
String fileExtName = fileName.substring(fileName.lastIndexOf(".")+1);
if(!(“xls”.equals(fileExtName)||“png”.equals(fileExtName)||“xlsx”.equals(fileExtName)||“docx”.equals(fileExtName)||“jpg”.equals(fileExtName)||“jpeg”.equals(fileExtName))){
PrintWriter out=response.getWriter();
message=“上传文件中第”+z+“个文件类型不符合!”;
out.write(ToJsonUtil.toJson(message));
out.flush();
out.close();
return;
}
通过流的方式读取数据
//获取item中的上传文件的输入流
InputStream is = item.getInputStream();
//创建一个文件输出流
FileOutputStreamfos=new FileOutputStream(savePath+File.separator+fileName);
byte buffer[] = new byte[1024]; //创建一个缓冲区
int length = 0 //判断输入流中的数据是否已经读完的标识;
while((length = is.read(buffer))>0){
fos.write(buffer, 0, length);
}
listFile.add(""+fileName+"");
//关闭输入流
is.close();
//关闭输出流
fos.close();
执行dao层里的方法 然后进行返回
int returnValue = staffService.insertContract(keHuHeTong,listFile);
JSONObject object = JSONObject.fromObject(jsonReturn);
PrintWriter printWriter = response.getWriter();
printWriter.write(object.toString());
printWriter.flush();
printWriter.close();
效果图如下
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值