我正在尝试从Java Web项目中的MySQL数据库中进行简单的选择。
我已启动并在localhost上运行MySQL。我有一个名为" lab"和一个名为" lab_user"有1条记录:
问题在于每次我尝试从程序中选择这一行时,都会收到错误消息,表示该表不存在。所以我相信我的DB配置可能有问题。
下面你可以找到我的代码,我的web.XML和我的context.XML。
请您帮我查一下这里是否有任何错误导致我无法访问正确的数据库?
谢谢你
码
package DAO;
import java.sql.*;
import javax.naming.*;
import javax.sql.*;
import DTO.UserDTO;
public class UserDAO {
private Connection connection = null;
private Statement statement = null;
private PreparedStatement prepStatement = null;
private ResultSet results = null;
private static final String DATASOURCE_NAME = "java:comp/env/jdbc/lab";
public void getConnection() {
if (connection == null) {
try {
Context initialContext = new InitialContext();
DataSource ds = (DataSource) initialContext.lookup(DATASOURCE_NAME);
connection = ds.getConnection();
} catch (NamingException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public UserDTO selectUser(String userID) {
//pessoal
String id = "";
String name = "";
try {
getConnection();
statement = connection.createStatement();
results = statement.executeQuery("select * from lab_user where user_id = 1");
if (results != null) {
results.next();
id = results.getString("id");
name = results.getString("name");
}
results = null;
///
} catch (SQLException e) {
String error = "" + e;
e.printStackTrace();
} finally {
cleanUp();
}
results = null;
UserDTO uDTO = new UserDTO();
uDTO.setName(name);
uDTO.setID(id);
return uDTO;
}
WEB.XML
<description>DB Connection</description>
<res-ref-name>jdbc/lab</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
context.xml中
<Context>
<Resource auth="Container" driverClassName="com.mysql.jdbc.Driver" maxActive="30" maxIdle="100" maxWait="10000" name="labDB" password="hacking" type="javax.sql.DataSource" url="jdbc:mysql://localhost:3306/lab?zeroDateTimeBehavior=convertToNull" username="fabio"/>
</Context>
错误:java.sql.SQLSyntaxErrorException:Table / View&#39; LAB_USER&#39;不存在。
答案 0 :(得分:0)
我在上下文中看不到name
属性。它应该是这样的:
<Context>
<Resource name="jdbc/lab" auth="Container" driverClassName="com.mysql.jdbc.Driver" maxActive="30" maxIdle="100" maxWait="10000" name="labDB" password="hacking" type="javax.sql.DataSource" url="jdbc:mysql://localhost:3306/lab?zeroDateTimeBehavior=convertToNull" username="fabio"/>
</Context>
否则,应用程序无法访问已定义的数据源。
答案 1 :(得分:0)
如果您查看代码:
id = results.getString("id");
name = results.getString("name");
列名称错误:它们是user_id和user_name。我不知道为什么错误信息是关于表名的。
令人惊讶的是,这些小事让我们花了一天的时间进行调查。
干杯