【问题标题】:How to write a query instead of writing 6-9 different queries in SQL for JDBC in Java如何编写查询而不是在 SQL 中为 Java 中的 JDBC 编写 6-9 个不同的查询
【发布时间】:2021-01-28 13:42:35
【问题描述】:

我写了这 9 个查询来执行不同的操作

GET_ITEMS = "SELECT ITEM_ID,PART_NO,DESCRIPTION,SALE_PRICE,UPDATED_BY,UPDATED_DATE FROM ITEM ORDER BY ITEM_ID";

GET_ITEM_ID = "SELECT ITEM_ID FROM ITEM";

GET_PART_NO = "SELECT PART_NO FROM ITEM WHERE ITEM_ID=?";

UPDATE_PART_NO = "UPDATE ITEM SET PART_NO=?WHERE ITEM_ID= ?";

GET_SALE_PRICE = "SELECT SALE_PRICE FROM ITEM WHERE ITEM_ID=?";

UPDATE_SALE_PRICE = "UPDATE ITEM SET SALE_PRICE=?WHERE ITEM_ID=?";

GET_DESC = "SELECT DESCRIPTION FROM ITEM WHERE ITEM_ID=?";

UPDATE_DESC = "更新项目集描述 =?WHERE ITEM_ID=?";

INSERT_INTO_ITEMDUPLICATE ="REPLACE INTO ITEM_DUPLICATE (item_id,part_no,sale_price,description,barcode)SELECT
i.ITEM_ID,i.PART_NO,i.SALE_PRICE,i.DESCRIPTION,b.BARCODE FROM item i JOIN item_barcode b ON b.ITEM_ID = i.ITEM_ID WHERE i.ITEM_ID = ?";

在我的 java JDBC 程序中。但我想把它们写成两个查询,一个用于显示来自数据库的数据,另一个用于更新数据。可能吗???。我正在 Eclipse 中使用 mySQL for DB 尝试此操作。

任何人都可以帮忙解决这个问题吗?我正在尝试从 2 天内找到解决方案

这是我的控制台输出,最后如果用户给出 Y,那么我的数据将更新到 item_duplicate 表中。为此,我还更新了项目表。但我只需要在新表中执行更新,而不是在项目表中。

控制台输出:

【问题讨论】:

  • 我不清楚您要做什么您是否知道您可以通过逗号分隔在更新中更新多于 1 列。
  • 嗨,@P.Salmon ya 我知道,但任务是如果用户选择 part_no,我需要让用户选择一个要更新的字段,那么我应该只对 part_no 执行更新并更新值所以对于每个字段,我都创建了不同的查询
  • 用户提供要更新的 item_id、要更新的列名和要更新到的列值?
  • item_id 是主键所以不能更新,剩下三个可以更新。并且该值由用户自己给出,它应该在 item_duplicaet 表中更新为相同的列名。@P.Salmon

标签: java mysql jdbc


【解决方案1】:

但我想将它们写成两个查询,一个用于显示数据库中的数据,另一个用于更新数据。可以吗???

第一个查询将“显示”来自 ITEM 的数据,所以这很好,是的,您可以编写另一个更新数据的单个查询(尽管它可能需要在您的 java 代码中部分构建,具体取决于哪个字段已更改)

例如(编写,未编译):

string queryPrefix = "UPDATE ITEM SET ";
string querySuffix = " WHERE ITEM_ID=?";

List<String> queryUpdates = new ArrayList<String>;
List<object> queryParameters = new ArrayList<object>;

if (updatePartNumber) { 
  queryUpdates.add("PART_NO=?");
  queryParameters.add(newPartNumber);
}
if (updateSalePrice) { 
  queryUpdates.add("SALE_PRICE=?");
  queryParameters.add(newSalePrice);
}
// etc

string query = queryPrefix + String.join(",",queryUpdates) + querySuffix;
queryParameters.Add(itemId);

但是,您的最终查询完全是另一回事,我看不出如何将其混入上述逻辑中。

【讨论】:

  • 嗨@mcdrewski 谢谢你的建议,你能详细解释一下这个String.join(“,”,queryUpdates)。我是编码和 java 的新手,所以如果你能解释那个特定部分的作用,那将会很有帮助。现在进入 if (updatePartNumber) 我们可以在哪里将此 updatePartNumber 作为变量提供,以便它重定向到此 if 子句。谢谢。
猜你喜欢
  • 2015-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-04
  • 2021-01-15
  • 1970-01-01
  • 1970-01-01
  • 2016-10-05
相关资源
最近更新 更多