sqlSessionFactory初始化报错
登录时报错
严重: Servlet.service() for servlet [LoginServlet] in context with path [] threw exception [Servlet execution threw an exception] with root cause
java.lang.StringIndexOutOfBoundsException: String index out of range: 24
at java.lang.String.charAt(String.java:658)
at org.apache.ibatis.builder.ParameterExpression.trimmedStr(ParameterExpression.java:131)
at org.apache.ibatis.builder.ParameterExpression.option(ParameterExpression.java:124)
at org.apache.ibatis.builder.ParameterExpression.jdbcTypeOpt(ParameterExpression.java:99)
at org.apache.ibatis.builder.ParameterExpression.property(ParameterExpression.java:70)
at org.apache.ibatis.builder.ParameterExpression.parse(ParameterExpression.java:47)
at org.apache.ibatis.builder.ParameterExpression.<init>(ParameterExpression.java:39)
。。。
at com.imooc.canvas.servlet.MyBatisUtils.<clinit>(MyBatisUtils.java:20)
at com.imooc.canvas.service.UserService.login(UserService.java:22)
at com.imooc.canvas.servlet.LoginServlet.service(LoginServlet.java:25)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
MyBatisUtils类为:
package com.imooc.canvas.servlet;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.Reader;
public class MyBatisUtils {
private static SqlSessionFactory sqlSessionFactory;
private static Reader reader;
static {
try {
String resource = "config.xml";
reader = Resources.getResourceAsReader(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession openSession(){
return sqlSessionFactory.openSession();
}
}config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="jdbc.properties"/>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<package name="com.imooc.canvas.mapper"/>
</mappers>
</configuration>jdbc.properties
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/canvas?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true username=root password=123465
之前没有这种情况的
正在回答 回答被采纳积分+1
后来我试着绕过登录依然报错
Servlet.service() for servlet [CanvasServlet] in context with path [] threw exception [Servlet execution threw an exception] with root cause
java.lang.NoClassDefFoundError: Could not initialize class com.imooc.canvas.servlet.MyBatisUtils
at com.imooc.canvas.service.CanvasService.getCanvas(CanvasService.java:14)
at com.imooc.canvas.servlet.CanvasServlet.service(CanvasServlet.java:41)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
CanvasService类
package com.imooc.canvas.service;
import com.imooc.canvas.entity.Canvas;
import com.imooc.canvas.mapper.CanvasMapper;
import com.imooc.canvas.servlet.MyBatisUtils;
import org.apache.ibatis.session.SqlSession;
import java.util.Date;
import java.util.List;
public class CanvasService {
public List<Canvas> getCanvas(Integer page, Integer size){
SqlSession sqlSession = MyBatisUtils.openSession();
try{
CanvasMapper mapper = sqlSession.getMapper(CanvasMapper.class);
return mapper.getCanvas((page-1)*size,size);
}finally {
sqlSession.close();
}
}
public List<Canvas> getCanvasByCategoryId(Long categoryId, Integer page, Integer size){
SqlSession sqlSession = MyBatisUtils.openSession();
try{
CanvasMapper mapper = sqlSession.getMapper(CanvasMapper.class);
return mapper.getCanvasByCategoryId(categoryId,(page-1)*size,size);
}finally {
sqlSession.close();
}
}
public void addCanvas(Canvas canvas){
Date now = new Date();
canvas.setCreateTime(now);
canvas.setUpdateTime(now);
SqlSession sqlSession = MyBatisUtils.openSession();
try{
CanvasMapper mapper = sqlSession.getMapper(CanvasMapper.class);
mapper.addCanvas(canvas);
sqlSession.commit();
}finally {
sqlSession.close();
}
}
public void delete(Long id){
SqlSession sqlSession = MyBatisUtils.openSession();
try {
CanvasMapper mapper = sqlSession.getMapper(CanvasMapper.class);
mapper.delCanvas(id);
sqlSession.commit();
}finally {
sqlSession.close();
}
}
public int countCanvasByCategoryId(Long categoryId){
SqlSession sqlSession = MyBatisUtils.openSession();
try{
CanvasMapper mapper = sqlSession.getMapper(CanvasMapper.class);
return mapper.countCakesByCategoryId(categoryId);
}finally {
sqlSession.close();
}
}
public Canvas getCanvasImg(Long id){
SqlSession sqlSession = MyBatisUtils.openSession();
try{
CanvasMapper mapper = sqlSession.getMapper(CanvasMapper.class);
return mapper.getImg(id);
}finally {
sqlSession.close();
}
}
public Canvas getCanvasById(Long id){
SqlSession sqlSession = MyBatisUtils.openSession();
try{
CanvasMapper mapper = sqlSession.getMapper(CanvasMapper.class);
return mapper.getCanvasById(id);
}finally {
sqlSession.close();
}
}
public void updateCanvas(Canvas canvas){
SqlSession sqlSession = MyBatisUtils.openSession();
Date now = new Date();
canvas.setUpdateTime(now);
try{
CanvasMapper mapper = sqlSession.getMapper(CanvasMapper.class);
mapper.updateCanvas(canvas);
sqlSession.commit();
}finally {
sqlSession.close();
}
}
}所以我想是不是
reader = Resources.getResourceAsReader(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
这个环节出问题了?望老师解答
- 参与学习 人
- 提交作业 277 份
- 解答问题 4297 个
Java数据库开发的必备技能,从流行的MySQL数据库开始,到Java原生的数据库管理接口JDBC的使用,再到常用的数据持久化框架MyBatis,让你向Java工程师的目标又迈进了一步!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星