java - 在 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.
解决方案
根据这个答案,双点..
运算符会为当前用于查询的数据库用户生成默认架构。但是,您不应期望 SQL Management Studio 查询语法在使用 JDBC 时会起作用。这是两个完全不同的驱动程序接口,具有不同的限制,JDBC 很可能更具限制性。
您可能应该BoxPointHAMBURGO
在建立 JDBC 连接时选择数据库。您必须根据构建连接 URL修改 JDBC URL ,语法为:
jdbc:sqlserver://localhost;databaseName=BoxPointHAMBURGO
然后从 SQL 查询中删除数据库名称:
SELECT Tabla FROM dbo.NombresTablas
请注意,dbo
模式下的表只能由作为数据库所有者的用户访问。
推荐阅读
- django - DRF 无法获取受限 URL 的数据
- javascript - d3js v4:缩放圆圈
- java - 在构造函数中加载文件,不好的做法?
- ruby-on-rails - 我如何在 Rails 中解密?
- javascript - 如何从 github 注册表安装 npm 包
- javascript - React 上下文的意外行为
- javascript - 自定义组件 iside vue js 对话框
- nuxt.js - 在 Nuxt 项目中使用 Vuetify 和 @nuxt/vuetify 的好处
- image-processing - 通过分层源图像自动生成随机构图**无需创建重复项**
- django - 在 Django 中覆盖用户的检查密码