今天在执行插入操作的时候,出现了问题(看业务层,明明没有插入成功,但是result却改变了),但在查询的时候很正常
private static DruidDataSource ds;
private static ThreadLocal<Connection> THREAD_LOCAL = new ThreadLocal();
static {
Properties properties = new Properties();
InputStream inputStream = DbUtils.class.getResourceAsStream("../database.properties");
try {
properties.load(inputStream);
ds = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
e.printStackTrace();
}
}
public static Connection getConnection() {
Connection connection = THREAD_LOCAL.get();
try {
if (connection == null) {
connection = ds.getConnection();
THREAD_LOCAL.set(connection);
}
} catch (SQLException e) {
e.printStackTrace();
}
return connection;
}
public static void begin() {
Connection connection = null;
try {
connection = getConnection();
connection.setAutoCommit(false);
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void commit() {
Connection connection = null;
try {
connection = getConnection();
connection.commit();
} catch (SQLException e) {
e.printStackTrace();
} finally {
closeAll(connection, null, null);
}
}
public static void rollback() {
Connection connection = null;
try {
connection = getConnection();
connection.rollback();
} catch (SQLException e) {
e.printStackTrace();
} finally {
closeAll(connection, null, null);
}
}
public static void closeAll(Connection connection, Statement statement, ResultSet resultSet) {
try {
if (resultSet != null) {
resultSet.close();
}
if (statement != null) {
statement.close();
}
if (connection != null) {
connection.close();
THREAD_LOCAL.remove();
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
controller
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
String username = request.getParameter("username");
String password = request.getParameter("password");
System.out.println("username="+username+"password"+password);
User user=new User(null,username,password,null);
UserregisterService userregisterService=new UserregisterServiceImpl();
userregisterService.register(user);
// 登陆成功
response.sendRedirect("main.jsp");
}
service层
public class UserregisterServiceImpl implements UserregisterService {
private userDao userDao = new userDaoImpl();
@Override
public int register(User user) {
int result = 0;
try {
DbUtils.begin();
System.out.println("数据到了这里");
result = userDao.insert(user);
if (result>0){
System.out.println("插入成功啦");
return result;
}
DbUtils.commit();
} catch (Exception e) {
DbUtils.rollback();
e.printStackTrace();
}
return result;
}
}
dao层
public int insert(User user) {
try {
int result= queryRunner.update(DbUtils.getConnection(), "insert into ai_user(userName,userPassword) values (?,?);",user.getUserName(),user.getUserPassword());
return result;
} catch (SQLException e) {
e.printStackTrace();
}
return 0;
}
报错原因是MySQL在高版本需要指明是否进行SSL连接
需要加上 useSSL=false
e.g.
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/aiboxdemo?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
username=root
password=root
initialSize=10
maxActive=20
minIdle=5
maxWait=1800