java Mysql的跨伺服器不同表結構的聯合查詢,兩不同伺服器上的不同表查詢
由於業務的需要,需要從兩個資料庫中取得資料,伺服器A儲存有角色使用者配置表和角色表,伺服器B有使用者表和公司表。先不管架構為什麼要這樣設計資料表,因為確實有這樣的需求,但是這確實是一個令人頭疼的事情,但是還是要面帶微笑~
解決思路一:
在資料庫中聯合不同資料庫的表中的DDL中加入
CONNECTION='mysql://root:[email protected]:3306/test/app1
但是很遺憾的是這個需要兩個表的表結構要一樣,這裡需要的四張表的結構都是不一樣的。。。。
解決思路二:
只能在java中把兩個資料的結果把他取出來,然後自己手工遍歷結果集,將他們拼接在一起,雖然這樣不便於重用,但是能解決迫在眉睫的問題啊,唉~
java怎麼在Servlet操作多個mysql資料庫詳細請看
下面是具體的java程式碼:
/** * 需要聯表查詢,jlp的角色和角色使用者配置,mdb的使用者和公司 * @return 返回DTO的json物件的資料 * @throws Exception */ public BackData byTableAndDataToMdb() throws Exception { Connection conJ=new DbConnect("A").getConnect();//取得jlp資料庫連結 Connection conM=new DbConnect("B").getConnect();//取得mdb資料庫連結 try{ //A資料庫的使用者角色配置和角色表的聯合查詢 String conSql="SELECT a.`UserId`,b.* FROM `UserRolesConfig` AS a LEFT JOIN `Roles` AS b ON a.`RoleId`=b.`RoleId`"; //查詢B資料庫使用者表 String userSql="SELECT Staff_Id,Staff_Name,Staff_No FROM `User`"; //查詢B資料庫公司表 String corSql="SELECT CorpId,CorpName,CorpType FROM `crop`"; //獲取資料庫結果集 PreparedStatement preCon = conJ.prepareStatement(conSql); PreparedStatement preUser = conM.prepareStatement(userSql); PreparedStatement preCor = conM.prepareStatement(corSql); ResultSet rsCon = preCon.executeQuery(); ResultSet rsUser = preUser.executeQuery(); ResultSet rsCor = preCor.executeQuery(); //獲取結果集的Map集合 Map<String,String> mapUser = getMapByResultSet(rsUser); Map<String,String> mapCro = getMapByResultSet(rsCor); //便利返回結果 ResultSetMetaData md = rsCon.getMetaData();//獲取鍵名 int count = md.getColumnCount();//獲取行的數量 String back=""; while (rsCon.next()) { back+="{"; for(int i=1;i<=count;i++){ if(md.getColumnName(i).equals("UserId")){ back+="\""+md.getColumnName(i)+"\":\""+rsCon.getString(i)+"\"," +(mapUser.get(rsCon.getString(i))==null?mapUser.get("null"):mapUser.get(rsCon.getString(i))); }else if(md.getColumnName(i).equals("CorpId")){ back+="\""+md.getColumnName(i)+"\":\""+rsCon.getString(i)+"\"," +(mapCro.get(rsCon.getString(i))==null?mapCro.get("null"):mapCro.get(rsCon.getString(i)));; }else{ back+="\""+md.getColumnName(i)+"\":\""+rsCon.getString(i)+"\""; } if(i!=count){ back+=","; } } back+="},"; } if(back.equals("")){ return new BackData(false,null, "查詢為空!"); }else{ return new BackData(true,"["+back.substring(0, back.length()-1)+"]",null); } }catch(Exception e){ e.printStackTrace(); throw new Exception("資料格式錯誤:"+e.getMessage()); }finally{ //關閉資料庫連線 try { conJ.close(); conM.close(); } catch (SQLException e) { e.printStackTrace(); } } } /** * 根據結果集便利資料返回Map集合 * @param rs 資料庫查詢結果集 * @return 執行成功返回Map集合,否則丟擲一個異常 * @throws Exception */ public Map<String,String> getMapByResultSet(ResultSet rs)throws Exception{ Map<String,String> map=new HashMap<String, String>(); ResultSetMetaData md = rs.getMetaData();//獲取鍵名 int count = md.getColumnCount();//獲取行的數量 while (rs.next()) { String key=rs.getString(1); String value=""; //便利id以外的資料 for(int i=2;i<=count;i++){ value+="\""+md.getColumnName(i)+"\":\""+rs.getString(i)+"\""; if(i!=count){ value+=","; } } map.put(key, value); } //提供沒有值的null String key="null"; String value=""; for(int i=2;i<=count;i++){ value+="\""+md.getColumnName(i)+"\":\"\""; if(i!=count){ value+=","; } } map.put(key, value); return map; }
執行結果:
相關推薦
java Mysql的跨伺服器不同表結構的聯合查詢,兩不同伺服器上的不同表查詢
由於業務的需要,需要從兩個資料庫中取得資料,伺服器A儲存有角色使用者配置表和角色表,伺服器B有使用者表和公司表。先不管架構為什麼要這樣設計資料表,因為確實有這樣的需求,但是這確實是一個令人頭疼的事情,但是還是要面帶微笑~ 解決思路一: 在資料庫中聯合不同資料庫的表中的DDL
mysql 復制表結構 / 從結果中導入數據到新表
ica 數據 cal null type records ted fault set 這只會復制結構: mysql> create table a like mysql1; Query OK, 0 rows affected (0.03 sec) mysql>
Mysql 將表結構匯入 Powerdesigner ,並將註釋作為 name 列
步驟一: 安裝MYSQL的ODBC驅動 Connector/ODBC 5.1.10 下載地址: 選擇win-32 MIS安裝包,進行直接安裝就可以了。 步驟二: 配置OBDC驅動連線 步驟三: 開啟PowerDesigner : 1)檔案->新建
二級考試MySQL數據庫怎麽用?mysql拷貝數據庫庫文件,復制還原後顯示表不存在怎麽辦
adb 輸入 顯示 怎麽辦 config 錯誤提示 當我 不同的 虛擬 問題環境,最近準備mysql考試,用的 **教育的題庫,做操作題的時候發現把題庫給的數據庫文件復制data目錄,能顯示表,但是不能操作表 1 查看mysql存放數據庫文件的目錄
HBASE介紹,HBASE的特點,表結構邏輯檢視,RowKey,列簇,時間戳,Cell
HBASE資料庫介紹,HBASE的特點,表結構邏輯檢視,RowKey,列簇,時間戳,Cell HBASE資料庫 1. Hbase基礎 1.1 hbase資料庫介紹 1、簡介nosql hbase是bigtable的開源java版本。是建立在hdfs之上,提供高可靠性、高效能、列儲
java常見的邏輯練習題有1234 四個數,能組成多少個不同且無重複數字的三位數 ,並且是多少?
題目:有1234 四個數,能組成多少個不同且無重複數字的三位數 ,並且是多少? 分析:首先題目要求的是組成三位數,所以我們可以先將所有的三位數拿出來,用for迴圈遍歷所有三位數,即: 第一步 for (int i = 100; i <= 999; i++)
Sqlite表結構讀取工具,word批量轉html,線上雲剪貼簿,檔案批量提取工具;
工欲善其事必先利其器,本週為您推薦工具排行 Sqlite表結構讀取工具,word批量轉html,線上雲剪貼簿,檔案批量提取工具; 本週我們又要發乾貨了,準備好接受了嗎? 為什麼是乾貨,就是因為不是水貨,因為幹了,所以是乾貨,也就是實打實的。當然哈
mysql 把一張表的某列,更新到另外一張表
mysql 把一張表的某列,更新到另外一張表 由於第二張表的列出來的是集合,但是我們只需要集合的第一條記錄 1、先把需要的列和對應關係導到另外臨時表中 create table tmp1 as select a.SCWXDID,a.wxff from wz_scwxd_sub a;
Informix資料表結構分析資料整理之欄位型別說明和查詢SQL語句
查詢所有Informix資料表字段型別SQL語句: select a.tabname,b.colname,b.coltype,case b.coltype when '0' then 'CHAR' when '1' then 'SMALLINT' when '2' the
JAVA逐行讀取指定檔案中的內容,每行中的不同內容用任意個空格分開。
檔案中的內容格式為(中間可以用任意個空格隔開):1 張三 品德優良a JACK SMArtpackage ReadFileLine;/*Readline類儲存檔案中每行中不同模組的資訊,並以類似指標的方式儲存每一行*/p
【097】Nginx實現一臺伺服器,兩個域名釋出不同的前端專案,並且兩個域名都用80埠。
有時候你可能需要在一個伺服器上,用 nginx 釋出兩個前端專案。並且這兩個前端專案使用不同的域名,域名都繫結80埠。本文說明此場景下的操作過程。Nginx使用的是 Docker 官方映象。本文依據的作業系統是 Linux Centos7.3 。 假設 you
一個鏈表中包含環,請找出該鏈表的環的入口結點
size alt 情況 每次 png -1 節點 pan mage 方法一、用HashSet來解決 1 public ListNode EntryNodeOfLoop(ListNode pHead){ 2 HashSet<ListNode> h
表單提交前,判斷webuploader是否上傳
time inpu urn success pre load click nbsp ces function busUpLoadImg(postUrl,id) { .......//省略部分不用修改 uploader.on(‘uploadSuccess‘, f
如果在一個標簽上兩類並用,css樣式表中引用時,兩個類必須寫在一起,不能有空格。
nbsp clas div 樣式表 ext style borde 引用 order 例: <html> <style type="text/css"> .mui-table-view-cell.mui-collapse{ bo
專案近半,表名已經確認,現在需要引用其他資料庫表,用同義詞
前提: 專案近半,表名已經確認,現在需要引用其他資料庫表,用同義詞 1.建立dblink 當用戶要跨本地資料庫,訪問另外一個數據庫表中的資料時,本地資料庫中必須建立了遠端資料庫的dblink,通過dblink本地資料庫可以像訪問本地資料庫一樣訪問遠端資料庫表中的資料。 c
No.20程式碼練習:求二進位制1的個數,二進位制奇偶位,輸出整數每一位,兩個數二進位制中不同位的位數
學習不易,需要堅持。 寫一個函式返回引數二進位制中 1 的個數 比如: 15 0000 1111 4 個 1 程式原型: int count_one_bits(unsigned int value) { // 返回 1的位數 }
兩個陣列提取相同元素,兩個陣列提取不同元素
兩個陣列提取相同元素 const getArrEqual = (arr1, arr2) => { let newArr = []; for (let i = 0; i < arr2.length; i++) { for (let j = 0; j <
flask 伺服器上面下載多個檔案 ,客戶端一次性上傳多個檔案
#encoding=utf8 import flask,os,sys,time from flask import request,send_from_directory import multiEmbeddings import tensorflow as tf &n
基於tk.mybatis:mapper實現的通用多表查詢,更新操作及上傳jar到maven中心倉庫(一)
一、前言 本人使用mybatis也有些年頭了。對於mybatis的使用也有點個人的心得。個人感覺mybatis在使用起來比hibernate方便且輕量級,這也是我喜歡使用mybatis的原因之一。但是每次在過了一段時間之後就會出現mybatis的xml檔案裡面的sql語
TP5 Join連結串列查詢,兩表有相同欄位會被覆蓋問題
一:可以定義需要哪張表的欄位 用別名。 //Join 連結串列查詢如果兩表中有相同的欄位,需要標明查詢哪個表中的欄位可以用別名 $data=Db::name('article')->alias('a') ->join('item i','a.itemid