Reputation: 10777
I am trying to learn the database connection in jsp page. Here is my code:
This is my servlet:
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.println("servlet");
String username=request.getParameter("username"), password=request.getParameter("password");
out.println("Username: "+username+" Password: "+password);
CheckUser(username,password);
}
protected void CheckUser(String username, String password)
{
dbConnect.connect();
}
And here is my dbConnect class:
import java.sql.DriverManager;
import com.mysql.jdbc.Connection;
public class dbConnect {
static String dbUrl="jdbc:mysql://localhost:3306/Bank";
String username="root";
String password="";
static Connection con=null;
public static void connect()
{
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
con=(Connection) DriverManager.getConnection(dbUrl);
System.out.println("Connected!");
}
catch (Exception e) {
System.out.println("not connected");
}
}
}
The problem is, in connect() function, when it comes to the line Class.forName("com.mysql.jdbc.Driver").newInstance(); it produces an error and enters the catch block. What is wrong here can anyone help? Thanks.
Edit: I did what Nambari said, now i get the error in the line con=(Connection) DriverManager.getConnection(dbUrl); and here is the exception:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Access denied for user ''@'localhost' to database 'bank'
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:353)
at com.mysql.jdbc.Util.getInstance(Util.java:336)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1031)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2938)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:855)
at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:3337)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1217)
at com.mysql.jdbc.Connection.createNewIO(Connection.java:1930)
at com.mysql.jdbc.Connection.<init>(Connection.java:716)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:353)
at com.mysql.jdbc.Connection.getInstance(Connection.java:295)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:207)
at dbConnect.connect(dbConnect.java:18)
at loginServlet.CheckUser(loginServlet.java:41)
at loginServlet.service(loginServlet.java:36)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:662)
not connected
Upvotes: 0
Views: 5104
Reputation: 14187
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Access denied for user ''@'localhost' to database 'bank'
Indicates that your parameters for connecting to mysql
are wrong. Please check the user
, password
, host
and driver
parameters.
Upvotes: 1
Reputation: 85779
Replace e.printStacktrace();
instead of your naive System.out.println();
to see the errors and the messages about how to solve them. By the way, looks like you're missing the database connectivity jar (in this case, the jar to connect to MySQL), this jar and other third party libraries should go in WEB-INF/lib directory.
For your second error, you forgot to use your user
and password
variables. Just change it to
con=(Connection) DriverManager.getConnection(dbUrl, user, password);
Note that you can get rid of all these problems if you use a database connection pool. Refer to Is it a good idea to put jdbc connection code in servlet class? to learn the best way to handle the database connection.
Upvotes: 1
Reputation: 66637
Class.forName("com.mysql.jdbc.Driver").newInstance(); it produces an error and enters the catch block.
Based on this information my guess is your mysql.jar
is not in runtime classpath.
Upvotes: 1