Я обнаружил ошибку в драйвере SQLite JDBC, но я подумал, что увижу, может ли кто-нибудь обнаружить какие-либо ошибки с моей стороны. У меня есть следующий запрос:
SELECT
SKU_ATTR_VALUE.*,
Product.ProductID
FROM
SKU_ATTR_VALUE
INNER JOIN SKU
ON SKU_ATTR_VALUE.SkuID=SKU.SkuID
INNER JOIN Product
ON SKU.ProductID=Product.ProductID
WHERE Product.ProductID=?
Довольно просто. Я могу запустить это в браузере базы данных SQLite, заменив? с 1, и он возвращает 18 строк, что и должно быть. Только 18 строк соответствуют условию. Но когда я запускаю это в Java и передаю значение 1, я получаю обратно 817 значений. И это не декартово объединение; в SKU_ATTR_VALUE есть 864 возможных значения. У результатов, которые я получаю, тоже есть хотя бы одно значение для каждой записи в Продукте ... поэтому я действительно не могу себе представить, что происходит.
Я смотрю на это некоторое время, и я полностью в замешательстве. Погуглив, похоже, ничего не происходит. Да, я уверен, что выполняю запрос Java к той же базе данных SQLite, что и в браузере SQLite.
Имя jar-файла SQLite - sqlitejdbc-v056.jar. Он основан на SQLite 3.6.14.2.
Вот код Java, который устанавливает запрос:
String sql = "SELECT SKU_ATTR_VALUE.*, Product.ProductID " +
"FROM SKU_ATTR_VALUE " +
" INNER JOIN SKU ON SKU_ATTR_VALUE.SkuID=SKU.SkuID " +
" INNER JOIN Product ON SKU.ProductID=Product.ProductID " +
"WHERE Product.ProductID=?";
ps = conn.prepareStatement(sql);
ps.setInt(1, productID);
ResultSet rs = ps.executeQuery();