最近弄的一个jsp项目,使用了c3p0来连接到oracle上,其中oracle通过透明网关直连sqlserver,sql的处理是使用最原始的jdbc然后拼串,在处理查询时遇到了一些问题,如下:
sql = "select \"empname\", \"empid\", \"empno\", \"username\", \"userpass\", \"empstatus\", \"empcate\" from t_fly_flyer@okfoc where \"username\" = '?' and userpass\" = '?'";这样经过PreparedStatement处理后报无效列索引错误。
sql = "select \"empname\", \"empid\", \"empno\", \"username\", \"userpass\", \"empstatus\", \"empcate\" from t_fly_flyer@okfoc where \"username\" = ? and userpass\" = ?";这样没有报错,但是查不到结果。
sql = "select \"empname\", \"empid\", \"empno\", \"username\", \"userpass\", \"empstatus\", \"empcate\" from t_fly_flyer@okfoc where \"username\" = 'zhangzhihua' and userpass\" = '1'";这样可以出来结果,但是登录验证不可以这样写啊
有哪位大哥遇见过这样的问题吗?给讲讲吧。

解决方案 »

  1.   


    sql可以这么拼写:
    String username = ...; 
    String userpass = ...; 
    sql = "select \"empname\", \"empid\", \"empno\", \"username\", \"userpass\", \"empstatus\", \"empcate\" from t_fly_flyer@okfoc where \"username\" = '" + username + "' and userpass\" = '" + userpass + "'";
      

  2.   


    谢谢~~,这样弄然后把sql执行时传的对象设为空就拿到了结果
      

  3.   

    sql = "select \"empname\", \"empid\", \"empno\", \"username\", \"userpass\", \"empstatus\", \"empcate\" from t_fly_flyer@okfoc where \"username\" = '?' and userpass\" = '?'";sql语句搞这么多引号是要查询"empname","empid"...这样的列么,确定数据库建表是列都有引号了
      

  4.   

    那是因为sqlserver和oracle的区别啊在oracle下查sqlserver的表
      

  5.   

    只要你的sql能在数据库中运行,就能在java程序中运行我要说的说完了
      

  6.   

    可否考虑将sqlserver的表做成oracle的view,通过访问oracle的view来访问sqlserver,从而避免程序中书写sql语句加引号的麻烦。
      

  7.   

    我也不懂,但是我看好多人都是用PreparedStatement写的,
      

  8.   

    http://bbs.csdn.net/topics/390323284?page=1#post-393263160  jqueryGrid 懂的来看看,有奖励!