qq_37903904
皮卡皮卡丘@
采纳率0%
2017-10-18 02:58 浏览 3.2k

java 怎么获取一条sql语句中所有的table

10

sql语句是特别复杂的,java 怎么获取一条sql语句中所有的table,求解答

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

12条回答 默认 最新

  • playboyanta123 show_code 2017-10-18 03:09

    你这意思没看懂,table应该是sql语句去获取的,然后java通过执行sql语句得到,
    获取所有table的sql就是:select table_name from information_schema.tables where table_schema='数据库名
    ' and table_type='base table';

    点赞 评论 复制链接分享
  • cpongo1 cpongo1 2017-10-18 03:11

    select table_name from information_schema.tables where table_schema='数据库名
    ' and table_type='base table'
    我试了一下 好像不行哦

    点赞 评论 复制链接分享
  • xsg1121 xsg1121 2017-10-18 03:18

    可以试着将java类A里面的属性(int id,string name)与sql语句里面的table(int id,varchar(20) name)一一对应起来,这样应该就可以获取所有的table了

    点赞 评论 复制链接分享
  • u010333070 yinpeng151 2017-10-18 03:20

    类似于这个的正则表达式,可以作为参考正则表达式获取sql语句中的表名

    点赞 评论 复制链接分享
  • wxd708854441 进击的攻城狮_wxd 2017-10-18 03:27

    分析一下你的sql中表名所处的位置,例如,from后面,jion后面,找出规则,字符串截取。这是我的思路

    点赞 评论 复制链接分享
  • pcwblover008 TheTimeIsPassing 2017-10-18 03:44
     package study;
    
    import java.sql.*;
    
    /**
     * jdbc访问所有表
     */
    public class FindAllTableJDBC {
        //定义MySQL的数据库驱动程序
        public static final String DB_DRIVER = "com.mysql.jdbc.Driver";
        //定义MySQL数据库的连接地址
        public static final String DB_URL = "jdbc:mysql://localhost:3306/db_learn";
        //MySQL数据库的连接用户名和连接密码
        public static final String DB_USER = "root";
        public static final String DB_PASS = "123456";
        public static void main(String[] args) {
            Connection conn = null;
            PreparedStatement pst = null;
            ResultSet ret = null;
            try{
                Class.forName("com.mysql.jdbc.Driver");
            }catch(ClassNotFoundException e){
                e.printStackTrace();
            }
            String sql = "select table_name from information_schema.tables where table_schema='db_learn' and table_type='base table';";
            try {
                conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASS);
                pst = conn.prepareStatement(sql);//准备执行语句
                ret = pst.executeQuery();
                while (ret.next()) {
                    String tableName = ret.getString(1);
                    System.out.println("tableName="+tableName);
                }
            } catch (SQLException e1) {
                e1.printStackTrace();
            }finally {
                if(ret!=null)
                {
                    try {
                        ret.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
                if(pst!=null){
                    try {
                        pst.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
                if(conn!=null){
                    try {
                        conn.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    
    
    点赞 评论 复制链接分享
  • longlong3207 longlong3207 2017-10-18 06:00
     public static void main(String[] args) {
            String sql="select table_name from information_schema.tables where table_schema='数据库名' and table_type='base table' from information_schema.tables where  from information_schema.tables where ";
            StringBuffer sb = new StringBuffer();
            List<Object> list = new ArrayList<>();
            sb.append(sql);
    
            Integer from = 0;
            Integer last = 0;
            while(last!=-1){
    
                from = sb.indexOf("from");
                last = sb.indexOf("where");
                System.out.println(sb.substring(from+5,last));//截取表
                list.add(sb.substring(from+5,last));//将表名放入list集合
                System.out.println(sb.substring(last+5, sb.length()-1));
                String aa=sb.substring(last+5, sb.length());//将sql截取,删除时java原则包括前不包括后
                sb.setLength(0);  //清空stringbuffer
                sb.append(aa);//将截取剩下的sql放入stringbuffer
                from = sb.indexOf("from");
                last = sb.indexOf("where");//获取截取后的where的下标
    
            }
    
        }
    
    
    点赞 评论 复制链接分享
  • eagle1024 eagle1024 2017-10-18 06:51

    获取所有from后的第一个字符串

    点赞 评论 复制链接分享
  • welling319 ZiglarXie 2017-10-18 06:57

    想到的 就是用正则去取 就是不知道sql的结构

    点赞 评论 复制链接分享
  • Kevin_chengguohao Kevin_成小浩 2017-10-18 07:17

    建议你看一下@TheTimeIsPassing 他回答的。已经很清楚了

    点赞 评论 复制链接分享
  • lanhaidon 好难编辑 2017-10-18 08:06

    你可以用sql查到数据库所有的表然后用表面到sql
    字符串里面indexOf找到表名,但是如果数据量大的话可能会慢

    点赞 评论 复制链接分享
  • qq_33727653 砸死接触 2017-10-18 09:41

    楼上的说的都一套一套的。。然而我还在呆呆中。。。不明白楼主说啥

    点赞 评论 复制链接分享

相关推荐