求一字符串动态截取、
- Java code
String sql = " select * from user where category = ? ...."
大概说明一下:
sql 是一个字符串、
我想获取到 category 等号后面的值、 是动态 .....代表不定参数 意思是后面也不一定多加条件来查询、
且 sql 每个字符串的中间的空格多少也不固定、
求获得到 ? 的值
用indexOf subString 效果都不是那么好、
先谢谢了
[解决办法]
如果不考虑字符串中间恰好也有个?的话,还比较好办;如果要考虑这种情况,正则也无能为力啊。
用正则另一个吐血的问题就是碰到嵌套查询的处理。
[解决办法]
里面值只能是整数的、 不可能是?的 、
=========================
你直接匹配 "=\\s*\\d+\\s+" 怎么样
[解决办法]
就是为了获取category等号后面的值,是吧
for example
- Java code
String sql = "select * from user where category = someValue and xxx = yyy ...";String value = sql.replaceAll("(?i).*?category\\s*=\\s*(.*?)(\\s+.*|$)", "$1");System.out.println(value);
[解决办法]
我表示没有正确领会楼主意图,原来“category”这个字段是固定的。
不过如果遇到别名或近似名应该还是有风险的。
比如(我瞎掰,见谅):
where mycategory = 100
或者:
select *
from tableA a, table B b
where a.mycategory=b.yourcategory
[解决办法]
[解决办法]
哥们,MySQL 5.1 也支持分区哦,虽然性能没有Oracle强悍。
http://dev.mysql.com/doc/refman/5.1/zh/partitioning.html#partitioning-hash
[解决办法]
哥们再探讨下,虽然我个人更建议用分区而非程序手段。
或许另一个出路是:自己包装HibernateTemplate,也即代理模式。
直接在:hibernateTemplate.execute() 这个级别,完成所有想干的坏事。
反正你也是用的Spring框架,动态代理、拦截 之类的要做到并非难事,想想看Spring提供的事务控制就是用的这种模式。