У меня две таблицы в моей БД. Таблица Other
Имеет RMA_no
как 'Number'
& table Material_Require_Master
Имеет RMA_No
как TEXT
.
Я хочу выполнить запрос, который может выводить кортежи, имеющие соответствующие 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.
Я думаю, вы перепутались между SQL и Java. String.valueOf()
- это метод Java, который нельзя использовать в инструкции SQL. В SQL есть STR()
который вы можете использовать для преобразования числа в строку. Используйте его в соединении с LTRIM()
, чтобы удалить пробельные пробелы, например LTRIM(STR(Other.RMA_no))
.
Но в любом случае, наоборот, лучше, чем предлагал @Gord.
С двумя тестовыми таблицами
[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;
... тогда запрос выполняется без ошибок.