我试图使用SQL从java代码编写一个查询,以查找两个日期列之间的年份差异。我有一个表tblexporthtc
,其中包含列visitdate
和dateofborny
,我想计算这两列之间的年数。
我的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)
我想要的是获得列visitdate
和dateofborny
之间的年数。
我已经找到了答案:我必须使用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();
}
我的程序是一个会计管理器,我有一个HSQLDB。这是主类,我目前正在对程序进行测试,所以在主函数中是我输入测试代码以将值插入数据库的地方。这是应用程序类。 我已经多次检查该表是否存在。我使用IntelliJ idea,它有一个数据库管理器,当我直接在数据库中运行相同的SQL时,它运行得很好,所以我知道问题不在于SQL代码。
我正在尝试做一些Ucanaccess实践,用Java管理一些数据库。我得到了一个我不知道如何解决的错误。 我在Access中有一个名为USERS的表: 自动编号,短文本,短文本,数字。 代码继续,但只有一些条件和查询。
当我试图将数据放入数据库时,我出现了一个错误,这是我的注册函数
我试图用外键将一个元组从输入关系INPUTRel插入到源关系uk_rd_penst中,然后更新目标关系uk_status的元组。UK_Status和UK_RD_POSTAD具有主键-外键关系。 以下是参数:inputrel:TransId,Company,ICB_Code,RD2008 uk_rd_peston:Company,ICB_Code,RD_spend_2008 uk_status:Co