String sql = "select * from student_info where flag!=0 and LOCATE(\"12\",day1,1)!=0";上面是准备好的sql 语句,但是我想把它放在函数中,通过函数的参数将两个参数传给sql语句,来替换sql语句中LOCATE函数中的第一个和第二个参数。如:findByArgv(string argv1,string argv2)
{
String sql = "select * from student_info where flag!=0 and LOCATE(?,?,1)!=0";
PreparedStatement ps = DBConnection.getConnection().prepareStatement(sql);
ps.setString(1,argv1);
ps.setString(2,argv2);
}
但是我试过了,这样不行!
是什么原因啊?!
求大神指点。。
{
String sql = "select * from student_info where flag!=0 and LOCATE(?,?,1)!=0";
PreparedStatement ps = DBConnection.getConnection().prepareStatement(sql);
ps.setString(1,argv1);
ps.setString(2,argv2);
}
但是我试过了,这样不行!
是什么原因啊?!
求大神指点。。
解决方案 »
- java编程中如何为对话框添加标签页
- 如何用HttpServletRequest request ,HttpServletResponse response
- 【约瑟夫环的问题】
- 貌似最近流行俄罗斯方块?我也来一个
- 语句String _str = (String)null;执行后为什么没有抛出异常,而是仍旧返回空值?毕竟是对空值做强制类型转换呀,请高手解答
- 高手帮忙,在线等,急!!!
- 哪里有java编程思想第3版(中文)下载呀,发给我一份谢谢了,马上给分
- 求教一个问题现象~3Q~
- 我安装了jdk1.4,JAVA_HOME也设了,在cmd里面编译时报错:Exception in thread "main" java.lang.NoClassDefFoundError
- HSSF 中文问题
- 输出的结果很乱,不知道是什么原因,请各位帮忙!
- 集合中Iterator如何计数
不过在JDBC规范当中如果想要调用某个SQL函数库,也是可以的,贴一段代码
Connection con=new ConnectionProvider().getConnection();
CallableStatement cStmt=con.prepareCall("{? = call MYLOCATE(?,?)}");
cStmt.setString(2, "abs");//设置第二个参数值
cStmt.setString(3, "eabs");//设置第三个参数值
cStmt.registerOutParameter(1, Types.INTEGER);//注册第一个参数输出值和数据类型
cStmt.execute();
int outputValue=cStmt.getInt(1);//获得第一个参数值,也就是返回值
System.out.println("outputValue="+outputValue);
con.close();
对应的本地函数创建代码
CREATE DEFINER=`gaoyong`@`%` FUNCTION `mylocate`( s1 varchar(255),s2 varchar(255)) RETURNS int(11)
BEGIN
RETURN locate(s1,s2) ; -- 返回值
END我还没找到直接调用本地MySQL函数库的方法,这里是自己写了mylocate函数再调用函数库的locate,但是最后还是说一句,这种方法通过JDBC调用MySQL本地函数库的效率肯定很低,像locate这个函数最终无非也获取一个函数值,倒不如说用Java实现像locate这样的逻辑。
谢谢你!你说的这个方法是不是叫存储过程啊?
我也想过用JAVA实现这样的逻辑,但是LOCATE函数中第二个参数是数据表中列的名称,我想通过创建一个函数来接受参数告诉SQL查询数据表中某一列的字串。好像就不能用JAVA实现这个逻辑了吧?!
另外,你想要实现的效果也没说清楚,函数的本质就是给初始参数然后最后变化得到值,上面已经给了一个demo。调用参数也无非是想要调用的返回值,或者仅仅让函数跑一下(无返回值)。这两种都可以如上面例子一样,用JDBC调用获得对应的返回值,再根据返回值拼接SQL字符串执行JDBC操作。你想要的意思如果说不清楚,直接把数据库表贴出来和想要实现的功能说一下,具体点
恩,这么说吧。数据表中有如下这几个列名:
day1 day2 day3 day4 day5
每一列会有如这样的字符串:
如:
day1 day2 day3 day4 day5
12 1234 56 123 456
... ... ... ... ...我呢,想实现这样功能的函数:通过想数据库查询后返回一个结果集。这个函数叫find.
find(String argv1,String argv2)
这个函数的第一个参数用来放我想查询的字串,而第二个参数放我数据表中的列名。实例:
比如,我想查找在day1列中含有“12”字串的结果集,我就调用这个find("12","day1")就行啦!
谢谢你哈!
而且这个功能通过这个语句是可以实现的:String sql = "select * from student_info where flag!=0 and LOCATE(\"12\",day1,1)!=0";但是这样就写死了啊,我想给它弄成参数传进去,但不知道咋弄呢。
用java写个方法就能非常轻松地搞定,然后在程序调用就可以了,干嘛大费周折调用MySQL的函数?
jdbc调用SQL函数花在连接上的开销很大,也浪费资源。利用select * from table1获得所有的ResultSet,然后再根据你的逻辑对Result再进行筛选(从ResultSet读出对应字段进行字符串的比照操作,符合的放到集合,不符合舍去)的效率可能要高于用sql本地函数来做,推荐这种方法。