Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何动态生成具有特定列的sql查询_Java_Sql - Fatal编程技术网

Java 如何动态生成具有特定列的sql查询

Java 如何动态生成具有特定列的sql查询,java,sql,Java,Sql,我有几张桌子。我还有一个问题。我的问题是使用Java动态生成SQL查询 我在单独的表中有以下字段: Collumn name status po_number, Y unit_cost, Y placed_date , Y date_closed, Y scheduled_arrival_date Y date_closed Y order_q

我有几张桌子。我还有一个问题。我的问题是使用Java动态生成SQL查询

我在单独的表中有以下字段:

 Collumn name          status
po_number,               Y
unit_cost,               Y
placed_date ,            Y
date_closed,             Y
scheduled_arrival_date   Y
date_closed              Y 
order_quantity           Y
roll_number              N
product_sku              N
product_category_name    N
rec_vendor_quantity      Y  
vendor_name              Y
et_conversion_unit_quantity Y
当状态为
Y
时,我必须从中生成一个查询,这里的问题是上述列的某个时间

以下查询是上述查询的输出:

这里我已经包含了所有的列,但是我必须将状态为
N
的列导出,请帮助我使用java解释查询

select
pi.po_number,poi.unit_cost,pi.placed_date CreateDate,
case when isnull(pi.date_closed) then pi.scheduled_arrival_date  
else pi.date_closed end as ReceviedDate,
poi.order_quantity,poi.roll_number,p.product_sku product_name,
pc.product_category_name,poi.rec_vendor_quantity,pv.vendor_name,p.et_conversion_unit_quantity,pi.note
from
purchase_order as pi,
purchase_order_inventory as poi,
product_vendors as pv,
products AS p,
product_categories AS pc
where
pi.purchase_order_id=poi.purchase_order_id and
pc.product_category_id=p.product_category_id and
poi.product_id = p.product_id and
poi.product_category_id=pc.product_category_id and
pi.vendor_id=pv.product_vendor_id and
( ( pi.date_closed  >= '2012-01-01' and pi.date_closed <='2012-09-05 23:59:59' ) 
or ( pi.scheduled_arrival_date  >= '2012-01-01' and pi.scheduled_arrival_date <='2012-09-05 23:59:59') ) and
pi.po_type=0 
and pi.status_id = 0 and  poi.transaction_type = 0  
order by pi.po_number 
步骤3:结果查询
{query=选择采购订单。采购订单号,采购订单。下订单日期,采购订单。关闭日期,采购订单。计划到货日期,采购订单库存。单位成本,采购订单库存。订单数量,采购订单库存。卷号,采购订单库存。记录供应商数量,产品。产品sku,产品。et转换单位数量,pr产品类别。产品类别名称,产品供应商。供应商名称来自采购订单采购订单,采购订单库存采购订单库存,产品产品,产品类别产品类别,产品供应商产品供应商}


但这不是我想要的,请帮助我构造我给出的查询。

两个查询

您需要进行两个查询:

  • 查询启用了哪些字段
  • 构建第二个查询字符串(您希望以友好方式构建的字符串)
  • 这是因为SQL查询必须在查询任何数据之前告知将包含哪些列。事实上,它将用于构建内部DB查询计划,这是DB motor用于检索和组织您请求的数据的方式

    查询所有列

    是否有必要只查询这些字段?您不能查询所有内容并使用相关数据吗

    加入

    看看更新后的问题,我想您需要动态添加where条件来正确连接表。我应该做的是让一个引用告诉我当一个表存在时要添加什么条件

    至少有两种选择:

  • 基于存在的表对(例如:“如果存在A和B,则添加A.col1=B.col2”)
  • 根据现有表格(“如果存在B,则添加A.col1=B.col2;A应存在”
  • 根据您的示例,我认为第二个选项更合适(并且易于实现)

    所以我应该有一些静态的
    映射
    ,其中JoinInfo至少有:

    JoinInfo
    + conditionToAdd // by example "A.col1 = B.col2"
    + dependsOnTable // by example "A" to indicate that A must be present when B is present
    
    因此,您可以使用:

  • 要添加表的信息应该是(举例说明:即使A没有选定的列,也必须存在以与B联接)
  • 包括添加到where子句的条件

  • 不管怎么说……我觉得你遇到了很多麻烦。为什么这么有活力?

    两个问题

    您需要进行两个查询:

  • 查询启用了哪些字段
  • 构建第二个查询字符串(您希望以友好方式构建的字符串)
  • 这是因为SQL查询必须在查询任何数据之前告知将包含哪些列。事实上,它将用于构建内部DB查询计划,这是DB motor用于检索和组织您请求的数据的方式

    查询所有列

    是否有必要只查询这些字段?您不能查询所有内容并使用相关数据吗

    加入

    看看更新后的问题,我想您需要动态添加where条件来正确连接表。我应该做的是让一个引用告诉我当一个表存在时要添加什么条件

    至少有两种选择:

  • 基于存在的表对(例如:“如果存在A和B,则添加A.col1=B.col2”)
  • 根据现有表格(“如果存在B,则添加A.col1=B.col2;A应存在”
  • 根据您的示例,我认为第二个选项更合适(并且易于实现)

    所以我应该有一些静态的
    映射
    ,其中JoinInfo至少有:

    JoinInfo
    + conditionToAdd // by example "A.col1 = B.col2"
    + dependsOnTable // by example "A" to indicate that A must be present when B is present
    
    因此,您可以使用:

  • 要添加表的信息应该是(举例说明:即使A没有选定的列,也必须存在以与B联接)
  • 包括添加到where子句的条件

  • 不管怎样……我觉得你遇到了很多麻烦。为什么这么有活力呢?

    你必须一步一步地处理这件事

    首先,您必须创建一个查询,该查询将返回所有具有
    status='Y'

    然后将列名称放入字符串列表中

    List<String> list = new List<String>();
    while(rs.next()){
      list.add(rs.getString(columnNumber));
    }
    

    你必须一步一步地处理这件事

    首先,您必须创建一个查询,该查询将返回所有具有
    status='Y'

    然后将列名称放入字符串列表中

    List<String> list = new List<String>();
    while(rs.next()){
      list.add(rs.getString(columnNumber));
    }
    

    这太匹配代码了,你的问题在哪里?你的代码有什么问题吗?如果你看到第1步:我按列给出了查询顺序,结果也很好,但在分析查询时顺序发生了变化,请看第3步,即生成的查询。即使你能指导我构造以下
    select purchas,也足够了电子订单.采购订单号,采购订单库存.单位成本,采购订单.下订单日期,案例为空(采购订单.日期\u关闭)然后是采购订单、计划到货日期、其他采购订单、日期、结束日期、采购订单、库存、订单数量、采购订单、库存、卷号、p产品、sku产品、产品名称、产品类别、产品类别、采购订单、库存、记录供应商数量、产品供应商、供应商名称、产品、et换算单位数量太匹配代码了,你的问题在哪里?你的代码有什么问题吗?如果你看到步骤1:我已经按列给出了查询顺序,结果也很好,但是在分析查询时顺序发生了变化,请看一下步骤3,生成的查询。即使你可以指导我构造以下
    select purchase\o,也足够了订单号、采购订单号或