我将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,这样去插入数据就会报错

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~
好帮手慕柯南
2019-12-06
同学你好!
1.你在 bookbiz.add(bookList);之前打印输出一下bookList,看数据是否正确

2.如果没有问题,建议将编译生成的target文件删除一下,重新启动测试一下
如果我的回答解决了你的疑惑,请采纳,祝学习愉快~
好帮手慕柯南
2019-12-06
同学你好!
你的sql是没有问题的,但是报错信息说参数设置错误,老师猜测可能是同学的时间类型出现的问题。
建议你先将插入语句的日期字段删除,测试一下能够正常的插入
素材中给出的日期格式是Timestamp,因此建议你在book类中的日期类型也写为Timestamp
比如:

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