如何比较数据库的前后两记录?

MickyXia 2009-09-03 02:22:34
数据库中要比较前后两记录(已经排序过),假设库中有如下字段:

读者ID,读者姓名,所借书名, 图书条码
10001 张三 java编程思想 100123
10001 张三 红楼梦 100111
10002 李四 三国演义 111012
10003 王五 软件工程 100009
现在从数据库中读出借书记录,要求根据读者ID,把读者所借的图书名合并到一个字段中(用逗号分隔),望大家给个思路也行,小弟正在学习JAVA,试了几种方法,实现不了。
...全文
134 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
closewbq 2009-09-04
  • 打赏
  • 举报
回复
思路:map来存放。
1.map的key就是读者的ID,
2.map中如果没有ID,就添加<ID,对象信息>
3.map存在ID的话,将对象信息中的所借书名和图书条码进行拼接。
4.输出显示
【如鱼饮水】 2009-09-04
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 mickyxia 的回复:]
要的是一个人一个记录.比如:
10001 张三 {JAVA编程思想,红楼梦}
10002 李四 {三国演义}
10003 王五 {软件工程}
[/Quote]

http://topic.csdn.net/u/20080818/16/70ac692d-d261-4e90-ad4e-2b0b9445e71a.html
这个你可以参考~~·

但是你书名合到一块
图书条码 不用合并吗?
MickyXia 2009-09-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 qq271175778 的回复:]
select 所借书名 from tab where 读者ID=’1001‘

返回一个list

循环list
加到一个String 或者StringBuf....

是这样吗?


还是要改变数据库
一个人只留一条记录
[/Quote]

要的是一个人一个记录.比如:
10001 张三 {JAVA编程思想,红楼梦}
10002 李四 {三国演义}
10003 王五 {软件工程}
heweiAndPippo 2009-09-03
  • 打赏
  • 举报
回复
package com.test;

public class People {
private String id="";
private String name="";
private String bookId="";
private String bookName="";
public String getBookId() {
return bookId;
}
public void setBookId(String bookId) {
this.bookId = bookId;
}
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}


package com.test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

public class Test {

/**
* @param args
*/
public static void main(String[] args) {


People p1=new People();
p1.setId("10001");
p1.setName("张三");
p1.setBookId("100123");
p1.setBookName("java编程思想");

People p2=new People();
p2.setId("10001");
p2.setName("张三");
p2.setBookId("100111");
p2.setBookName("红楼梦");

People p3=new People();
p3.setId("10002");
p3.setName("李四");
p3.setBookId("10009");
p3.setBookName("三国演义");


List<People> list= new ArrayList();
list.add(p1);
list.add(p2);
list.add(p3);

for(People p:list)
{
System.out.println("id:"+p.getId()+" 姓名:"+p.getName()+" 书名:"+p.getBookName());

}
System.out.println("aaaaaaaaaaaaaa");


Map map=getMap(list);
for(Iterator it=map.entrySet().iterator();it.hasNext();)
{
Map.Entry entry=(Map.Entry)it.next();
People p=(People)entry.getValue();
System.out.println("id:"+p.getId()+" 姓名:"+p.getName()+" 书名:"+p.getBookName());

}

}
public static Map getMap(List<People> list)
{
Map m=new HashMap();
for(People p:list)
{

if(m.containsKey(p.getId()))
{
People pp=(People)m.get(p.getId());
p.setBookId(p.getBookId()+","+pp.getBookId());
p.setBookName(p.getBookName()+","+pp.getBookName());
m.remove(p.getId());

}
m.put(p.getId(),p);




}
return m;
}



}
BearKin 2009-09-03
  • 打赏
  • 举报
回复


import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

public class TestMap {

public static void main(String[] args) {
Map<String, Person> persons = listToMap(getPersonList());
for (Iterator<String> it = persons.keySet().iterator(); it.hasNext();) {
Person person = persons.get(it.next());
System.out.println("借书人:" + person.getName() + "\n所借书:" + person.getBookName());
}
}

// 这个是数据库返回的结果集 先用List代替吧
public static List<Person> getPersonList() {
List<Person> persons = new ArrayList<Person>();
persons.add(new Person("BearKin", "三国演义"));
persons.add(new Person("BearKin", "Java编程思想"));
persons.add(new Person("BearKin", "盗墓笔记"));
persons.add(new Person("兜兜装豆豆", "火影忍者"));
persons.add(new Person("兜兜装豆豆", "钢之炼金术师"));
persons.add(new Person("兜兜装豆豆", "Javascript动态网页开发详解"));
persons.add(new Person("兜兜装豆豆", "JAVA数据结构"));
return persons;
}

// 具体的转换方法
public static Map<String, Person> listToMap(List<Person> list) {
Map<String, Person> persons = new HashMap<String, Person>();
for (Iterator<Person> it = list.iterator(); it.hasNext();) {
Person person = it.next();
Person person1 = null;
if ((person1 = persons.get(person.getName())) != null) {
person1.setBookName(person1.getBookName() + "," + person.getBookName());
} else {
persons.put(person.getName(), person);
}
}
return persons;
}
}

class Person {
private String name;
private String bookName;

public Person(String name, String bookName) {
this.name = name;
this.bookName = bookName;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getBookName() {
return bookName;
}

public void setBookName(String bookName) {
this.bookName = bookName;
}

}
BearKin 2009-09-03
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 v05120s 的回复:]
Java codepublicclass TestH {publicstaticvoid main(String[] args) {
TestH th=new TestH();
List<BorrowBook> bb=new ArrayList<BorrowBook>();
BorrowBook b1= th.new BorrowBook("1001","张三","java编程思想","100123");
BorrowBook b2= th.new BorrowBook("1001","张三","红楼梦","100111");
BorrowBook b3= th.new BorrowBook("1001","张三","三国演义","111012");
BorrowBook b4= th.new BorrowBook("1002","李四","三国演义","111012");
BorrowBook b5= th.new BorrowBook("1003","王五","软件工程","100009");
bb.add(b1);
bb.add(b2);
bb.add(b3);
bb.add(b4);
bb.add(b5);
List<BorrowBook> newbb=new ArrayList<BorrowBook>();//***************读者ID无序****************// Set<String> set=new HashSet<String>();for(BorrowBook b : bb){
String sno= b.getSno();if(set.contains(sno)){for(BorrowBook k : newbb){if(k.getSno()== sno){
k.setBookName(k.getBookName()+","+ b.getBookName());break;
}
}
}else{
set.add(sno);
newbb.add(b);
}
}//***************读者ID无序****************////***************读者ID有序****************///*int len = bb.size();
if(len != 0){
newbb.add(bb.get(0));
for(int i = 1; i < len; i++){
BorrowBook k1 = bb.get(i);
BorrowBook k2 = bb.get(i - 1);
if(k1.getSno().equals(k2.getSno())){
BorrowBook k3 = newbb.get(newbb.size() - 1);
k3.setBookName(k3.getBookName() + "," + k1.getBookName());
}else{
newbb.add(k1);
}
}
}*///***************读者ID有序****************//for(BorrowBook b : newbb){
System.out.println(b.getSname()+":"+ b.getBookName());
}
}class BorrowBook{private String sno;//读者IDprivate String sname;//学生姓名private String bookName;//图书名称private String bookList;//图书条形码public BorrowBook(String sno,String sname,String bookName,String bookList){this.sno= sno;this.sname= sname;this.bookList= bookList;this.bookName= bookName;
}public String getBookList() {return bookList;
}publicvoid setBookList(String bookList) {this.bookList= bookList;
}public String getBookName() {return bookName;
}publicvoid setBookName(String bookName) {this.bookName= bookName;
}public String getSname() {return sname;
}publicvoid setSname(String sname) {this.sname= sname;
}public String getSno() {return sno;
}publicvoid setSno(String sno) {this.sno= sno;
}
}
}

代码能运行,但个人还是感觉不太好!~期望高手的答案!~
[/Quote]

都告诉你用MAP了 最好的实现是用SQL语句 取出来的数据就是完好的 其次就是MAP了 只可惜语句偶不会的说..
v05120s 2009-09-03
  • 打赏
  • 举报
回复

public class TestH {

public static void main(String[] args) {
TestH th = new TestH();
List<BorrowBook> bb = new ArrayList<BorrowBook>();
BorrowBook b1 = th.new BorrowBook("1001","张三","java编程思想","100123 ");
BorrowBook b2 = th.new BorrowBook("1001","张三","红楼梦","100111");
BorrowBook b3 = th.new BorrowBook("1001","张三","三国演义","111012");
BorrowBook b4 = th.new BorrowBook("1002","李四","三国演义","111012");
BorrowBook b5 = th.new BorrowBook("1003","王五","软件工程","100009");
bb.add(b1);
bb.add(b2);
bb.add(b3);
bb.add(b4);
bb.add(b5);
List<BorrowBook> newbb = new ArrayList<BorrowBook>();

//***************读者ID无序****************//
Set<String> set = new HashSet<String>();
for(BorrowBook b : bb){
String sno = b.getSno();
if(set.contains(sno)){
for(BorrowBook k : newbb){
if(k.getSno() == sno){
k.setBookName(k.getBookName() + "," + b.getBookName());
break;
}
}
}else{
set.add(sno);
newbb.add(b);
}
}
//***************读者ID无序****************//

//***************读者ID有序****************//
/*int len = bb.size();
if(len != 0){
newbb.add(bb.get(0));
for(int i = 1; i < len; i++){
BorrowBook k1 = bb.get(i);
BorrowBook k2 = bb.get(i - 1);
if(k1.getSno().equals(k2.getSno())){
BorrowBook k3 = newbb.get(newbb.size() - 1);
k3.setBookName(k3.getBookName() + "," + k1.getBookName());
}else{
newbb.add(k1);
}
}
}*/
//***************读者ID有序****************//

for(BorrowBook b : newbb){
System.out.println(b.getSname() + ":" + b.getBookName());
}
}

class BorrowBook{
private String sno; //读者ID
private String sname; //学生姓名
private String bookName; //图书名称
private String bookList; //图书条形码
public BorrowBook(String sno,String sname,String bookName,String bookList){
this.sno = sno;
this.sname = sname;
this.bookList = bookList;
this.bookName = bookName;
}
public String getBookList() {
return bookList;
}
public void setBookList(String bookList) {
this.bookList = bookList;
}
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public String getSno() {
return sno;
}
public void setSno(String sno) {
this.sno = sno;
}
}
}


代码能运行,但个人还是感觉不太好!~期望高手的答案!~
sulee27661 2009-09-03
  • 打赏
  • 举报
回复
用Map来做 循环结果集 判断map中是否有该用户ID的键 有的话则修改对应的值 否则新增键值
heweiAndPippo 2009-09-03
  • 打赏
  • 举报
回复
思路有很多,用java的话非常简单。
1:java实现
把表中的数据放入list(list里面是hashmap),然后通过循环把数据放入另一个list(list里面也是hashmap)也就是一个判断if(){

}
2:用游标
【如鱼饮水】 2009-09-03
  • 打赏
  • 举报
回复
select 所借书名 from tab where 读者ID=’1001‘

返回一个list

循环list
加到一个String 或者StringBuf....

是这样吗?


还是要改变数据库
一个人只留一条记录
BearKin 2009-09-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 imasmallbird 的回复:]
数据库行列转换
[/Quote]

如果是用语句的话我也不会 不过用JAVA就容易多了 查询出来之后你创建个MAP 然后把查询出来封装好的JAVABEAN放到MAP里 把借书者的名字作为键值 然后往MAP里插入 如果说MAP里原本没有该人的话则put 如果有的话则get 并将该对象的对应书名的属性加上你想加的东西
imasmallbird 2009-09-03
  • 打赏
  • 举报
回复
APOLLO_TS 2009-09-03
  • 打赏
  • 举报
回复
public HashMap<String,List> getSLApp(ParamsContext pcn) {
{
张三,{java编程思想,红楼梦 }
}
}

//

List--->

org.apache.commons.lang
Class StringUtils
String join(java.util.Collection collection, char separator)
Joins the elements of the provided Collection into a single String containing the provided elements.





81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧