我的项目目前包含一组本地托管的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
对象进行管理
感谢您的时间。
答案 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;
来找到数据库名称。
我使用的架构与我需要访问的数据库名称相同。
这是'dip_db_schm'
在我的情况下,连接子句将是:
connection=DriverManager.
getConnection("jdbc:mysql://localhost:3306/dip_db_schm","user","password");