小问题,关于java函数的传参

深夜代码党 2010-11-25 11:12:43
在我做一个关于图书系统查询的时候发现一个问题,我查询图书可以通过书名,作者,ISBN,出版社等查询
比如可以只通过书名,或者通过书名与作者,或者是书名,作者,出版社
那么也就是说我的search函数的参数个数是不定的,而且参数的类型也不定
而java不支持默认参数
那么我要写的函数将会包括search(string author),search(string book),search(string author,string book)....
假设最多有3个参数还好办,只要写3+2+1=6个函数重载,那么如果最多有4个参数,5个参数呢,岂不是要写很多函数的重载?
...全文
203 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
kateyin 2010-12-06
  • 打赏
  • 举报
回复
你说的问题在函数内部处理一下不行么?
sql查询语句就是个字符串,初值设为 String sql="SELECT * FROM Book WHERE ";
然后可以把你需要的参数名存在一个数组里,比如
String names[length]={"title","author","press"}
然后在你的函数内部遍历所有参数,
for(int i=0;i<length;i++)
{
if(某个参数为空){就什么也不做}
else
{sql+=names[i]+参数值}
}
这样应该能生成楼主要求的查询语句了吧。。。
lxy15329 2010-12-06
  • 打赏
  • 举报
回复
在具体进行处理时,先判断某些条件是不是传递进来的有效值,这样函数中会有很多种处理方法
深夜代码党 2010-12-05
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ticmy 的回复:]

传javabean呗,bean中的参数若没有设置就用默认的呗
[/Quote]
不是呀,你想啊,我不管用什么默认值,我数据库里存的东西都是有值的,默认值不能匹配啊!
比如一本书存在数据库中,其中title="c++ primer", author="a", press="b", ISBN="1234";
而我现在输入的信息仅为 title="c++ primer"和author="a",那我的press与ISBN的输入默认值为空的话也是不能在数据库中找到相应书籍的。
龙四 2010-12-05
  • 打赏
  • 举报
回复
传javabean呗,bean中的参数若没有设置就用默认的呗
深夜代码党 2010-12-05
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 java_cxrs 的回复:]

两种办法
1.用map接所有的参数 参数就传这个map 然后在方法里循环这个map 判断不为空的 添加 条件查询语句
2.在一个方法把所有参数都穿过 如method(参数1,参数2,参数3,。。。)
然后在方法判断 不为空的添加查询语句
[/Quote]

恩,这种方法我想过了,但是我现在要在数据库中搜索哦,是用JDBC连SQLserver。
如果我判断书名不为空,则我写
sql="SELECT * FROM Book WHERE title=\'"+title;
ResultSet r=excuteQuery(sql);
这样能找到满足title条件的结果集,但是再判断作者呢?
我总不能在得到的结果集中查找吧?
不善^ 2010-12-03
  • 打赏
  • 举报
回复
两种办法
1.用map接所有的参数 参数就传这个map 然后在方法里循环这个map 判断不为空的 添加 条件查询语句
2.在一个方法把所有参数都穿过 如method(参数1,参数2,参数3,。。。)
然后在方法判断 不为空的添加查询语句
kateyin 2010-12-03
  • 打赏
  • 举报
回复
同意楼上的观点,具体说就是定义HashMap<String,String> preferences作为参数,第一个String表示参数类型,比如"author","book",第二个参数就是具体的值了。
youngpeer 2010-11-25
  • 打赏
  • 举报
回复
参数传Map,将属性名和属性值以键值对的形式封装到Map中,这样添加多少都没问题。

58,453

社区成员

发帖
与我相关
我的任务
社区描述
Java Eclipse
社区管理员
  • Eclipse
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧