免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4245 | 回复: 19
打印 上一主题 下一主题

请教一个JAVA程序里的SQL查询语句 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-06-01 15:20 |只看该作者 |倒序浏览
为了查询的方便,我把要匹配的列名也作为参数来传递,我想应该是可以的吧,我这么试了
没有报错,但是无法查出结果
select from tablename where ? like ?

我这样做的目的是想查询程序功能的扩展性,也就是说,只要查询的字段类型一样
对于类似的查询我只要写一个方法就够了,对不同字段的查询可以使用同一个方法,比如

public Vector getAll(String columnname,String columnvale)
...
String sql=""select from tablename where ? like ?;
smtp=con.prepareStatement(sql);
smtp.setString(1,columnname);
smtp.setString(2,columnvale);
ResulSet rs=smtp.executQuery();
....
我不知道这么做可以不?是不是我在异想天开?
我在JAVA程序里这么写了一个方法,程序没有报错,但是没有查出任何结果!
请高手赐教、

论坛徽章:
0
2 [报告]
发表于 2006-06-01 15:24 |只看该作者
setString的话,jdbc自动将字串转义并加上引号,难道你的字段名也想加引号?这取决于不同的jdbc实现。有的可以,有的不可以

论坛徽章:
0
3 [报告]
发表于 2006-06-01 15:24 |只看该作者
应该是没有问题的,看看你数据库中有没有数据

论坛徽章:
0
4 [报告]
发表于 2006-06-01 16:08 |只看该作者
当然有数据,我用其他的方法可以查出数据的

论坛徽章:
0
5 [报告]
发表于 2006-06-01 16:11 |只看该作者
原帖由 perryhg 于 2006-6-1 15:24 发表
setString的话,jdbc自动将字串转义并加上引号,难道你的字段名也想加引号?这取决于不同的jdbc实现。有的可以,有的不可以


如果如斑竹所说的原因,那么程序应该报SQLException才对呀,因为找不到带引号的列呢,问题是没有报错
就是没有结果

论坛徽章:
0
6 [报告]
发表于 2006-06-01 16:13 |只看该作者
这个是我用JAVA写的一个查询方法
public Vector getAllbyOneandTwo(String colname1,String colvalue1,String colname2,String colvalue2){
  Vector vt=new Vector();
  Standards standard=null;
  DBConnect db=null;
  ResultSet rs=null;
  String sql="select * from standards where  (binary ? like ?) and (binary ?  like ?)";
  try{
  db=new DBConnect();
  db.prepareStatement(sql);
  db.setString(1,colname1);
  db.setBytes(2,("%"+colvalue1+"%").getBytes("gb2312"));
  db.setString(3,colname2);
  db.setBytes(4,("%"+colvalue2+"%").getBytes("gb2312"));
  rs=db.executeQuery();
  while(rs.next()){
   standard=new Standards();
   standard.setAlivetime(rs.getString("alivetime"));
   standard.setContent(rs.getString("content"));
   standard.setDomain(rs.getString("domain"));
   standard.setDraftdept(rs.getString("draftdept"));
   standard.setFname(rs.getString("fname"));
   standard.setId(rs.getInt("id"));
   standard.setIsaudit(rs.getInt("isaudit"));
   standard.setIsdrop(rs.getInt("isdrop"));
   standard.setIsoutdate(rs.getInt("isoutdate"));
   standard.setIssecret(rs.getInt("issecret"));
   standard.setIsvalid(rs.getInt("isvalid"));
   standard.setName(rs.getString("name"));
   standard.setNumber(rs.getString("number"));
   standard.setPath(rs.getString("path"));
   standard.setSystem(rs.getString("system"));
   standard.setType(rs.getInt("type"));
   standard.setUpdatetime(rs.getString("updatetime"));
   standard.setVersion(rs.getString("version"));
   vt.add(standard);
  }
  }catch(Exception e){e.printStackTrace();}
  finally{
    try{
    if(db!=null)
      db.close();
    }catch(Exception e){e.printStackTrace();}
  }
  return vt;
}

编译也可以通过,也可以运行,就是得不到应该有的的结果

论坛徽章:
0
7 [报告]
发表于 2006-06-01 16:27 |只看该作者
不过,你的字段名为什么不能直接用字符串连接呢?字段名通常是约束性很强的字符串,不必须用parameter转换的啊。
还有,说句题外话,你好像很喜欢用Vector哦,这个习惯好改改了,Vector是java 1.1就有的类,因性能低下而臭名昭著,java1.2以后有了新的Collections framework,早就该把vector淘汰掉了

[ 本帖最后由 perryhg 于 2006-6-1 17:53 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2006-06-01 16:32 |只看该作者
原帖由 perryhg 于 2006-6-1 16:27 发表
不过,你的字段名为什么不能直接用字符串连接呢?字段名通常是约束性很强的字符串,不必须用parameter转换的啊。
还有,说句题外化,你好像很喜欢用Vector哦,这个习惯好改改了,Vector是java 1.1就有的类,因性 ...


1 我直接通过字符串连接也是一样,并且我在MSYQL客户端写成
select * from standards where  (alivetime like "31% " and (  version like " %001" )
在命令行里执行也不行,不报错,就是没有结果,但结果的确应该存在的
2 谢谢斑竹提醒,我真的是用习惯了VECTOR,今后我的真的要用用Connection啦

是Collection不是Connection
比如List, Map, Set,尤其是List的两个主要形式LinkedList和ArrayList,非常好用。

[ 本帖最后由 perryhg 于 2006-6-1 17:55 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2006-06-01 17:43 |只看该作者
我不使用?来传参数的方式而连接字符串也不行,不报错,查不错结果
  String sql="select * from standards where ("+ colname1+" like "+colvalue1+")  and  ("+colname2+" like "+colvalue2+")";
db.prepareStatement(sql);
rs=db.executeQuery();

论坛徽章:
0
10 [报告]
发表于 2006-06-01 17:56 |只看该作者
这个好像不对啊,你直接在mysql里面执行语句呢?能得到结果吗?还有,你怎么知道mysql一定是用GB2312保存的?会不会是UTF-8呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP