在SQL中运行的准备好的语句中的语法错误

时间:2019-06-03 17:37:30

标签: java sql-server jdbc prepared-statement

即使我的查询在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.

1 个答案:

答案 0 :(得分:1)

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

建立JDBC连接时,您可能应该选择BoxPointHAMBURGO数据库。您必须按照Building the Connection URL修改JDBC URL,语法为:

jdbc:sqlserver://localhost;databaseName=BoxPointHAMBURGO

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

SELECT Tabla FROM dbo.NombresTablas

请注意,dbo模式can only be accessed by the user that is the database owner下的表。