如何在 SQL JDBCRead 中传递参数进行查询?

问题描述 投票:0回答:1

我正在一个 opl 项目中工作。在我的 .dat 文件中,我有

px = 20
JDBCConnection in("jdbc:sqlite:my_database.db", "");
my_param from JDBCRead(in, "SELECT COL FROM TABLE WHERE COL2 <= 20");

我需要:

my_param from JDBCRead(in, "SELECT COL FROM TABLE WHERE COL2 <= :px");

.mod 文件中所有变量都已正确定义

jdbc cplex opl
1个回答
0
投票

这里是您在 .mod 中设置 .dat 中的字符串的示例

.mod

string paramread=...;
string parambuses=...;
string paramwrite=...;

tuple param
    {
    int nbKids;
    }

    {param} params=...;

    assert card(params)==1;

    int nbKids=first(params).nbKids;

    // a tuple is like a struct in C, a class in C++ or a record in Pascal
    tuple bus
    {
    key int nbSeats;
    float cost;
    }

    // This is a tuple set
    {bus} buses=...;

    // asserts help make sure data is fine
    assert forall(b in buses) b.nbSeats>0;
    assert forall(b in buses) b.cost>0;

    // decision variable array
    dvar int+ nbBus[buses];

    // objective
    minimize
     sum(b in buses) b.cost*nbBus[b];
     
    // constraints
    subject to
    {
     sum(b in buses) b.nbSeats*nbBus[b]>=nbKids;
    }

    tuple result
    {
       key int nbSeats;
       int nbBuses;
    }

    {result} results={<b.nbSeats,nbBus[b]> | b in buses};
    
    main
    {
      thisOplModel.generate();
      thisOpLModel.data.paramRead="nn"
;    }

.数据

SheetConnection s("zoo2.xlsx");


params from SheetRead(s,paramread); 
buses from SheetRead(s,parambuses);
results to SheetWrite(s,paramwrite);

主模型来完成这项工作

main
{
  var source = new IloOplModelSource("variablesheetreadstring.mod");
  var cplex = new IloCplex();
  var def = new IloOplModelDefinition(source);
  var opl = new IloOplModel(def,cplex);
  var data1=new IloOplDataElements();
  
  data1.paramread="params!A2";
  data1.parambuses="buses!A2:B3";
  data1.paramwrite="buses!E2:F3";
  
  opl.addDataSource(data1);
  
  var data2 = new IloOplDataSource("variablesheetreadstring.dat");
  opl.addDataSource(data2);
  opl.generate();
  if (cplex.solve()) {
     writeln("OBJ = " + cplex.getObjValue());
     opl.postProcess();

  } else {
     writeln("No solution");
  }
  

  opl.end();
  
  
}
© www.soinside.com 2019 - 2024. All rights reserved.