當前位置:首頁 » 數據倉庫 » list過濾資料庫
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

list過濾資料庫

發布時間: 2022-09-07 02:39:43

① java中,獲取一個list,將list里的數據按不通條件進行分類

public static void main(String[] args) {
//初始化數據
List<String> allList = new ArrayList<String>();
allList.add("學生A、語文、90分、第一學期");
allList.add("學生B、語文、80分、第一學期");
allList.add("學生A、英語、90分、第一學期");
allList.add("學生A、數學、90分、第一學期");
allList.add("學生B、英語、80分、第一學期");
allList.add("學生A、語文、90分、第二學期");
allList.add("學生B、數學、80分、第一學期");
allList.add("學生B、英語、80分、第二學期");
allList.add("學生A、數學、90分、第二學期");
allList.add("學生B、語文、80分、第二學期");
//定義姓名、學期、科目 數組
List<String> stuList = new ArrayList<String>();
List<String> subjList = new ArrayList<String>();
List<String> termList = new ArrayList<String>();
boolean stuContained = false;
boolean subjContained = false;
boolean termContained = false;
//從allList中 載入相上述三個類別,如果固定的話,可以手動指定
for (String string : allList) {
String[] strs = string.split("、");
stuContained = false;
subjContained = false;
termContained = false;
if(stuList.size()<=0) stuContained = false;
else{
for (String string2 : stuList) {
if(string2.equals(strs[0])){
stuContained = true;
break;
}
}
}
if(!stuContained)
stuList.add(strs[0]);
if(subjList.size()<=0) subjContained = false;
else{
for (String string2 : subjList) {
if(string2.equals(strs[1])){
subjContained = true;
break;
}
}
}
if(!subjContained)
subjList.add(strs[1]);
if(termList.size()<=0) termContained = false;
else{
for (String string2 : termList) {
if(string2.equals(strs[3])){
termContained = true;
break;
}
}
}
if(!termContained)
termList.add(strs[3]);
}
//構建結果數組
List<String> results = new ArrayList<String>();
String temp = "";
for (String string : stuList) {
temp ="姓名:"+string;
for (String string2 : termList) {
temp += ",學期:"+string2;
int score = 0;
for (String string3 : subjList) {
temp+= ","+string3+":";
for (String string4 : allList) {
String[] temps = string4.split("、");
if(temps[0].equals(string) && temps[1].equals(string3)&& temps[3].equals(string2)){
temp+= temps[2];
score += Integer.parseInt(temps[2].substring(0, temps[2].length()-1));
}
}
}
String[] temp2 = temp.split(",");
temp += ",總分:" + score +"分";
results.add(temp);
temp ="姓名:"+string;
}
}
//輸出結果
for (String string : results) {
System.out.println(string);
}
}

只是一種方案,又很多情況不確定,如果list中的數據可以作為javabean設置會方便些,如果數據是在資料庫中的,那麼使用sql語句會方便很多(上面的做法實際上是模擬了sql語句)

② 如何批量刪除list循環出來的值

list.clear()可以一次性清空所有元素。list.retainAll(Collection c)可以移除所有不在c里的元素,list.removeAll(Collection c)可以移除所有在c里的元素。其它的情況,只好一個個刪了。

如果是資料庫的話,就必須讀出所有想刪除的記錄,比如你說的「有一個全選按鈕,點擊了以後都選中了,然後點擊刪除按鈕」,那麼伺服器後台收到刪除按鈕發送的那些kh.Kehuid,就將所有這些id都用「,」隔開拼接起來,比如「1,3,4,6」這樣一個字元串,然後用類似
DELETE * FROM kehu WHERE Kehuid in (......)
....那裡就是這個字元串,就可以批量刪除資料庫內數據了。但這個其實不是Java的范疇而是SQL的范疇了。

③ C#中 list<object> 去除重復的數據 求最簡單的方法!!

//導入linq命名空間, 然後distinct一下就可以了. 關鍵代碼如下:

using System.Linq;

//比如,list實例為list

var obj = list.Distinct();

//或者麻煩點要根據list的欄位xxx過濾就是

var obj_1=from p in list select p.xxx distinct();

(3)list過濾資料庫擴展閱讀

list()函數與array()類似,只是它可以在一次操作中從一個數組內提取多個值,同時為多個變數賦值。其形式如下:

voidlist(mixed…)

從資料庫或文件中提取信息時,這種構造尤其有用。例如,假如你希望格式化並輸出從一個文本,文件中讀取信息。文件的每一行都包含用戶信息,如姓名、職業和喜愛的顏色,每一項用豎線分隔。典型的一行如下所示:

Nino Sanzi|profesional golfer|green

可以通過一個簡單的循環使用list()來讀取每一行,將各部分數據賦給變數,按照需要格式化並輸出數據。

④ java 用返回的list去查詢資料庫,返回list

分析你的邏輯應該如下:
1、查詢表1中符合條件的信息,獲取一個結果集合1;
2、基於結果集合1循環,檢索表2,獲取結果集合2。
如此,如果表1、表2間存在直接關聯關系(即直接使用結果集合1中的部分信息作為表2查詢的條件),那麼完全可以在後台將兩張表關聯查詢,這樣避免了通過java進行循環,在大數量級情況下會嚴重佔用內存。
如果表1,表2間沒有直接的關聯關系(即通過循環表1,判斷其中條件後按照其它的特定對照值去查詢表2),那麼仍然建議使用後台表關聯查詢,及將表1查詢的結果集按照不同的條件獲取的值轉換成對應的映射值後作為一個基準集合,然後將這個集合與表2關聯查詢即可。具體的sql語句,得根據你使用的資料庫和具體場景去編寫。

總之,此類情況,完全可以交由資料庫搞定,如果使用你現在的邏輯(即查詢表1,循環結果集1,然後查詢表2,獲取結果集2),雖然原則上沒有錯,但會增加很多內存開銷,在大數據量級的情況下,非常容易出現內存溢出的異常,並不作為合理的編碼方式。

⑤ 怎麼將java中list中的數據序列化到資料庫中,方便存取

請注意看如下代碼:
public List getObject(String sql, Object[] object) { //sql執行語句,object是你sql語句裡面的參數
List list = new ArrayList();
Connection con = null;
PreparedStatement pre = null;
ResultSet rs = null;
try{
con = C3P0Util.getInstance().getConnection(); //這是你獲得資料庫連接,你把這里改成調用你自己寫的jdbc方法
pre = con.prepareStatement(sql); //執行sql語句
if(object!=null){
for(int i=0;i<object.length;i++){
pre.setObject(i+1, object[i]); //給sql裡面的參數進行賦值
}
}
rs = pre.executeQuery();
while(rs.next()){
Users u = new User();
u.setUserName(rs.getString("UserName"));
u.setUserPas(rs.getString("UserPas")); list.add(u);
}
}catch(Exception e){
e.printStackTrace();
return null;
}finally{
C3P0Util.close(con, pre, rs); //關閉資料庫資源
}
return list; //返回list集合
}
注意:list裡面保存的是User對象的信息
你要獲得User對象的信息,那麼就要遍歷list
for(int i=0;i<list.size;i++){
User u = (User)list.get(i); System.out.println("UserName:"+u.getUserName());
System.out.println("UserPas:"+u.getUserPas());
} 上面是針對list裡面有很多個User對象,當然list裡面只有一個User對象,也是可以的。
如果你的list裡面只有一個User,那麼可以直接:User u = (User)list.get(0);
System.out.println("UserName:"+u.getUserName());
System.out.println("UserPas:"+u.getUserPas());
希望對你有幫助!

⑥ 如何從SharePoint Content DB中查詢List數據

Case 1簡單數據類型的自定義列表查詢
假設我們現在有一個Country列表,記錄了全球200多個國家和地區的中文名,英文名,建國日期,面積,人口等信息,整個列表只有字元串、日期、數字等簡單類型,沒有User,Lookup等數據類型,則整個List的數據都可以從[dbo].[AllUserData]查詢獲得,具體查詢步驟:
1. 查詢[dbo].[AllLists]找到ListId。
select *
from [dbo].[AllLists]
where tp_Title = 'Country'
由於整個網站集都是共用一個Content DB資料庫,所以可能會出現在多個網站中都創建了Country這個List的情況,那麼就會返還多條結果,這個情況下,就需要關聯AllWebs表,根據網站的Url來判斷到底哪個ListId才是我們需要的。
select w.FullUrl,l.tp_ID
from [dbo].[AllLists] l
inner join [dbo].[AllWebs] w
on l.tp_WebId=w.Id
where l.tp_Title = 'Country'
在找到了ListId後,接下來所有查詢都會用到這個Id。
2. 查詢[dbo].[AllUserData],找到需要查詢的列,並命名為別名。
假設第一步我們查詢出來的ListId是'F20E316B-EA24-4164-9437-BBB17C182691',那麼我們查詢Country這個列表的所有數據的SQL就是:
SELECT *
FROM AllUserData
where tp_ListId='F20E316B-EA24-4164-9437-BBB17C182691'
這個表的列非常多,在SharePoint 2013的環境中會更多,但是存儲數據的列都是用「數據類型+數字」來命名的。所以如果要找建國日期這個欄位對應的列,那麼就去看datetime1 datetime2等,如果要找面積,人口等數值類型的列,那就去看float1 float2等;如果要找中文名,英文名之類的字元串列,那就要看nvarchar1 nvarchar3等列。這里基本上都是靠眼睛來看的,根據查詢的結果推斷哪些欄位存儲了哪些數據。在得知每個欄位的對應後,即可修改查詢,將別名加上。
SELECT d.nvarchar1 as ChineseName,
d.nvarchar3 as EnglishName,
d.datetime1 as FoundingDate,
d.float1 as Area,
d.float2 as Population
FROM AllUserData d
where tp_ListId='F20E316B-EA24-4164-9437-BBB17C182691'
【注意:SharePoint並沒有在資料庫中以很方便的結構展現哪些列表欄位對應哪個資料庫欄位,在AllLists表中,雖然有個欄位tp_Fields,但是在SharePoint2010及之後,該欄位是壓縮的二進制,使用SQL是無法讀取的。所以根本不可能通過查詢資料庫得知哪個欄位的別名是什麼。】參考:http://stackoverflow.com/questions/8988098/how-could-i-find-the-fields-of-a-sharepoint-list-from-database-in-sharepoint-201
3. 過濾掉已刪除的數據。
如果數據經過刪除,然後又重新錄入,那麼我們就會發現,第2步的查詢結果會把刪除的和重新錄入的數據都查詢出來。SharePoint採用的刪除方法都是軟刪除,通過設置一個標志位來表示一條數據已經被刪除,所以我們只需要將刪除標識tp_DeleteTransactionId=0添加到where條件中,即可將未刪除的數據返回。
SELECT d.nvarchar1 as ChineseName,
d.nvarchar3 as EnglishName,
d.datetime1 as FoundingDate,
d.float1 as Area,
d.float2 as Population
FROM AllUserData d
where tp_ListId='F20E316B-EA24-4164-9437-BBB17C182691' and d.tp_DeleteTransactionId=0
4. 過濾掉歷史版本的數據。
如果這個列表開啟了版本控制,那麼我們查詢的結果可能包含多個版本的數據,而我們只需要最新版本的數據,不希望歷史版本數據出現在查詢中。AllUserData表中,使用tp_IsCurrentVersion欄位來標識這條數據是最新的當前版本還是歷史版本。
於是,查詢最新版本的SQL改為:
SELECT d.nvarchar1 as ChineseName,
d.nvarchar3 as EnglishName,
d.datetime1 as FoundingDate,
d.float1 as Area,
d.float2 as Population
FROM AllUserData d
where tp_ListId='F20E316B-EA24-4164-9437-BBB17C182691' and d.tp_DeleteTransactionId=0 and d.tp_IsCurrentVersion=1
5. 過濾掉內容審批未通過的數據。
如果這個列表開啟了內容審批,那麼就會出現多個最新版本的情況,一個是已經被審批通過的版本,另一個是修改後還沒有進行審批的版本。一般來說,我們是希望只有審批通過的才查詢出來,用戶進行修改後,只要審批狀態不是Approve,那麼就不應該出現在查詢結果中。在AllUserData表中,使用tp_ModerationStatus欄位來標識這行數據是否已經被審批通過。這是一個枚舉類型,其值為:
0 The list item is approved.
1 The list item has been denied approval.
2 The list item is pending approval.
3 The list item is in the draft or checked out state.
4 The list item is scheled for automatic approval at a future date.
這里,我們只要審批通過的數據,所以我們的SQL更新為:
SELECT d.nvarchar1 as ChineseName,
d.nvarchar3 as EnglishName,
d.datetime1 as FoundingDate,
d.float1 as Area,
d.float2 as Population
FROM AllUserData d
where tp_ListId='F20E316B-EA24-4164-9437-BBB17C182691' and d.tp_DeleteTransactionId=0 and d.tp_IsCurrentVersion=1 and tp_ModerationStatus=0

⑦ 如何利用List循環查詢資料庫相同名字代碼,希望朋友們給個完整代碼

你可以直接根據名字去查記錄然後返回一個datatable ,然後判斷datatable是否有數據

⑧ 在java中用list儲存資料庫數據,並到另一個資料庫中讀取,碰上問題,請教高手!

你的result1=ps.executeQuery("SELECT_(省略)";所以有值
但是result對象沒有看到有執行語句的代碼呀