将JSP页面连接到本地MySQL数据库的问题:错误的数据库名称

时间:2017-06-02 13:39:47

标签: java mysql jsp

我的项目目前包含一组本地托管的JSP页面,这些页面连接到mySQL数据库,也是本地的。

我正在尝试验证使用数据库进入网站的用户。然而问题在于联系。

在验证JSP页面中,我有这段代码:

<%
    Connection connection = null;
    Statement statement = null;
    ResultSet resultSet = null;

    String server = "jdbc:mysql://localhost:3306/";
    String database = "my_db";
    String user = "user";
    String pass = "password";

    try {


        MysqlDataSource dataSource = new MysqlDataSource();
        dataSource.setUser(user);
        dataSource.setPassword(pass);
        dataSource.setServerName(server);
        dataSource.setDatabaseName(database);
        connection = dataSource.getConnection();

        //Class.forName("com.mysql.jdbc.Driver").newInstance();
        //connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/?user=user&password=password");

        //Class.forName("com.mysql.jdbc.Driver").newInstance();
        //connection = DriverManager.getConnection(server/*+database*/+"?user="+user+"&password="+pass);

        //DriverManager.registerDriver(new com.mysql.jdbc.Driver());
        //connection=DriverManager.getConnection(server/*+database*/,user,pass);

        if(!connection.isClosed()){
            //do stuff
        }
    }catch(Exception ex){
        out.println("Cannot connect to database.<br>"+ex);
    }finally{//Release Resources
        if(resultSet!=null){
            try{resultSet.close();}catch(SQLException sqlEx){}
            resultSet = null;
        }

        if(statement != null){
            try{statement.close();}catch(SQLException sqlEx){}
            statement = null;
        }

        if(!connection.isClosed()){
            try{connection.close();}catch(SQLException sqlEx){}
            connection = null;
        }
    }
%>

我尝试了各种连接方法,但似乎都没有。

第一个(Datasource,不在评论中)用java.lang.NullPointerException命中我。页面输出:http://prntscr.com/ff37x9

第二个(单String DriverManager个连接)连接,但不识别数据库。但是,当我添加my_db时,它告诉我它没有找到任何名为&#34; my_db&#34;的数据库。

第三和第四与第二个相同。

我无法理解发生了什么故障。我应该注意别的吗?

编辑:仅对此页面需要连接,因为站点的其余部分是通过Java的session对象进行管理

感谢您的时间。

3 个答案:

答案 0 :(得分:0)

通常通过JNDI为JEE应用程序配置数据源。

您可以查看this topic

如果您没有机会编写Java代码或使用JNDI并且只能使用JSP,请至少考虑使用JSTL Tag库进行SQL。

您可以配置数据源并执行以下示例中的操作:

<%@ page import = "java.io.*,java.util.*,java.sql.*"%>
<%@ page import = "javax.servlet.http.*,javax.servlet.*" %>
<%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c"%>
<%@ taglib uri = "http://java.sun.com/jsp/jstl/sql" prefix = "sql"%>

<html>
   <head>
      <title>JSTL sql:query Tag</title>
   </head>

   <body>
      <sql:setDataSource var = "snapshot" driver = "com.mysql.jdbc.Driver"
         url = "jdbc:mysql://localhost/TEST"
         user = "root"  password = "pass123"/>

         <sql:query dataSource = "${snapshot}" var = "result">
            SELECT * from Employees;
         </sql:query>

      <table border = "1" width = "100%">
         <tr>
            <th>Emp ID</th>
            <th>First Name</th>
            <th>Last Name</th>
            <th>Age</th>
         </tr>

         <c:forEach var = "row" items = "${result.rows}">
            <tr>
               <td> <c:out value = "${row.id}"/></td>
               <td> <c:out value = "${row.first}"/></td>
               <td> <c:out value = "${row.last}"/></td>
               <td> <c:out value = "${row.age}"/></td>
            </tr>
         </c:forEach>
      </table>

   </body>
</html> 

您唯一需要的是将JSTL标记库添加到您的应用程序类路径中,例如将JSTL jar放到您拥有MySQL驱动程序jar的同一文件夹中。

答案 1 :(得分:0)

尝试这种方式直接在URL连接上获取与数据库的连接

String driver = "com.mysql.jdbc.Driver";
String connection = "jdbc:mysql://localhost:3306/YourDBName";
String user = "root";
String password = "root";
Class.forName(driver);
Connection con = DriverManager.getConnection(connection, user, password);

答案 2 :(得分:0)

非常感谢@Krismorte的帮助。

可以通过在Workbench中键入SELECT DATABASES;来找到数据库名称。

我使用的架构与我需要访问的数据库名称相同。

MySQL Workbench PrintScreen

这是'dip_db_schm'

在我的情况下,连接子句将是:

connection=DriverManager. getConnection("jdbc:mysql://localhost:3306/dip_db_schm","user","password");