用jdbc做查询操作时动态拼接参数报SQL语法错误的问题

来源:互联网 发布:java导出excel详解 编辑:程序博客网 时间:2024/06/05 15:14
问题描述:
自学用java开发后台服务的过程中,操作数据库的框架选用的jdbc。在用jdbc查询数据库时,有时需要动态的拼接查询语句(select...)所需要的参数,比如在servlet中获取到请求的url携带的参数IP:
String ip = request.getParameter("ip");
然后用这个ip动态的在servlet中拼接SQL语句:
String sql = "select *from <数据表名> where ip = "+ip;
然后用相关api执行SQL语句:

//省略连接数据驱动以及建立连接的代码
statement = connection.createStatement();
statement,executeQuery(sql);
上面的逻辑看似没有问题,但是结果却报错,主要是说从IP地址的第二个点号往后的语法有错,也就是拼接的类似192.168.xxx.xxx这样的参数时,会提示.xxx.xxx这附近的语法有错,而我手动拼接固定参数时,比如sql = "select *from xxx where ip=\"192.168.xxx.xx\"";这样却可以通过,初步怀疑是这个api的使用不熟,导致SQL语句写不正确。
解决方式:
用PreparedStatement代替Statement,借助通配符可以把参数进行挨个设置:
String SQL= "select *from xxx where ip = ?";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setString(1,ip);//拼接IP
statement.setXxx(2,...);//其他需要配置的参数
ResultSet set = statement.executeQuery();
...
注意:SQL语句中的通配符个数和preparedstatement设置的参数个数保持相同,也就是select中有几个?号,preparedstatement就调用几个setXxx()方法按顺序相对应。
总结:自学的过程中难免会踩到很多坑,建议新开始使用任何一种工具之前先快速的读一下它的使用文档,磨刀不误砍柴工。
原创粉丝点击