首页 > 代码库 > mysql in语句在java中的使用
mysql in语句在java中的使用
做权限的时候,通过role角色中的roleid,在auth权限中查找角色对应的权限。
sql语句:
SELECT authName from auth where authId in (1,2,3,4,5)
in后面的东西即是角色所具有的各个权限的id,可以查出1,2,3,4,5对应的权限名字。
于是结合auth表,直接使用,sql语句为:
SELECT authName from auth where authId in (SELECT authIds from role where roleId=1)
后面查出来的即是1,2,3,4,5这样的内容。实际中,这样会出错,并不能查出预料的结果。in后面的内容应该是("字段1",“字段2”,...),上面那种查出来的,应该是这种格式的 in ("1,2,3,4,5"),把1,2,3,4,5这五个当做一个字符串了。
然后在java代码中,可以避免这个问题,主要是因为java的string的拼接,可以方便地组装in后面括号里面的数据格式。
下面一段示例代码,就是达到想要的结果。
public static void main(String[] args) throws Exception { // TODO Auto-generated method stub DbUtil dbUtil=new DbUtil(); Connection connection=dbUtil.getCon(); String hql="SELECT authIds from role where roleId=1"; PreparedStatement preparedStatement2=connection.prepareStatement(hql); ResultSet resultSet2=preparedStatement2.executeQuery(); String authid=null; while(resultSet2.next()){ authid=resultSet2.getString("authIds"); System.out.println("authids:"+resultSet2.getString("authIds")); } String sql="SELECT authName from auth where authId in ("+authid+")"; //拼接sql语句 PreparedStatement preparedStatement=connection.prepareStatement(sql); ResultSet resultSet=preparedStatement.executeQuery(); while(resultSet.next()){ System.out.println("authname:"+resultSet.getString("authName")); } }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。