【问题标题】:MySQL JDBC Web Program: error in DB configMySQL JDBC Web 程序:数据库配置错误
【发布时间】:2015-08-13 20:18:46
【问题描述】:

我正在尝试从 Java Web 项目中的 MySQL 数据库中进行简单的选择。

我在本地主机上启动并运行了 MySQL。我有一个名为“lab”的数据库和一个名为“lab_user”的表,其中包含 1 条记录:

问题是每次我尝试从程序中选择这 1 行时,都会收到一条错误消息,指出该表不存在。所以我相信我的数据库配置可能有问题。

您可以在下面找到我的代码、我的 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>

上下文.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:表/视图“LAB_USER”不存在。

【问题讨论】:

  • 是您发布的代码中的错误消息吗?该错误抱怨LAB_USER,但在代码中你有lab_user
  • @Joni:这应该不是问题,因为在 MySQL 中,表名/字段名/等不区分大小写。
  • @SandorNemeth 表名是否区分大小写取决于文件系统。 dev.mysql.com/doc/refman/5.6/en/…
  • @Joni 感谢手动链接。我在 Unix/OSX/Windows 上工作时从来没有遇到过这种问题。

标签: java mysql netbeans jdbc web


【解决方案1】:

我在上下文中没有看到 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>

否则应用程序无法访问定义的数据源。

【讨论】:

  • 有一个名字。如果您向右滚动,您将看到。我将其命名为“labDB”,因为这是我在 Netbeans 服务中调用数据库连接的方式,但是我只是将其更改为您的建议“jdbc/lab”,但仍然无法正常工作。我有同样的错误信息说表名无效。
  • 是的 .. 没错,但这是应用程序找到它的方式,所以它应该是 jdbc/lab。无论如何...我会尝试从您发布的代码中创建一些示例代码,因为它不明显什么不起作用.. 当我有更多详细信息时会回来
  • 这太棒了,我在等待,因为我仍然无法理解什么不起作用。
  • 嘿再次..抱歉耽搁了,不得不做一些事情..无论如何,你的代码看起来不错,我已经在 github here 上建立了一个测试项目。您应该可以使用它,但它应该可以工作。
【解决方案2】:

如果您查看代码:

   id = results.getString("id");
   name = results.getString("name");

列名错误:它们是 user_id 和 user_name。我不知道为什么错误消息是关于表名的。

这些小事花费了我们一天的调查时间,真是令人惊讶。

干杯

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-28
    • 2012-02-16
    • 1970-01-01
    • 2014-10-24
    • 2011-01-29
    • 1970-01-01
    • 2013-03-30
    • 1970-01-01
    相关资源
    最近更新 更多