写了一个查询数据库的方法,在测试类中可以查询,在servle中调用就会有报错。
import com.xg.jdbcutil.JDBCDBCPConfigUtils;
import com.xg.pojo.User;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.*;
import java.sql.SQLException;
public class Uaerdata {
private static QueryRunner qr = JDBCDBCPConfigUtils.getQueryRunner();
public static int findLogin(User user){
int row=-1;
String sql = "SELECT COUNT(*) FROM user WHERE uname=?";
long count = 0;
try {
count = qr.query(sql, new ScalarHandler<Long>(),user.getUname());
} catch (SQLException throwables) {
System.out.println("这里出错了o");
throwables.printStackTrace();
}
if(count==1){
row=0;
sql = "SELECT COUNT(*) FROM user WHERE uname=? and upassword=?";
try {
count = qr.query(sql, new ScalarHandler<Long>(),user.getUname(),user.getUpassword());
} catch (SQLException throwables) {
System.out.println("bbbbbbbb");
throwables.printStackTrace();
}
if(count==1)row=1;
}
return row;
}
public static void arrayHandler()throws SQLException{
String sql = "SELECT * FROM question_bank";
Object[] result = qr.query( sql, new ArrayHandler());
for(Object obj : result){
System.out.print(obj);
}
System.out.println();
}
}
//测试代码
public class UaerdataText {
public static void main(String[] args) throws SQLException {
User user=new User("cc","123");
int row = Uaerdata.findLogin(user);
System.out.println(row);
}
}
//这里可以成功输出结果,下面就不行了
//因为有报错所以这里就是直接在servlet中写好了方法需要的参数。jsp页面输入不在影响servlet。
public class A_servlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String path1="index.jsp";
//String path2="home.jsp";
String sin="登陆成功,欢迎使用!";
User user=new User();
//new String(req.getParameter("uname").getBytes("iso-8859-1"),"utf-8")
user.setUname(req.getParameter("uname"));
user.setUpassword(req.getParameter("upassword"));
req.setAttribute("user",user);
System.out.println("wwwww");
User user2=new User("cc","123");
int a=0;
a = Uaerdata.findLogin(user2);
switch (a){
case -1:
sin="不存在该用户!";
System.out.println("这里出错了1");
break;
case 0:
System.out.println("2222222222");
sin="密码输入错误!";
break;
case 1:
System.out.println("333333");
path1="home.jsp";
break;
default:
System.out.println("4444444");
sin="请联系客服人员进行反馈,或稍后再次登录!";
System.out.println("数据库查询出现错误");
}
/*try {
switch (Uaerdata.findLogin(user)){
case -1:
sin="不存在该用户!";
System.out.println("111111111");
break;
case 0:
System.out.println("2222222222");
sin="密码输入错误!";
break;
case 1:
System.out.println("333333");
path1="home.jsp";
break;
default:
System.out.println("4444444");
sin="请联系客服人员进行反馈,或稍后再次登录!";
System.out.println("数据库查询出现错误");
}
} catch (SQLException throwables) {
System.out.println("5555555555");
throwables.printStackTrace();
}*/
req.setAttribute("sin",sin);
req.getRequestDispatcher(path1).forward(req,resp);
}
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req,resp);
}
}
jsp页面
index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<div align="center" style="border-top:5px solid #f35d34;width:100%;margin: 0px;">
<form action="\a_servlet" method="post">
账户:<input type="text" name="uname"><br/>
密码:<input type="password" name="upassword"><br/>
<br/><input type="submit" value="登录">
<input type="reset">
</form>
<br/>
${requestScope.sin}
</div>
</body>
</html>
home.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false" %>
<html>
<head>
<title>Title</title>
</head>
<body>
账户:${requestScope.user.uname}
密码:${requestScope.user.upassword}
<br/>
${requestScope.sin}
</body>
</html>
jsp
控制台输出:
wwwww
java.sql.SQLException: Feature not implemented Query: SELECT COUNT(*) FROM user WHERE uname=? Parameters: [cc]
at org.apache.commons.dbutils.AbstractQueryRunner.rethrow(AbstractQueryRunner.java:392)
at org.apache.commons.dbutils.QueryRunner.query(QueryRunner.java:351)
at org.apache.commons.dbutils.QueryRunner.query(QueryRunner.java:289)
at com.xg.data.Uaerdata.findLogin(Uaerdata.java:18)
at com.xg.servlet.A_servlet.doGet(A_servlet.java:27)
at com.xg.servlet.A_servlet.doPost(A_servlet.java:73)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:661)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
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 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:496)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1468)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
这里出错了o
这里出错了1
第一次提问,把三个类的代码写在一起了,影响阅读不好意思
测试类可以成功运行
首先,在测试类中查询没问题,说明不是驱动的问题
另一个,报错提示 查询功能未实现,可能在传入参数的时候出现了一些问题,你可以在
count = qr.query(sql, new ScalarHandler<Long>(),user.getUname())
打上断点debug一下,看传入了那些参数,然后检查query方法
mysql驱动包问题,用的是什么版本的驱动,换新一点版本试试。