概述
《一对多新增数据》
开发工具与关键技术: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:ab1.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();
效果图如下
最后
以上就是欢喜雨为你收集整理的《一对多新增数据》的全部内容,希望文章能够帮你解决《一对多新增数据》所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复