Java ResultSet给我的是列名,而不是accuall索引

Java ResultSet给我的是列名,而不是accuall索引,java,sql,oracle,jdbc,Java,Sql,Oracle,Jdbc,我从一个名为“disks”的表中得到了一个程序,该表以一周中的几天为列名,即今天的dish。我从calendar中获取一天的名称(它返回的名称类似于:星期三),但当我在SQL部分使用它时,在java中返回的是列的名称,而不是accuall索引 String selectD="select ? as smt from DISHES where ESTID=?"; prestatement=dbConnection.prepareStatement(selectD); //here

我从一个名为“disks”的表中得到了一个程序,该表以一周中的几天为列名,即今天的dish。我从calendar中获取一天的名称(它返回的名称类似于:星期三),但当我在SQL部分使用它时,在java中返回的是列的名称,而不是accuall索引

String selectD="select ? as smt from DISHES where ESTID=?";
    prestatement=dbConnection.prepareStatement(selectD);
    //here sets the day from Calendar stuff. It seems OK. I get the right date, like "Wednesday" at wednesdays
    prestatement.setString(1,day);
    prestatement.setInt(2,resID);
    rs=prestatement.executeQuery();
    if(rs.next()){

    String Dish =rs.getString("smt");
    EstInfo.setText("Today's dish is "+Dish);
    }else{
        System.out.println("Found nothing in DISHES"); 
    }

不能使用
插入列名。标记仅用于值

您的查询相当于:

select 'Wednesday' as smt from DISHES where ESTID=42
这当然没有任何意义,返回这样的文本文本

使用字符串连接来构建SQL,例如

String selectD = "select " + day + " as smt from DISHES where ESTID=?";
然后


要在没有SQL注入可能性的情况下执行此操作,您可以尝试以下操作:

String selectD="select case UPPER(?) " +
                      + "when 'SUNDAY'    then Sunday " +
                      + "when 'MONDAY'    then Monday " +
                      + "when 'TUESDAY'   then Tuesday " +
                      + "when 'WEDNESDAY' then Wednesday " +
                      + "when 'THURSDAY'  then Thursday " +
                      + "when 'FRIDAY'    then Friday " +
                      + "when 'SATURDAY'  then Saturday " +
                    + "end as smt from DISHES where ESTID=?";
    prestatement=dbConnection.prepareStatement(selectD);
    prestatement.setString(1,day);
    prestatement.setInt(2,resID);
    rs=prestatement.executeQuery();
    if(rs.next()){

    String Dish =rs.getString("smt");
    EstInfo.setText("Today's dish is "+Dish);
    }else{
        System.out.println("Found nothing in DISHES"); 
    }

祝你好运。

你试过调试它吗?直接从RDBMS执行查询,效果很好。没什么奇怪的。我建议更好的数据库设计是每天都有一行。Day name(或Day number)可能是一列,而您正在选择的实际值可能是另一列。哦……这很有效……谢谢!我对这些东西不熟悉。我想我可以用这个?到处都是东西。如果您以这种方式构建SQL语句,请不要忘记小心SQL注入。
String selectD="select case UPPER(?) " +
                      + "when 'SUNDAY'    then Sunday " +
                      + "when 'MONDAY'    then Monday " +
                      + "when 'TUESDAY'   then Tuesday " +
                      + "when 'WEDNESDAY' then Wednesday " +
                      + "when 'THURSDAY'  then Thursday " +
                      + "when 'FRIDAY'    then Friday " +
                      + "when 'SATURDAY'  then Saturday " +
                    + "end as smt from DISHES where ESTID=?";
    prestatement=dbConnection.prepareStatement(selectD);
    prestatement.setString(1,day);
    prestatement.setInt(2,resID);
    rs=prestatement.executeQuery();
    if(rs.next()){

    String Dish =rs.getString("smt");
    EstInfo.setText("Today's dish is "+Dish);
    }else{
        System.out.println("Found nothing in DISHES"); 
    }