如何在MS_Access中比较整数类型记录与字符串类型记录?

时间:2015-03-27 09:57:51

标签: java database ms-access jdbc odbc

我的数据库中有两个表。 表Other RMA_no'Number' &安培;表格Material_Require_Master RMA_NoTEXT

我想执行一个可以输出匹配RMA_No

的元组的查询

到目前为止,我已经做到了。

String sql="Select RMA_Master.RMA_No,Call_Date,Source,Item_name,
                   Booking_Desc,Customer_name,Customer_contact,
                   AssignedTo,Part_No,Part_Name,Part_Quantity,
                   Part_Price,Total 
            From RMA_Master,Material_Require_Master 
            WHERE RMA_Master.RMA_No=Material_Require_Master.RMA_No AND
                  RMA_Master.MaterialRequireStatus='"+materialStatus+"' 
            UNION 
            Select Other.RMA_No,Call_Date,Source,Item_name,
                   Booking_Desc,Customer_name,Customer_contact,
                   AssignedTo,Part_No,Part_Name,Part_Quantity,
                   Part_Price,Total 
            From Other,Material_Require_Master 
            WHERE String.valueOf(Other.RMA_No)= Material_Require_Master.RMA_No AND
                  Other.MaterialRequireStatus='"+materialStatus+"'";

PreparedStatement pst=con.prepareStatement(sql);
ResultSet rs=pst.executeQuery();    
table.setModel(DbUtils.resultSetToTableModel(rs));          
rs.close();
pst.close();

我的StackTrace是:

Exception: [Microsoft][ODBC Microsoft Access Driver] Undefined function 'String.valueOf' in expression.

当我不使用String.valueOf

String sql="Select RMA_Master.RMA_No,Call_Date,Source,Item_name,Booking_Desc,Customer_name,Customer_contact,AssignedTo,Part_No,Part_Name,Part_Quantity,Part_Price,Total From RMA_Master,Material_Require_Master WHERE RMA_Master.RMA_No=Material_Require_Master.RMA_No AND RMA_Master.MaterialRequireStatus='"+materialStatus+"' UNION Select Other.RMA_No,Call_Date,Source,Item_name,Booking_Desc,Customer_name,Customer_contact,AssignedTo,Part_No,Part_Name,Part_Quantity,Part_Price,Total From Other,Material_Require_Master WHERE Other.RMA_No= Material_Require_Master.RMA_No AND Other.MaterialRequireStatus='"+materialStatus+"'";

发生Exception后:

Exception: [Microsoft][ODBC Microsoft Access Driver] Type mismatch in expression.

2 个答案:

答案 0 :(得分:2)

我认为你搞砸了SQL和Java。 String.valueOf()是一种不能在SQL语句中使用的Java方法。 SQL中有STR()可用于将数字转换为字符串。将其与LTRIM()结合使用以删除空格填充,例如LTRIM(STR(Other.RMA_no))

但无论如何,相反的方式更好,正如@Gord提出的那样。

答案 1 :(得分:0)

有两个测试表

[Material_Require_Master]
RMA_No - 文字
mrmText - 文本

[其他]
RMA_no - 数字(长整数)
otherText - 文本

以下查询...

SELECT Other.RMA_no, Other.otherText, Material_Require_Master.mrmText
FROM Material_Require_Master INNER JOIN Other 
    ON Material_Require_Master.RMA_No = Other.RMA_no;

......确实会产生错误

  

表达式中的类型不匹配。

如果我们将CLng()函数添加到连接的ON子句中,以将Material_Require_Master.RMA_No从文本转换为长整数...

SELECT Other.RMA_no, Other.otherText, Material_Require_Master.mrmText
FROM Material_Require_Master INNER JOIN Other 
    ON CLng(Material_Require_Master.RMA_No) = Other.RMA_no;

...然后查询运行没有错误。