使用别名时 JDBC 结果集不起作用 我收到" java.sql.SQLSyntaxErrorException: ORA-00905: missing keyword"



我想执行此查询,但是它在不使用变量的情况下给了我一个错误,但它给了我错误的ORA-00905:缺少关键字。我在SQL开发人员中测试了查询,但没有错误。我可能认为这是JDBC的驱动程序问题或语法问题。但是我不知道这是代码:

    public List<ReimbBean> getAllReimb() {
    String sql = "select reim.reimb_id, reim.reimb_amount,"
            + "reim.reimb_submitted, reim.reimb_resolved, "
            + "CONCAT(CONCAT(u.user_first_name,' '),"
            + " u.user_last_name) AS "REIMB_AUTHOR", "
            + "reim.REIMB_RESCRIPTION, rst.REIMB_STATUS, "
            + "rtype.REIMB_TYPE, CONCAT(CONCAT(urs.user_first_name,'   '), "
            + "urs.user_last_name) AS "REIMB_RESOLVER""
            + "FROM ERS_REIMBURSTMENT reim"
            + "LEFT JOIN ERS_USERS u"
            + "ON u.ERS_USERS_ID = reim.REIMB_AUTHOR"
            + "LEFT JOIN ERS_REIMBURSTMENT_STATUS rst"
            + "ON rst.REIMB_STATUS_ID = reim.REIMB_STATUS_ID"
            + "LEFT JOIN ERS_REIMBURSTMENT_TYPE rtype"
            + "ON rtype.reimb_type_id = reim.REIMB_TYPE_ID"
            + "LEFT JOIN ERS_USERS urs"
            + "ON urs.ERS_USERS_ID = reim.REIMB_RESOLVER"
            + "ORDER BY reim.reimb_id";
  List<ReimbBean> reimbAllList = new ArrayList<>();  
  ReimbBean reimb = new ReimbBean();
  try {
       PreparedStatement preparedStatement =    conn6.prepareStatement(sql);
            ResultSet rs = preparedStatement.executeQuery(); 
        while(rs.next()){
            reimb.setReimbAmount(rs.getDouble("reimb_Amount"));
            reimb.setReimbDescript(rs.getString("reimb_Description"));
            reimb.setReimbSubmitted(rs.getTimestamp("reimb_Submitted"));
            reimb.setReimbAuthor(rs.getInt("reimb_Author"));
            reimb.setReimbResolved(rs.getTimestamp("reimb_Resolved"));
            reimb.setReimbResolver(rs.getInt("reimb_Resolver"));
            reimb.setReimbStatusID(rs.getInt("reimb_Status_ID"));
            reimb.setReimbTypeID(rs.getInt("reimb_Type_ID"));
            reimbAllList.add(reimb);
        }   

我在线阅读说,pareParestatement无法仅绑定对象变量,因此替代方法是明确定义它们,因此我为声明创建了一个零件,并用字符串变量替换了字段,但是错误继续持续存在。

您在许多字符串的末端缺少空格:

String sql = "select reim.reimb_id, reim.reimb_amount,"
           + "reim.reimb_submitted, reim.reimb_resolved, "
           + "CONCAT(CONCAT(u.user_first_name,' '),"
           + " u.user_last_name) AS "REIMB_AUTHOR", "
           + "reim.REIMB_RESCRIPTION, rst.REIMB_STATUS, "
           + "rtype.REIMB_TYPE, CONCAT(CONCAT(urs.user_first_name,'   '), "
           + "urs.user_last_name) AS "REIMB_RESOLVER" " // Here
           + "FROM ERS_REIMBURSTMENT reim " // and here
           + "LEFT JOIN ERS_USERS u " // and here
           + "ON u.ERS_USERS_ID = reim.REIMB_AUTHOR " // and here
           + "LEFT JOIN ERS_REIMBURSTMENT_STATUS rst " // and here
           + "ON rst.REIMB_STATUS_ID = reim.REIMB_STATUS_ID " // and here
           + "LEFT JOIN ERS_REIMBURSTMENT_TYPE rtype " // and here
           + "ON rtype.reimb_type_id = reim.REIMB_TYPE_ID " // and here
           + "LEFT JOIN ERS_USERS urs " // and here
           + "ON urs.ERS_USERS_ID = reim.REIMB_RESOLVER " // and here
           + "ORDER BY reim.reimb_id";

最新更新