首页 > 解决方案 > 在 SQL 中运行的准备好的语句中的语法错误

问题描述

即使我的查询在 SQL Management Studio 中运行,我在准备好的语句中也遇到了语法错误。我正在使用 GlassFish 4.1.1。我究竟做错了什么?

我尝试过稍微切换语法,但总是出错。

这是我的连接池代码:

try {
    InitialContext ic = new InitialContext();
    dataSource = (DataSource) ic.lookup("java:comp/env/" + database);
} catch (Exception ex) {
    ex.printStackTrace();
}

这是我的查询代码:

ConnectionPool pool = new ConnectionPool("BoxPointHAMBURGO");
Connection connection = pool.getConnection();
PreparedStatement ps = null;
ResultSet rs = null;

try {
    String query = "SELECT Tabla FROM BoxPointHAMBURGO.dbo.NombresTablas";

    ps = connection.prepareStatement(query);
    rs = ps.executeQuery();
} catch (Exception ex) {
    System.err.println("Error: " + ex.getMessage());
}

我得到的错误是:

Syntax error: Encountered "." at line 1 column 39.

标签: javasql-serverjdbcprepared-statement

解决方案


根据这个答案,双点..运算符会为当前用于查询的数据库用户生成默认架构。但是,您不应期望 SQL Management Studio 查询语法在使用 JDBC 时会起作用。这是两个完全不同的驱动程序接口,具有不同的限制,JDBC 很可能更具限制性。

您可能应该BoxPointHAMBURGO在建立 JDBC 连接时选择数据库。您必须根据构建连接 URL修改 JDBC URL ,语法为:

jdbc:sqlserver://localhost;databaseName=BoxPointHAMBURGO

然后从 SQL 查询中删除数据库名称:

SELECT Tabla FROM dbo.NombresTablas

请注意,dbo模式下的表只能由作为数据库所有者的用户访问


推荐阅读