【小白求助】为啥ideaMVC项目连接mysql一直卡在getConnection

[复制链接]
查看11 | 回复10 | 2021-1-27 05:19:55 | 显示全部楼层 |阅读模式
【小白求助】idea右侧database连接mysql成功,mysql驱动加载成功,url用户名密码正确但getConnection就是进不去
工具:idea、mysql
模式:jsp+servlet+javabean
思路:index为登录页面,插入js判断跳转到用户/管理员处理页面,userLogin_result调用userDAO检验账号密码,userDAO调用ConnDB获取数据库连接
项目结构:

以下是源码
index.jsp


登录界面


图书管理系统




普通用户


管理员







script.js
functionlogin(){
if(form1.id.value===''){
alert('账号不能为空!');
returnfalse;
}
elseif(form1.password.value===''){
alert('密码不能为空!');
returnfalse;
}
else{
if(form1.type.value==='users')
form1.action="/servlet/userLogin_result";
else
form1.action="/servlet/adminLogin_result";
}
form1.submit();
}
window.onload=function(){
vari3=document.getElementsByClassName('input_3');
for(vari=0;i
userLogin_result.java
packageservlet;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importjavax.servlet.http.HttpSession;
importjava.io.IOException;
importDAO.UserDao;
publicclassuserLogin_resultextendsHttpServlet{
protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException{
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
UserDaouser=newUserDao();
StringId=request.getParameter("id");
StringPassword=request.getParameter("password");
intid=Integer.parseInt(Id);
intpassword=Integer.parseInt(Password);
try{
if(user.checkAccount(id,password)){
response.sendRedirect("../user.jsp");
}
else{
response.sendRedirect("../index.jsp");
}
}catch(Exceptione){
e.printStackTrace();
}
}
}
UserDao.java
packageDAO;
importjava.sql.*;
importcom.arvin.db.ConnDB;
publicclassUserDao{
Connectionconn=null;
ConnDBdb=newConnDB();
//检验账号密码是否相匹配
publicbooleancheckAccount(intid,intpassword)throwsException{
ConnDB.getConnection();
Stringsql="SELECTU_PASSWORDFROMUSERWHEREID=?";
PreparedStatementps=conn.prepareStatement(sql);
ps.setInt(1,id);
ResultSetrs=ps.executeQuery();
ps.close();
ConnDB.closeDb();
returnpassword==rs.getInt("u_password");
}
}

ConnDB.java
packagecom.arvin.db;
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.ResultSet;
importjava.sql.Statement;
importjava.util.Properties;
publicclassConnDB{
//数据库的用户名和密码
publicstaticStringusername="root";
publicstaticStringpassword="1999";
//获得连接对象,statement对象和结果集
publicstaticConnectionconn=null;
publicstaticStatementstate=null;
publicstaticResultSetrs=null;
//数据库驱动,在刚开始下载的文件中
publicstaticStringdriver_class="com.mysql.cj.jdbc.Driver";
//oilServer是数据库名,其他的不变
publicstaticStringurl="jdbc:mysql://localhost:3306/booksystem?serverTimezone=GMT";

//获得数据库的连接的方法
publicstaticConnectiongetConnection(){
try{
Class.forName(driver_class);//指定连接类型
System.out.println("loaddbdriversuccess......");
Propertiesinfo=newProperties();
info.setProperty("user",username);//
info.setProperty("password",password);
conn=DriverManager.getConnection(url,info);//获取连接
System.out.println("getdbconnectionsuccess....");
}catch(Exceptione){
e.printStackTrace();
}
returnconn;
}

//执行数据库的查询操作,返回的为结果集
publicstaticResultSetexcuteQuery(Stringsql){
try{
state=conn.createStatement();
rs=state.executeQuery(sql);
returnrs;
}catch(Exceptione){
e.printStackTrace();
}
returnrs;
}

//关闭数据库
publicstaticvoidcloseDb(){
try{
if(rs!=null)
rs.close();
if(conn!=null)
conn.close();
if(state!=null)
state.close();
}catch(Exceptione){
e.printStackTrace();
}
}
}

index填写表单选择普通用户登录后显示error500

mysql数据库驱动加载成功:

但tomcat日志没有显示getdbconnectionsuccess....,说明应该是卡在了获取连接阶段
已知url用户名密码确认无误
请教各位大神这究竟是哪里出了问题?

分 -->
回复

使用道具 举报

千问 | 2021-1-27 05:19:55 | 显示全部楼层
不用这样写代码,之间用jdbcTemplate去搞,简单多了,你不用管这些链接。
回复

使用道具 举报

千问 | 2021-1-27 05:19:55 | 显示全部楼层
引用楼主qq_42188444的回复:【小白求助】idea右侧database连接mysql成功,mysql驱动加载成功,url用户名密码正确但getConnection就是进不去
工具:idea、mysql
模式:jsp+servlet+javabean
思路:index为登录页面,插入js判断跳转到用户/管理员处理页面,userLogin_result调用userDAO检验账号密码,userDAO调用ConnDB获取数据库连接
项目结构:

index填写表单选择普通用户登录后显示error500
mysql数据库驱动加载成功:
但tomcat日志没有显示getdbconnectionsuccess....,说明应该是卡在了获取连接阶段
已知url用户名密码确认无误
请教各位大神这究竟是哪里出了问题?

我是没看懂
conn=DriverManager.getConnection(url,info);//获取连接这句是在干么,你已经有username和password了,为什么不直接用
conn=DriverManager.getConnection(url,username,passowrd);

回复

使用道具 举报

千问 | 2021-1-27 05:19:55 | 显示全部楼层
而且ConnDB里全是静态方法,不要需要
ConnDBdb=newConnDB();初始化后再调用ConnDB.getConnection();这样你初始化写了有什么意义?
回复

使用道具 举报

千问 | 2021-1-27 05:19:55 | 显示全部楼层
直接这样注入
@Autowired
privateJdbcTemplatejdbcTemplate;
然后在查询方法中
@RequestMapping("list")
publicList>queryList(){
List>list=jdbcTemplate.queryForList("SELECTid,nameFROMtest_db.student",newObject[]{});
returnlist;
}
回复

使用道具 举报

千问 | 2021-1-27 05:19:55 | 显示全部楼层
引用2楼qq_39936465的回复:Quote: 引用楼主qq_42188444的回复:【小白求助】idea右侧database连接mysql成功,mysql驱动加载成功,url用户名密码正确但getConnection就是进不去
工具:idea、mysql
模式:jsp+servlet+javabean
思路:index为登录页面,插入js判断跳转到用户/管理员处理页面,userLogin_result调用userDAO检验账号密码,userDAO调用ConnDB获取数据库连接
项目结构:

index填写表单选择普通用户登录后显示error500
mysql数据库驱动加载成功:
但tomcat日志没有显示getdbconnectionsuccess....,说明应该是卡在了获取连接阶段
已知url用户名密码确认无误
请教各位大神这究竟是哪里出了问题?

我是没看懂
conn=DriverManager.getConnection(url,info);//获取连接这句是在干么,你已经有username和password了,为什么不直接用
conn=DriverManager.getConnection(url,username,passowrd);

开始是直接用的,网上看到别人的这种用法就试试能不能解决问题…
回复

使用道具 举报

千问 | 2021-1-27 05:19:55 | 显示全部楼层
你UserDao.java有问题,都没赋值给conn,要么你直接用ConnDB的静态conn值,程序要规范点,静态写了不用,你设置静态干么还不如不写。
改成下面试试
importjava.sql.*;

publicclassUserDao{
Connectionconn=null;
//检验账号密码是否相匹配
publicbooleancheckAccount(intid,intpassword)throwsException{
conn=ConnDB.getConnection();//这里可以不用
Stringsql="SELECTU_PASSWORDFROMUSERWHEREID=?";
PreparedStatementps=conn.prepareStatement(sql);//或者这里直接用PreparedStatementps=ConnDB.conn.prepareStatement(sql);
ps.setInt(1,id);
ResultSetrs=ps.executeQuery();
ps.close();
ConnDB.closeDb();
returnpassword==rs.getInt("u_password");
}
}


回复

使用道具 举报

千问 | 2021-1-27 05:19:55 | 显示全部楼层
引用5楼qq_42188444的回复:开始是直接用的,网上看到别人的这种用法就试试能不能解决问题…
是你userdao的问题,conn还是空值,没有传递。改为下面就应该可以了。
conn=ConnDB.getConnection();
回复

使用道具 举报

千问 | 2021-1-27 05:19:55 | 显示全部楼层
引用6楼qq_39936465的回复:你UserDao.java有问题,都没赋值给conn,要么你直接用ConnDB的静态conn值,程序要规范点,静态写了不用,你设置静态干么还不如不写。
改成下面试试
importjava.sql.*;

publicclassUserDao{
Connectionconn=null;
//检验账号密码是否相匹配
publicbooleancheckAccount(intid,intpassword)throwsException{
conn=ConnDB.getConnection();//这里可以不用
Stringsql="SELECTU_PASSWORDFROMUSERWHEREID=?";
PreparedStatementps=conn.prepareStatement(sql);//或者这里直接用PreparedStatementps=ConnDB.conn.prepareStatement(sql);
ps.setInt(1,id);
ResultSetrs=ps.executeQuery();
ps.close();
ConnDB.closeDb();
returnpassword==rs.getInt("u_password");
}
}


试了还是报错500
回复

使用道具 举报

千问 | 2021-1-27 05:19:55 | 显示全部楼层
会不会跟mysql版本过高以致于没有兼容部分jar包?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行