当前位置:首页 » 数据仓库 » 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对象没有看到有执行语句的代码呀