我将bookbiz。add(bookList)放入for循环里边就出现这样的错误

来源:5-2 项目作业

Mr__Gao

2019-12-06 11:07:37

我的BookController

package com.imooc.library.controller;

import com.imooc.library.biz.Bookbiz;
import com.imooc.library.biz.CategoryBiz;
import com.imooc.library.biz.impl.BookBizImpl;
import com.imooc.library.biz.impl.CategoryBizImpl;
import com.imooc.library.entity.Book;
import com.imooc.library.entity.Category;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.omg.CORBA.portable.ValueOutputStream;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.math.BigInteger;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;

public class BookController {
    Bookbiz bookbiz=new BookBizImpl();
    CategoryBiz categoryBiz=new CategoryBizImpl();

    // /admin/Book/list.do
    public void list(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        int id=Integer.parseInt(request.getParameter("id"));
        System.out.println(id);
        List<Book> list=bookbiz.getAllByCid(id);
        List<Category> root=categoryBiz.getAll();
        request.setAttribute("root",root);
        request.setAttribute("list",list);
        request.getRequestDispatcher("/WEB-INF/pages/admin/book_list.jsp").forward(request,response);

    }
    // /admin/Book/toAdd.do
    public void toAdd(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
        List<Category> root=categoryBiz.getAll();
        request.setAttribute("root",root);
        request.getRequestDispatcher("/WEB-INF/pages/admin/book_add.jsp").forward(request,response);
    }
    // /admin/Book/add.do
    public void add(HttpServletRequest request,HttpServletResponse response) throws FileUploadException, IOException {

        List<Book> bookList=new ArrayList<Book>();
        FileItemFactory factory=new DiskFileItemFactory();
        ServletFileUpload upload=new ServletFileUpload(factory);
        List<FileItem> list=upload.parseRequest(request);
        int count=0;
        for (FileItem item:list){
            count++;
            Book book=new Book();
            if (item.isFormField()){

                if (item.getFieldName().equals("name")){
                    book.setName(item.getString("UTF-8"));
                    System.out.println(book.getName());
                }
                if (item.getFieldName().equals("categoryId")){
                    book.setCid(Integer.parseInt(item.getString("UTF-8")));
                }
                if (item.getFieldName().equals("level")){
                    book.setLevel(Integer.parseInt(item.getString("UTF-8")));
                }
                if (item.getFieldName().equals("price")){
                    book.setPrice(Integer.parseInt(item.getString("UTF-8")));
                }

            }else {
                if (item.getFieldName().equals("smallImg")) {
                    if (item.getSize() <= 100) {
                        continue;
                    }
                } else {
                    String rootPath = request.getServletContext().getRealPath("/");
                    String path = item.getName();
                    String type = ".jpg";
                    if (path.indexOf(".") != -1) {
                        type = path.substring(path.lastIndexOf("."));

                    }
                    path = "/download/images/" + System.currentTimeMillis() + type;
                    try {
                        item.write(new File(rootPath + path));
                        book.setImgPath(path);
                        book.setCreateTime(new Timestamp(System.currentTimeMillis()));
                        book.setUpdateTime(new Timestamp(System.currentTimeMillis()));
                        System.out.println(book);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }

            }
            if (count%5==0){
                  bookList.add(book);
                  book=new Book();
                  count=0;
            }
            bookbiz.add(bookList);
        }

        response.sendRedirect("/WEB-INF/pages/admin/Category/list.do");
    }
}

我的bookDao

package com.imooc.library.dao;

import com.imooc.library.entity.Book;
import org.apache.ibatis.annotations.*;

import java.util.List;

public interface BookDao {

    @Insert("<script>" +
            "insert into book(cid,name,level,price,img_path,create_time,update_time)values" +
            "<foreach collection='list' item='book' separator=','>" +
            "(#{book.cid},#{book.name},#{book.level},#{book.price},#{book.imgPath},#{book.createTime},#{book.updateTime})" +
            "</foreach>" +
            "</script>")
    @Options(useGeneratedKeys = true,keyProperty = "id")
    void bathInsert(List<Book> list);
    @Select("select b.*,c.name cname from book b left join category c on b.cid=c.id where b.cid=#{id}")
    @Results({
            @Result(column = "id",property = "id",id = true),
            @Result(column = "cid",property = "cid"),
            @Result(column = "canme" ,property = "category.name"),
            @Result(column = "name",property = "name"),
            @Result(column = "level",property = "level"),
            @Result(column = "price",property = "price"),
            @Result(column = "img_path",property = "imgPath"),
            @Result(column = "create_time",property = "createTime"),
            @Result(column = "update_time",property = "updateTime"),
    })
    List<Book> selectAllByCid(int id);


}

错误提示

D:\java\apache-tomcat-8.5.43\bin\catalina.bat run
[2019-12-06 11:02:09,742] Artifact library:war exploded: Waiting for server connection to start artifact deployment...
Using CATALINA_BASE:   "C:\Users\Administrator.USER-20190331YS\.IntelliJIdea2019.2\system\tomcat\Unnamed_library"
Using CATALINA_HOME:   "D:\java\apache-tomcat-8.5.43"
Using CATALINA_TMPDIR: "D:\java\apache-tomcat-8.5.43\temp"
Using JRE_HOME:        "C:\Program Files\Java\jdk1.8.0_101"
Using CLASSPATH:       "D:\java\apache-tomcat-8.5.43\bin\bootstrap.jar;D:\java\apache-tomcat-8.5.43\bin\tomcat-juli.jar"
Connected to the target VM, address: '127.0.0.1:60903', transport: 'socket'
06-Dec-2019 11:02:10.762 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Server version:        Apache Tomcat/8.5.43
06-Dec-2019 11:02:10.778 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Server built:          Jul 4 2019 20:53:15 UTC
06-Dec-2019 11:02:10.778 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Server number:         8.5.43.0
06-Dec-2019 11:02:10.778 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name:               Windows 7
06-Dec-2019 11:02:10.778 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version:            6.1
06-Dec-2019 11:02:10.778 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture:          amd64
06-Dec-2019 11:02:10.778 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home:             C:\Program Files\Java\jdk1.8.0_101\jre
06-Dec-2019 11:02:10.778 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version:           1.8.0_101-b13
06-Dec-2019 11:02:10.778 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor:            Oracle Corporation
06-Dec-2019 11:02:10.778 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE:         C:\Users\Administrator.USER-20190331YS\.IntelliJIdea2019.2\system\tomcat\Unnamed_library
06-Dec-2019 11:02:10.778 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME:         D:\java\apache-tomcat-8.5.43
06-Dec-2019 11:02:10.778 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=C:\Users\Administrator.USER-20190331YS\.IntelliJIdea2019.2\system\tomcat\Unnamed_library\conf\logging.properties
06-Dec-2019 11:02:10.778 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
06-Dec-2019 11:02:10.778 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:60903,suspend=y,server=n
06-Dec-2019 11:02:10.778 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -javaagent:C:\Users\Administrator.USER-20190331YS\.IntelliJIdea2019.2\system\captureAgent\debugger-agent.jar
06-Dec-2019 11:02:10.778 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote=
06-Dec-2019 11:02:10.778 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote.port=1099
06-Dec-2019 11:02:10.778 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote.ssl=false
06-Dec-2019 11:02:10.778 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote.password.file=C:\Users\Administrator.USER-20190331YS\.IntelliJIdea2019.2\system\tomcat\Unnamed_library\jmxremote.password
06-Dec-2019 11:02:10.778 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote.access.file=C:\Users\Administrator.USER-20190331YS\.IntelliJIdea2019.2\system\tomcat\Unnamed_library\jmxremote.access
06-Dec-2019 11:02:10.778 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.rmi.server.hostname=127.0.0.1
06-Dec-2019 11:02:10.778 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
06-Dec-2019 11:02:10.778 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
06-Dec-2019 11:02:10.778 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dignore.endorsed.dirs=
06-Dec-2019 11:02:10.778 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=C:\Users\Administrator.USER-20190331YS\.IntelliJIdea2019.2\system\tomcat\Unnamed_library
06-Dec-2019 11:02:10.793 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=D:\java\apache-tomcat-8.5.43
06-Dec-2019 11:02:10.793 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=D:\java\apache-tomcat-8.5.43\temp
06-Dec-2019 11:02:10.793 信息 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent Loaded APR based Apache Tomcat Native library [1.2.23] using APR version [1.7.0].
06-Dec-2019 11:02:10.793 信息 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
06-Dec-2019 11:02:10.793 信息 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true]
06-Dec-2019 11:02:10.793 信息 [main] org.apache.catalina.core.AprLifecycleListener.initializeSSL OpenSSL successfully initialized [OpenSSL 1.1.1c  28 May 2019]
06-Dec-2019 11:02:10.918 信息 [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]
06-Dec-2019 11:02:10.934 信息 [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read
06-Dec-2019 11:02:10.950 信息 [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["ajp-nio-8009"]
06-Dec-2019 11:02:10.965 信息 [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read
06-Dec-2019 11:02:10.965 信息 [main] org.apache.catalina.startup.Catalina.load Initialization processed in 598 ms
06-Dec-2019 11:02:10.997 信息 [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]
06-Dec-2019 11:02:10.997 信息 [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet Engine: Apache Tomcat/8.5.43
06-Dec-2019 11:02:11.012 信息 [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
06-Dec-2019 11:02:11.028 信息 [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-8009"]
06-Dec-2019 11:02:11.028 信息 [main] org.apache.catalina.startup.Catalina.start Server startup in 66 ms
Connected to server
[2019-12-06 11:02:11,481] Artifact library:war exploded: Artifact is being deployed, please wait...
06-Dec-2019 11:02:12.778 信息 [RMI TCP Connection(5)-127.0.0.1] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
[2019-12-06 11:02:12,856] Artifact library:war exploded: Artifact is deployed successfully
[2019-12-06 11:02:12,856] Artifact library:war exploded: Deploy took 1,375 milliseconds
1
06-Dec-2019 11:02:21.012 信息 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [D:\java\apache-tomcat-8.5.43\webapps\manager]
06-Dec-2019 11:02:21.262 信息 [localhost-startStop-1] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
06-Dec-2019 11:02:21.262 信息 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [D:\java\apache-tomcat-8.5.43\webapps\manager] has finished in [250] ms
java
java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.imooc.library.global.GlobalController.service(GlobalController.java:46)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at com.imooc.library.global.EncodingFilter.doFilter(EncodingFilter.java:23)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:660)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:798)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:808)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.ibatis.exceptions.PersistenceException: 
### Error updating database.  Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
### The error may exist in com/imooc/library/dao/BookDao.java (best guess)
### The error may involve com.imooc.library.dao.BookDao.bathInsert-Inline
### The error occurred while setting parameters
### SQL: insert into book(cid,name,level,price,img_path,create_time,update_time)values
### Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
	at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:199)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:184)
	at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:62)
	at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:93)
	at com.sun.proxy.$Proxy16.bathInsert(Unknown Source)
	at com.imooc.library.biz.impl.BookBizImpl.add(BookBizImpl.java:17)
	at com.imooc.library.controller.BookController.add(BookController.java:106)
	... 30 more
Caused by: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
	at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
	at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953)
	at com.mysql.cj.jdbc.ClientPreparedStatement.execute(ClientPreparedStatement.java:370)
	at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:47)
	at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:74)
	at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50)
	at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117)
	at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:197)
	... 36 more


写回答

3回答

好帮手慕柯南

2019-12-06

同学你好!

你应该将网数据库中添加的语句放在if语句中,否则第一次循环时,由于if语句不成立,此时bookList为null,这样去插入数据就会报错

http://img.mukewang.com/climg/5dea2323091698f408010292.jpg

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~

0

好帮手慕柯南

2019-12-06

同学你好!

1.你在 bookbiz.add(bookList);之前打印输出一下bookList,看数据是否正确

http://img.mukewang.com/climg/5dea0ef909b4ea7b06300254.jpg

2.如果没有问题,建议将编译生成的target文件删除一下,重新启动测试一下

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~

0
hr__Gao
h 老师,这里的bookList显示为空
h019-12-06
共1条回复

好帮手慕柯南

2019-12-06

同学你好!

你的sql是没有问题的,但是报错信息说参数设置错误,老师猜测可能是同学的时间类型出现的问题。

  1. 建议你先将插入语句的日期字段删除,测试一下能够正常的插入

  2. 素材中给出的日期格式是Timestamp,因此建议你在book类中的日期类型也写为Timestamp
    比如:

    http://img.mukewang.com/climg/5dea05da09d61ea605750296.jpg

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~

0
hr__Gao
h 老师,我删除和改了这个后,还是显示这样的错误。
h019-12-06
共1条回复

0 学习 · 8016 问题

查看课程