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