zoukankan      html  css  js  c++  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"));
            }
        }
  • 相关阅读:
    win7 64位系统,vs2010下配置OpenGL开发环境
    OpenCV stereo matching 代码 matlab实现视差显示
    Cocos2d-x 3.x游戏开发之旅
    芯片验证漫游指南
    名师讲坛:PHP开发实战权威指南
    Python带我起飞:入门、进阶、商业实战
    新编Excel会计与财务管理应用大全(2016实战精华版)
    CorelDRAW X7中文版完全自学宝典
    HTML5 canvas开发详解(第2版)
    中文版3ds Max 2014--VRay效果图制作实用教程
  • 原文地址:https://www.cnblogs.com/juepei/p/3785679.html
Copyright © 2011-2022 走看看