精华内容
下载资源
问答
  • * 根据数据库表名获取字段名,返回字段名数组 * */ public String[] getDBColumns(String tableName) throws Exception { conn = this.getConn(); //字段名数组 String[] columns = new ...

    /**
    * 根据数据库表名获取字段名,返回字段名数组
    *
    */
    public String[] getDBColumns(String tableName) throws Exception
    {
    conn = this.getConn();
    //字段名数组
    String[] columns = new String[1];
    if(conn != null)
    {
    stmt = conn.createStatement();
    rs = stmt.executeQuery("SELECT * FROM "+tableName);
    //结果集元数据
    ResultSetMetaData rsMetaData = rs.getMetaData();
    //字段数量
    int colCount = rsMetaData.getColumnCount();
    columns = new String[colCount];

    //读取字段名到数组
    for(int i=1; i<=colCount; i++)
    columns[i-1] = rsMetaData.getColumnName(i);

    //关闭连接
    rs.close();
    stmt.close();
    conn.close();
    }
    return columns;
    }
    展开全文
  • 以前有小伙伴在公众号留言问过如何通过java获取数据库的所有表、及表里字段的信息,只是私信回复过。在最近的项目中架构部提出了一个数据源的配置需求,就是需要配置公司所有系统...
        

    640?wx_fmt=gif

    以前有小伙伴在公众号留言问过如何通过java获取数据库的所有表、及表里字段的信息,只是私信回复过。

    在最近的项目中架构部提出了一个数据源的配置需求,就是需要配置公司所有系统的数据库、表等信息,便于大数据部门抽数时过滤某些表的敏感字段,如身份证号、手机号等敏感字段。

    需要后端动态连接数据库,及获取相应数据库的表、字段等信息,就对这方面的东西进行了简单的整理,给出示例代码。便于以后还有小伙伴遇到这类问题,可以参考。

    示例代码如下:

    public class DatabaseUtilTest   {	
        private static final Logger logger = LoggerFactory.getLogger(DatabaseUtilTest.class);	
        private static final String DRIVER = "com.mysql.jdbc.Driver";	
        private static final String DATABASE_URL = "jdbc:mysql://ip:3306/databasename?useUnicode=true&amp;characterEncoding=utf8";	
        private static final String USERNAME = "xxx";	
        private static final String PASSWORD = "xxx";	
        private static final String SQL = "SELECT * FROM ";// 数据库操作	
        static {	
            try {	
                Class.forName(DRIVER);	
            } catch (ClassNotFoundException e) {	
                logger.error("can not load jdbc driver", e);	
            }	
        }	
        /**	
         * 获取数据库连接	
         *	
         * @return	
         */	
        public static Connection getConnection() {	
            Connection conn = null;	
            try {	
                conn = DriverManager.getConnection(DATABASE_URL, USERNAME, PASSWORD);	
            } catch (SQLException e) {	
                logger.error("get connection failure", e);	
            }	
            return conn;	
        }	
        /**	
         * 关闭数据库连接	
         * @param conn	
         */	
        public static void closeConnection(Connection conn) {	
            if(conn != null) {	
                try {	
                    conn.close();	
                } catch (SQLException e) {	
                    logger.error("close connection failure", e);	
                }	
            }	
        }	
        /**	
         * 获取数据库下的所有表名	
         */	
        public static List&lt;String&gt; getTableNames() {	
            List&lt;String&gt; tableNames = new ArrayList&lt;&gt;();	
            Connection conn = getConnection();	
            ResultSet rs = null;	
            try {	
                //获取数据库的元数据	
                DatabaseMetaData db = conn.getMetaData();	
                //从元数据中获取到所有的表名	
                rs = db.getTables(null, null, null, new String[] { "TABLE" });	
                while(rs.next()) {	
                    tableNames.add(rs.getString(3));	
                }	
            } catch (SQLException e) {	
                logger.error("getTableNames failure", e);	
            } finally {	
                try {	
                    rs.close();	
                    closeConnection(conn);	
                } catch (SQLException e) {	
                    logger.error("close ResultSet failure", e);	
                }	
            }	
            return tableNames;	
        }	
        /**	
         * 获取表中所有字段名称	
         * @param tableName 表名	
         * @return	
         */	
        public static List&lt;String&gt; getColumnNames(String tableName) {	
            List&lt;String&gt; columnNames = new ArrayList&lt;&gt;();	
            //与数据库的连接	
            Connection conn = getConnection();	
            PreparedStatement pStemt = null;	
            String tableSql = SQL + tableName;	
            try {	
                pStemt = conn.prepareStatement(tableSql);	
                //结果集元数据	
                ResultSetMetaData rsmd = pStemt.getMetaData();	
                //表列数	
                int size = rsmd.getColumnCount();	
                for (int i = 0; i &lt; size; i++) {	
                    columnNames.add(rsmd.getColumnName(i + 1));	
                }	
            } catch (SQLException e) {	
                logger.error("getColumnNames failure", e);	
            } finally {	
                if (pStemt != null) {	
                    try {	
                        pStemt.close();	
                        closeConnection(conn);	
                    } catch (SQLException e) {	
                        logger.error("getColumnNames close pstem and connection failure", e);	
                    }	
                }	
            }	
            return columnNames;	
        }	
        /**	
         * 获取表中所有字段类型	
         * @param tableName	
         * @return	
         */	
        public static List&lt;String&gt; getColumnTypes(String tableName) {	
            List&lt;String&gt; columnTypes = new ArrayList&lt;&gt;();	
            //与数据库的连接	
            Connection conn = getConnection();	
            PreparedStatement pStemt = null;	
            String tableSql = SQL + tableName;	
            try {	
                pStemt = conn.prepareStatement(tableSql);	
                //结果集元数据	
                ResultSetMetaData rsmd = pStemt.getMetaData();	
                //表列数	
                int size = rsmd.getColumnCount();	
                for (int i = 0; i &lt; size; i++) {	
                    columnTypes.add(rsmd.getColumnTypeName(i + 1));	
                }	
            } catch (SQLException e) {	
                logger.error("getColumnTypes failure", e);	
            } finally {	
                if (pStemt != null) {	
                    try {	
                        pStemt.close();	
                        closeConnection(conn);	
                    } catch (SQLException e) {	
                        logger.error("getColumnTypes close pstem and connection failure", e);	
                    }	
                }	
            }	
            return columnTypes;	
        }	
        /**	
         * 获取表中字段的所有注释	
         * @param tableName	
         * @return	
         */	
        public static List&lt;String&gt; getColumnComments(String tableName) {	
            List&lt;String&gt; columnTypes = new ArrayList&lt;&gt;();	
            //与数据库的连接	
            Connection conn = getConnection();	
            PreparedStatement pStemt = null;	
            String tableSql = SQL + tableName;	
            List&lt;String&gt; columnComments = new ArrayList&lt;&gt;();//列名注释集合	
            ResultSet rs = null;	
            try {	
                pStemt = conn.prepareStatement(tableSql);	
                rs = pStemt.executeQuery("show full columns from " + tableName);	
                while (rs.next()) {	
                    columnComments.add(rs.getString("Comment"));	
                }	
            } catch (SQLException e) {	
                e.printStackTrace();	
            } finally {	
                if (rs != null) {	
                    try {	
                        rs.close();	
                        closeConnection(conn);	
                    } catch (SQLException e) {	
                        logger.error("getColumnComments close ResultSet and connection failure", e);	
                    }	
                }	
            }	
            return columnComments;	
        }	
        public static void main(String[] args) {	
            List&lt;String&gt; tableNames = getTableNames();	
            System.out.println("tableNames:" + tableNames);	
            for (String tableName : tableNames) {	
                System.out.println("================start==========================");	
                System.out.println("==============================================");	
                System.out.println("ColumnNames:" + getColumnNames(tableName));	
                System.out.println("ColumnTypes:" + getColumnTypes(tableName));	
                System.out.println("ColumnComments:" + getColumnComments(tableName));	
                System.out.println("==============================================");	
                System.out.println("=================end=======================");	
            }	
        }	
    }

    如是获取多个数据库的信息,上面的DATABASE_URL,USERNAME,PASSWORD可以动态替换。


    出于安全性的考虑,在实际的编码中建议数据库的用户名和密码不要硬编码在代码中,即使出现也建议进行加密处理。数据库的用户名和密码是非常非常敏感的信息,任何时候都需要非常注意!!!

    锦鲤之路

    当你懂得了生活的本质后,你便会明白,所谓生活,其实就是一场修行,由繁入简的修行。

    幸福不会从天降,撸起袖子加油干。

    640?wx_fmt=gif

    展开全文
  • java获取数据库表名/字段名/注释

    千次阅读 2019-07-04 15:56:42
    package ... import java.sql.*; import java.util.HashMap; import java.util.Map; import java.util.Set;... * 获得数据库表的元数据 */ public class Test{ public static void main(Strin...
    package com.nf.lc.sql_meta_data;
    
    import java.sql.*;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Set;
    
    /**
     * 获得数据库表的元数据
     */
    public class Test{
    
        public static void main(String[] args) throws SQLException, ClassNotFoundException {
    
            HashMap<String, Object> computer_mall = (HashMap<String, Object>) getAllTableColumn();
    
            Set<String> tableNames = computer_mall.keySet();
            System.out.println("一共有表:" + tableNames.size() + "张");
            for (String tableName : tableNames) {
                System.out.println("===========================\r\n");
                System.out.println("表名:" + tableName);
    
                // <字段名,类型>  HashMap 集合
                HashMap<String, String> columnNames = (HashMap<String, String>) computer_mall.get(tableName);
    
                Set<String> columns = columnNames.keySet();
    
                for (String column : columns) {
                    System.out.println("字段名:" + column + " 类型:" + columnNames.get(column));
                }
    
                System.out.println("===========================\r\n");
            }
    
    
        }
    
        public static Map getAllTableColumn () throws SQLException, ClassNotFoundException {
    
            String driver = "org.mariadb.jdbc.Driver";
            String url = "jdbc:mariadb://localhost:3306/test";
            String username = "root";
            String password = "root";
            Map<String, Object> tableNameMap = new HashMap<>();
    
    
            //加载驱动
            Class.forName(driver);
    
            //获得数据库连接
            Connection connection = DriverManager.getConnection(url, username, password);
            //获得元数据
            DatabaseMetaData metaData = connection.getMetaData();
            //获得表信息
            ResultSet tables = metaData.getTables(null, null, null, new String[]{"TABLE"});
    
            while (tables.next()) {
                Map<String, String> columnNameMap = new HashMap<>(); //保存字段名
    
                //获得表名
                String table_name = tables.getString("TABLE_NAME");
                //通过表名获得所有字段名
                ResultSet columns = metaData.getColumns(null, null, table_name, "%");
                //获得所有字段名
                while (columns.next()) {
                    //获得字段名
                    String column_name = columns.getString("COLUMN_NAME");
                    //获得字段类型
                    String type_name = columns.getString("TYPE_NAME");
    //获得字段注释   注意: 对于此列,SQL Server 始终会返回 Null。
                    String remarks = columns.getString("REMARKS");
    //   https://docs.microsoft.com/zh-cn/sql/connect/jdbc/reference/getcolumns-method-sqlserverdatabasemetadata?view=sql-server-2017
    //                System.out.println(table_name+":"+column_name+":"+remarks);
    
                    columnNameMap.put(column_name, type_name);
                }
    
                tableNameMap.put(table_name, columnNameMap);
    
            }
    
            return tableNameMap;
        }
    
    
    }
    

     

    展开全文
  • MySQL根据表名获取列名的sql为: select COLUMN_NAME from information_schema.COLUMNS where table_name =’tableName” Oracle根据表名获取列名的sql为: select COLUMN_NAME from all_tab_columns where table...

    java 根据表名和关键字全文检索:
    MySQL根据表名获取列名的sql为:
    select COLUMN_NAME from information_schema.COLUMNS where table_name =’tableName”
    Oracle根据表名获取列名的sql为:
    select COLUMN_NAME from all_tab_columns where table_name =’tableName’


    一、数据库连接工具类

    
    public class JDBCUtil{
     /**
         * 获取数据库连接
         * @return 数据库连接
         */
      public static getConn(){
        Connection conn = null;
        Class.forName("com.mysql.jdbc.Driver");
        try{
         conn=DriverManager.getConnection("jdbc:mysql://ip:port/yourDatabaseName","userName","password")
    
        }catch(Exception e){
             e.printStackTrace();
          }
     retrun conn;
      }
      /**
         * 根据表名获取表的记录数目
         * @param conn 数据源链接
         * @param tableName 表名
         * @return 数目
         */
        public static int getCount(Connection conn, String tableName) {
            int total = 0;
            String sql = "select count(1) from " + tableName;
            PreparedStatement statement;
            try {
                statement = conn.prepareStatement(sql);
                ResultSet rs = statement.executeQuery();
                while (rs.next()) {
                    total = rs.getInt(1);
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return total;
        }
    }

    二、根据表名和关键字全文检索

    public JSONArray query(String tableName, String keyWord) {
                    Connection conn = JDBCUtil.getConn();
            ResultSet result = null;
            PreparedStatement pre = null;
            try {
                //根据数据库类型查询表的所有列名
                 String dataType = conn .getMetaData().getDatabaseProductName();
                 String columnSql = "";
                 switch (dataType) {
                case "MySQL":
                    columnSql = "select COLUMN_NAME from information_schema.COLUMNS where table_name ='"+tableName+"'";
                    break;
    
                case "Oracle":
                    columnSql = "select COLUMN_NAME from all_tab_columns where table_name ='"+tableName+"'";
                default:
                    break;
                }
                 pre = conn .prepareStatement(columnSql);
                 result = pre.executeQuery();
                 //拼接sql
                 StringBuilder sql = new StringBuilder("select * from "+tableName+" t where ");
                 while (result.next()) {
                    int i=1;
                    sql.append(sql.append("t."+result.getString(i))+" like '%"+keyWord+"%' or ");
                }
                sql = sql.delete(sql.length()-3, sql.length());//去掉sql末尾的or
                pre = con.prepareStatement(sql.toString());
                result = pre.executeQuery();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return resultSetToJsonArry(pre, result);
        }
    
    /**
         * 将ResultSet结果集转成JSONArray
         * 
         * @param pre
         * @param rs
         * @return
         */
      public JSONArray resultSetToJsonArry(PreparedStatement pre, ResultSet result) {
    
            if (result == null)
                return null;
    
            JSONArray array = new JSONArray();
            try {
                ResultSetMetaData rm= result.getMetaData();// 得到结果集(rs)的结构信息,比如字段数、字段名等
    
                int columnCount = rm.getColumnCount(); // 返回此 ResultSet 对象中的列数
    
                JSONObject json = null;
                while (result.next()) {
                    json = new JSONObject();
                    for (int i = 1; i <= columnCount; i++) {
                        if(!"".equals(result.getObject(i))){
                            if(result.getObject(i) instanceof Date){
                                json.put(rm.getColumnName(i), sdf.format(result.getObject(i)));
                            }else{
                                json.put(rm.getColumnName(i), result.getObject(i));
                            }
                        }else{
                            json.put(rm.getColumnName(i), "");
                        }
    
    
                    }
                    array.put(json);
                }
            } catch (SQLException | JSONException e) {
                e.printStackTrace();
            } finally {
                close(result);
                close(pre);
                close(con);
            }
            return array;
        }
    展开全文
  • java 获取mysql所有表名字段信息

    千次阅读 2019-01-23 17:55:03
    import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import ja....
  • 最近需要做一个根据表名字段更新表的功能,项目结构是springboot+jpa,记录如下:1.经查阅资料jpa和hibernate自带对原生sql的支持都是不支持该操作的,原因是:jpa和hibernate在进行参数替换的时候是使用占位符的...
  • 项目中使用 Hibernate JPA, 需求是根据 Entity的java 类,来获取所有的对应的数据库字段。 直接上代码。 用户类,对应数据库的user表 import org.hibernate.validator.constraints.NotBlank; import javax....
  • package com.sswt.utils; ... import java.sql.*; import java.util.HashMap; import java.util.Map;...import java.util.Set;... //获取数据库所有的表 public static void main(String[] args) throws SQLException,
  • 项目中使用 Hibernate JPA, 需求是根据 Entity的java 类,来获取所有的对应的数据库字段。直接上代码。用户类,对应数据库的user表import org.hibernate.validator.constraints.NotBlank;import javax.persistence.*...
  • package com.nf.lc.sql_meta_data; import java.sql.*; import java.util.HashMap; ...import java.util.Map;...import java.util.Set;... * 获得数据库表的元数据 */ public class GetSQLMetaData { ...
  • 主要介绍了SQL提取数据库表名字段名等信息的方法,文中向大家分享了实例代码,具有一定参考价值,需要的朋友可以了解下。
  • 两种方式获取所有表名字段

    千次阅读 2019-07-06 17:28:31
    可以通过两种方式,获取表名字段名,来拼接我们想要的sql语句。
  • 表名和对应的表中的字段信息都从数据表中动态获取 package com.table; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class ...
  • java hibernate 根据 @Table 注解 获取 数据库 表名 字段名 工具类  @author www.soservers.com 晚风工作室 标签: Hibernate [1].[代码] 根据 @Table 注解 获取 数据库 表名 字段名 工具类 @...
  • 用于批量更新PDM文件中表名字段名code和name同时为英文的情况,使用正则和Java代码进行批量替换,需要编译工具的支持如Eclipse
  • postgreSQL 中数据库名、 数据表名字段名大小写问题,这个问题很常见。 1 、数据库名中的每个字母区分大小写,这里就要求 SQL 语句中的连接语句中的数据库名中的每个字母和 postgreSQL 软件的数据库名 中的每个...
  • 这里以mysql 为例,最近项目需要外部异表数据源的载入,需要自动获取连接数据的库名,数据表名字段名和数据。现在做个笔记。想获取库里面的数据表名字段名和数据,网上也有很多,怎么写看个人爱好。 获取该连接...
  • MySQL根据表名获取数据表所有字段信息(用于导出数据字典) SELECT col.TABLE_NAME AS '表名', tab.TABLE_COMMENT AS '表说明', col.COLUMN_NAME AS '字段名', col.COLUMN_TYPE AS '数据类型', CASE IFNULL...
  • jdbc链接数据库,获取表名字段名和数据  import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql....
  • Hibernate中查询表名字段名以及字段类型等信息的工具类 package com.lmb.ui.util; import org.hibernate.cfg.Configuration; import org.hibernate.mapping.Column; import org.hibernate.mapping.Persistent...
  • 1,建立Connection Connection conn = ...//2,获得DatabaseMetaData的实例 DatabaseMetaData metaData = conn.getMetaData();//3,获取库名列表 ResultSet rs = metaData.getCatalogs(); while (rs.next()) ...{ ...
  • 其中表名是在用户填写完数据库连接信息之后,点击表名字段名的文本框之后触发方法,前端传给我数据库链接信息,我使用jdbc查询到之后,返回给前端的一个范围,用户在这个范围中选(可以打字,但是只能在我给的范围之内)....
  • 今天动手写课程设计,JDBC某处用到PreparedStatement,最初想将表名字段名、字段值都作为参数用?代替,可是实践之后发现行不通。 最初想这样写: preparedStatement = connection.prepareStatement("select * from...
  • 1.将表名字段名改为大写 见--...2.将表名字段名改为小写 ①改表名为小写 begin for c in (select table_name tn from user_tables where table_name <> lower(tab...
  • 基本概念 PreparedStatement:Statement的改良版,具有...1.根据测试占位符?不能用于表名 String strSql="SELECT * FROM ?"; try(PreparedStatement ps=conn.prepareStatement(strSql)) { ps.setObject(1,"per...
  • MyBatis构建sql时动态传入表名以及字段名转载:http://wendy-wxie.iteye.com/blog/1605193MyBatis,动态传入表名字段名的解决办法转载:http://luoyu-ds.iteye.com/blog/1517607用了mybatis很长一段时间了,但是...
  • 此文转自:...    hibernate中 查询表名字段名 收藏 /** * hibernate 实体、属性查询表名字段名工具类 * */   import java.util.Iterator; import org.hibernate.cfg.Configurati...
  • 这种情况下,就需要构建sql来动态传入表名字段名了。现在对解决方法进行下总结,希望对遇到同样问题的伙伴有些帮助。 动态SQL是mybatis的强大特性之一,mybatis在对sql语句进行预编译之前,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 42,966
精华内容 17,186
关键字:

java根据表名获取字段

java 订阅