<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      jdbc獲取所有表和表內列

      jdbc的metadata有gettables和gettablecolumns方法,只是這兩個方法用起來需要小心設置參數(shù)。
      獲取所有用戶表:

      var metaData = conn.getMetaData();
      var itbl = metaData.getTables(conn.getCatlog(),  null, "%", new String[] {"TABLE"});
      

      第一個參數(shù)catlog限定范圍為所連接的數(shù)據(jù)庫,但是不一定奏效,據(jù)deepseek,好像有的數(shù)據(jù)庫,getcatlog返回null。
      最后一個參數(shù)限定表的類型,普通表的類型就是"TABLE",這個比較穩(wěn)能過濾掉系統(tǒng)表。

      獲取表內所有列:

      var metaData = conn.getMetaData();
      ResultSet rs = metaData.getColumns(conn.getCatlog(), null, tblName, null);
      

      這個只能通過catlog限制范圍了,在mysql里奏效。否則有一個用戶表叫user就會跟系統(tǒng)表user重名,讀出來一大堆不相關的列。

      以下是完整工具類實現(xiàn),其中的jTemplate參數(shù)在new的時候手動傳入。

      package com.example.hibernate;
      
      import java.sql.Connection;
      import java.sql.DatabaseMetaData;
      import java.sql.ResultSet;
      import java.util.ArrayList;
      import java.util.List;
      
      import javax.sql.DataSource;
      
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.jdbc.core.JdbcTemplate;
      
      public class JDBCExtra {
      	private JdbcTemplate mJTemplate;
      	private DataSource mDS;
      	//private DatabaseMetaData mMetaData;
      	
      	JDBCExtra(JdbcTemplate jTemplate){
      		mJTemplate = jTemplate;
      		mDS = mJTemplate.getDataSource();
      	}
      	public String getCatlog() {
      		try (Connection conn = mDS.getConnection()) {
      			String catlog = conn.getCatalog();
      			//double check before we return
      			//據(jù)deepseek,有寫數(shù)據(jù)庫getcatlog返回null,例如postresql
      			var md = conn.getMetaData();
      			var url = md.getURL();
      			var segs = url.split("/");
      			var dbname = segs[segs.length-1];
      			if(!catlog.equals(dbname)) throw new Error("unrecognized catlog name");
      			return catlog;
      		}
      		catch(Exception e) {
      			throw new Error(e);
      		}
      	}
      	
      	public ArrayList<String> getAllTableNames(){
      		ArrayList<String> retlst = new ArrayList<String>();
      		try (Connection conn = mDS.getConnection()) {
                  DatabaseMetaData metaData = conn.getMetaData();
                  var catlog = this.getCatlog();
                  var itbl = metaData.getTables(catlog,  null, "%", new String[] {"TABLE"});
                  while(itbl.next())	{
                  	String tblname = itbl.getString("TABLE_NAME");
                	
                  	//二次檢查,table schema必須是"TABLE"才是用戶表
                  	var tbltype = itbl.getString("TABLE_TYPE");
                  	//System.out.println("tblname:"+tblname+", tbltype:"+ tbltype);
                  	if(!tbltype.equals("TABLE")) throw new Error("bad,"+tbltype);
                  	retlst.add(tblname);
                  }
      		}
      		catch(Exception e) {
      			throw new Error(e);
      		}
      		return retlst;
      	}
      	
      	public ArrayList<String> getTableColumnNames(String tblName) {
              ArrayList<String> columns = new ArrayList<>();
      
              try (Connection conn = mDS.getConnection()) {
                  DatabaseMetaData metaData = conn.getMetaData();
                  var connCat = conn.getCatalog();
                  ResultSet rs = metaData.getColumns(connCat, null, tblName, null);
      
                  // 遍歷結果集,獲取列名
                  while (rs.next()) {
                      String columnName = rs.getString("COLUMN_NAME");
                      columns.add(columnName);
                      /*
                      System.out.println("tblschm:"+rs.getString("TABLE_SCHEM")
                      		+", tblcat:"+rs.getString("TABLE_CAT")
                      		+ ", tblname: "+rs.getString("TABLE_NAME")
                      		+ ", colname: "+columnName);
                      		*/
                  }
              } catch (Exception e) {
              	throw new Error(e);
                 // e.printStackTrace();
              }
              return columns;
          }
      }
      
      posted @ 2025-03-13 09:50  shanxin1954  閱讀(124)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产精品污www在线观看| 亚洲乱码一区二区三区视色| 国产一级毛片高清完整视频版| 在线精品国产中文字幕| 欧美国产亚洲日韩在线二区| 日日碰狠狠添天天爽五月婷| 色av综合av综合无码网站| 四虎永久在线精品8848a| 久久这里有精品国产电影网| 宜昌市| 少妇激情一区二区三区视频| 中文字幕av无码免费一区| 久久av无码精品人妻系列试探| 特级毛片a片久久久久久| 久章草在线毛片视频播放| 吕梁市| 最新亚洲av日韩av二区| 久久人人97超碰人人澡爱香蕉| 亚洲天堂av日韩精品| 天天爽夜夜爽人人爽曰| 啦啦啦高清在线观看视频www| 怡红院一区二区三区在线| 国产精品九九九一区二区| 精品国内自产拍在线观看| 7878成人国产在线观看| 国产自产视频一区二区三区| 免费国产高清在线精品一区| 被黑人巨大一区二区三区| 亚洲人成电影网站色mp4| 乱人伦人妻中文字幕| 美腿丝袜亚洲综合第一页| 亚洲国产一区二区三区亚瑟| 国产91午夜福利精品| 97久久久精品综合88久久| 久久精品国产6699国产精| 国产最新AV在线播放不卡| 亚洲激情视频一区二区三区| 黄色三级亚洲男人的天堂| 国产偷国产偷亚洲高清午夜| 欧美野外伦姧在线观看| 武冈市|