【问题标题】:java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: YEARjava.sql.SQLSyntaxErrorException:用户缺少权限或找不到对象:YEAR
【发布时间】:2019-01-15 16:22:50
【问题描述】:

我正在尝试使用 SQL 从 java 代码中编写一个查询,以查找两个日期列之间的年份差异。我有一个表tblExportHTC,列有VisitDateDateOfBirth,我想计算两列之间的年数。

我的java代码块:

 try {
        String path = selectedFiles;
        Connection conn = DriverManager.getConnection("jdbc:ucanaccess://" + path + ";jackcessOpener=app.test.CryptCodecOpener", "", "");
        Statement s = conn.createStatement();
        ResultSet rs = s.executeQuery("SELECT DATEDIFF(year,vis.VisitDate,vis.DateOfBirth) as date_diff "
                + " FROM tblExportHTC vis WHERE vis.ClientCode='PITC-TENT-4-093'");
        while (rs.next()) {
            int visits_count = rs.getInt("date_diff");
            System.err.println("index_pos_from_sexual_partners: " + visits_count);
        }
    } catch (SQLException ex) {
        ex.printStackTrace();
    }

每当我尝试运行代码时,都会出现错误

Caused by: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: YEAR
at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCStatement.fetchResult(Unknown Source)
at org.hsqldb.jdbc.JDBCStatement.executeQuery(Unknown Source)
at net.ucanaccess.jdbc.UcanaccessStatement.executeQuery(UcanaccessStatement.java:216)
Caused by: org.hsqldb.HsqlException: user lacks privilege or object not found: YEAR
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.ExpressionColumn.checkColumnsResolved(Unknown Source)
at org.hsqldb.QueryExpression.resolve(Unknown Source)
at org.hsqldb.ParserDQL.compileCursorSpecification(Unknown Source)
at org.hsqldb.ParserCommand.compilePart(Unknown Source)
at org.hsqldb.ParserCommand.compileStatements(Unknown Source)
at org.hsqldb.Session.executeDirectStatement(Unknown Source)
at org.hsqldb.Session.execute(Unknown Source)

我想要的是得到VisitDateDateOfBirth 列之间的年数。

【问题讨论】:

  • 您使用的是哪个 dbms?
  • @jarlh 给定 JDBC URL,OP 正在通过 UcanAccess(使用 HSQLDB)使用 MS Access。
  • 我是用来从ms访问文件sir中查询的
  • 根据DateDiff Function,您应该使用'yyyy' 而不是year。不确定这是否适用于 SQL 语法,或者仅适用于 VB 代码。
  • 还是那个马克·罗特维尔

标签: java sql ms-access ucanaccess


【解决方案1】:

我找到了答案:我必须使用TIMESTAMPDIFF() 函数而不是DATEDIFF(),它似乎工作得很好。

try {
    String path = selectedFiles;
    Connection conn = DriverManager.getConnection("jdbc:ucanaccess://" + path + ";jackcessOpener=app.test.CryptCodecOpener", "", "");
    Statement s = conn.createStatement();
    ResultSet rs = s.executeQuery("SELECT TIMESTAMPDIFF(year,vis.VisitDate,vis.DateOfBirth) as date_diff "
            + " FROM tblExportHTC vis WHERE vis.ClientCode='PITC-TENT-4-093'");
    while (rs.next()) {
        int visits_count = rs.getInt("date_diff");
        System.err.println("index_pos_from_sexual_partners: " + visits_count);
    }
} catch (SQLException ex) {
    ex.printStackTrace();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-25
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 2017-06-14
    • 2019-05-31
    相关资源
    最近更新 更多