作者TonyQ (骨头)
看板Web_Design
标题Re: [问题] SQL语法的使用
时间Tue Oct 9 17:20:27 2007
※ 引述《forkome (丁丁是个人材)》之铭言:
: 种类 子种类 书名
: 第一笔 小说 科幻 丁丁大战哥吉拉
: 第二笔 小说 科幻 星际大战丁丁
: 第三笔 小说 爱情 丁丁再爱我一遍
: 第四笔 杂志 生活 学丁丁减肥
: 第五笔 杂志 语言 跟丁丁学英文
: 目前小弟想把他放进三维阵列里来使用
: array[0] = 小说 array[0][0] = 科幻 array[0][0][0] = 丁丁大战哥吉拉
: array[1] = 杂志 array[0][1] = 爱情 array[0][1][0] = 丁丁再爱我一遍
: 小弟使用的方式是
: rs1 = select distinct 种类 from book
: while(rs1.next()){
: array[i] = rs1.getString(1)
: ↑把种类放进一维阵列
: rs2 = select distinct 子种类 from book where 种类 = rs1.getString(1)
: while(rs1.next()){
: array[i][j] = rs2.getString(1)
: ↑把子种类放进二维阵列
: rs3 = select * from book where 种类=rs1.getString(1) and 子种类 = rs2.getString(1)
: while(rs3.next()){
: array[i][j][k] = rs3.getString(1)
: ↑把书名放进三维阵列
: }
: }
: }
: 为了将结果放进阵列里,使用了三个RecordSet,若量大的话
: 会跑的很慢,上面是小弟使用的方式,不知有没有比较快的方式
: 使用的语言是java,主要是想减少RecordSet的使用
: 还是说~~没错,只能那样用
我应该说我回这篇是在开玩笑,还是我是说认真的呢,(思)
应该一半一半吧......既然都写了就贴出来了...XDXDXD
其实我是觉得你可以用 "分类;子分类;书名"这样的字串
然後用TreeSet存 , 这样也是可以达到用分类子分类排序的效果 ,
要取用的时候用iterator扫一次就可以找到你想要的了...
唯一的缺点大概是同样的分类/子分类/底下不能有同样的书名吧,
对於有些书只有版本号不同的时候可能有点不方便。
当然 这还是能改的 ,很多方式就是了...:P
至於底下这个无聊作 看看就好(核爆)
────────────────────────────────
/*懒得做资料库....用array替代先...*/
String[][] list={
{"小说","科幻","丁丁大战哥吉拉"},
{"小说","科幻","星际大战丁丁"} ,
{"小说","爱情","丁丁再爱我一遍"} ,
{"杂志","生活","丁丁再爱我一遍"} ,
{"杂志","语言","跟丁丁学英文"}
};
BookList listBook=new BookList();
for(int i=0;i<list.length;i++){
BookObj objBook=new BookObj(list[i][0],list[i][1],list[i][2]);
listBook.addBook(objBook);
}
printBook(listBook.getTypeBook("小说"));
printBook(listBook.getSubTypeBook("小说","科幻"));
────────────────────────────────
static public void printBook(BookObj[] array){
for(int i=0;i<array.length;i++){
System.out.println(array[i].m_strType+":"
+array[i].m_strSubtype+":"+array[i].m_strName);
}
}
────────────────────────────────
class BookObj{
String m_strType;
String m_strSubtype;
String m_strName;
public BookObj(String strType,String strSubtype,String strName){
m_strType=strType;
m_strSubtype=strSubtype;
m_strName =strName;
}
}
/*考虑到可能会有查找分类项目的需求 ,建立一个有分类的结构.*/
class BookList{
private HashMap m_setBook;
BookList(){
m_setBook=new HashMap();
}
boolean addBook(BookObj rBook){
if(!m_setBook.containsKey(rBook.m_strType)){ //分类
m_setBook.put(rBook.m_strType,new HashMap());
}
HashMap setSubType= (HashMap)m_setBook.get(rBook.m_strType);
if(!setSubType.containsKey(rBook.m_strSubtype)){ //子分类
setSubType.put(rBook.m_strSubtype,new ArrayList());
}
ArrayList aryBooks= (ArrayList)setSubType.get(rBook.m_strSubtype);
//aryBooksadd(rBook);
aryBooks.add(rBook);
return true;
}
BookObj getBook(String strBookname){
Iterator irType=m_setBook.values().iterator();
BookObj retBook;
while(irType.hasNext()){
Iterator irSubType= ((HashMap)irType.next()).values().iterator();
while(irSubType.hasNext()){
retBook = findBook((ArrayList)irSubType.next(),strBookname);
if(retBook!=null) return retBook;
}
}
return null;
}
BookObj[] getTypeBook(String strType){
ArrayList listRet=new ArrayList();
if(m_setBook.containsKey(strType)){
Iterator irSubType= ((HashMap)m_setBook.get(strType)).values().iterator();
while(irSubType.hasNext()){
listRet.addAll(((ArrayList)irSubType.next()));
}
}
return transToBook(listRet);
}
BookObj[] getSubTypeBook(String strType,String strSubType){
ArrayList listRet=new ArrayList();
if(m_setBook.containsKey(strType)){
HashMap setSubType=(HashMap)m_setBook.get(strType);
if(setSubType.containsKey(strSubType)){
listRet.addAll((ArrayList)setSubType.get(strSubType));
}
}
return transToBook(listRet);
}
private BookObj[] transToBook(ArrayList listBook)
{
BookObj[] aryBook=new BookObj[listBook.size()];
for(int i=0;i<listBook.size();i++){
aryBook[i]=(BookObj)listBook.get(i);
}
return aryBook;
}
private BookObj findBook(ArrayList listBook,String strBookname){
for(int i=0;i<listBook.size();i++){
BookObj bookTmp=(BookObj)listBook.get(i);
if(bookTmp.m_strName.equals(strBookname)) return bookTmp;
}
return null;
}
BookObj getBook(String strType,String strSubType,String strBookname){
if(!m_setBook.containsKey(strType)) return null; //分类不存在
if(!((HashMap)m_setBook.get(strType)).containsKey(strSubType))
return null; //子分类不存在
ArrayList listSubtypeBook = (ArrayList)
((HashMap)(m_setBook.get(strType))).get(strSubType);
return findBook(listSubtypeBook,strBookname);
}
int size(){
int size=0;
Iterator irType=m_setBook.values().iterator();
while(irType.hasNext()){
Iterator irSubType= ((HashMap)irType.next()).values().iterator();
while(irSubType.hasNext()){
size+= ((ArrayList)irSubType.next()).size();
}
}
return size;
}
}
--
▄▅▆▇███▇▆▅▄▃ ╰┼╯─╮ ╮
◥███████████◣ ╰┼╯=│=│
◥██████───────◣ *. ╯ ╯ ╯ の 物 语 .*
◥███████──────◣ ~ ◢◣ ◢◣
◥██████───────◤ ◥◤* 空白的世界.翼
*◥◤
◥██▁▂▃▄▅▆▇███▆▅▄▃▂▂
~telnet://tony1223.no-ip.info
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.132.59.247
※ 编辑: TonyQ 来自: 220.132.59.247 (10/09 17:22)
1F:推 forkome:对於经验不足的我,帮助良多,非常谢谢你用心的回我 10/10 13:16