2013年12月6日 星期五

JAVA基礎程式設計 7

容器進階應用

容器的泛型

容器可以預先定義內容物的類型,減少取出時轉型的麻煩。
泛型只需以下定義

Listlist; //這個List 裡面放的全是Map
Listlist // 這個List 裡面放的全是String

容器與迴圈

List、Map,以及繼承的類別。如前面的ArrayList、HashMap等。都是可以循序放入各種物件的容器。

        Map student;  //學生資料       
        Liststudents=new ArrayList(); //學生容器
       
        //建立1個學生
        student=new HashMap();
        student.put("no", "001");
        student.put("st_name", "John");
        students.add(student); //將學生裝入容器
       
        //建立2個學生
        student=new HashMap();
        student.put("no", "002");
        student.put("st_name", "Mary");       
        students.add(student);
       
        //循序將學生列出
        for(int i=0; i            System.out.println(students.get(i).get("no")+", "+students.get(i).get("st_name"));
           
        }


學生資料中要增加各項成績的List,只要在學生資料Map中增加1個key,裡面放入成績就可以了。

        Map student; //學生資料       
        Liststudents=new ArrayList();//學生容器
       
        Map score_info; //成績資料
        Listscore; //成績容器

       
        student=new HashMap();
        student.put("no", "001");
        student.put("st_name", "John");
       
       
        score=new ArrayList();  //建立第1個學生的成績容器
       
        score_info=new HashMap(); //建立1個成績資料
        score_info.put("cs_name", "國文");
        score_info.put("score", 90);
        score.add(score_info); //將成績裝入容器
       
        score_info=new HashMap();
        score_info.put("cs_name", "英文");
        score_info.put("score", 80);
        score.add(score_info);
       
        score_info=new HashMap();
        score_info.put("cs_name", "數學");
        score_info.put("score", 70);
        score.add(score_info);
       
        student.put("score", score); //將成績裝入學生資料中

       
        students.add(student);



取出的時候,則要用到之前所學的巢狀迴圈

      
        for(int i=0; i            System.out.println(students.get(i).get("no")+", "+students.get(i).get("st_name"));
          
            score=(List)students.get(i).get("score"); //將裝入的成績取出
          
            //以巢狀迴印出
            for(int j=0; j                System.out.println(score.get(j).get("cs_name")+":"+score.get(j).get("score"));
            }          
        }


完整的程式如下

        Map student; //學生資料       
        Liststudents=new ArrayList(); //學生容器
       
        Map score_info;//成績資料
        Listscore; //成績容器
       
        //建立1個學生
        student=new HashMap();
        student.put("no", "001");
        student.put("st_name", "John");
       
       
        score=new ArrayList(); //建立第1個學生的成績容器
       
        score_info=new HashMap();//建立1個成績資料
        score_info.put("cs_name", "國文");
        score_info.put("score", 90);
        score.add(score_info);//將成績裝入容器
       
        score_info=new HashMap();
        score_info.put("cs_name", "英文");
        score_info.put("score", 80);
        score.add(score_info);
       
        score_info=new HashMap();
        score_info.put("cs_name", "數學");
        score_info.put("score", 70);
        score.add(score_info);
       
        student.put("score", score); //將成績裝入學生資料中
       
        students.add(student);//將學生裝入容器
        //-----------------------------------------------
        student=new HashMap();
        student.put("no", "002");
        student.put("st_name", "Mary");
       
       
        score=new ArrayList(); //建立第1個學生的成績容器
       
        score_info=new HashMap();//建立1個成績資料
        score_info.put("cs_name", "國文");
        score_info.put("score", 95);
        score.add(score_info);//將成績裝入容器
       
        score_info=new HashMap();
        score_info.put("cs_name", "英文");
        score_info.put("score", 85);
        score.add(score_info);
       
        score_info=new HashMap();
        score_info.put("cs_name", "數學");
        score_info.put("score", 75);
        score.add(score_info);
       
        student.put("score", score); //將成績裝入學生資料中
       
        students.add(student);//將學生裝入容器
        //-----------------------------------------------
       
        //循序將學生列出       
        for(int i=0; i            System.out.println(students.get(i).get("no")+", "+students.get(i).get("st_name"));
           
            score=(List)students.get(i).get("score"); //將裝入的成績取出
           
            //以巢狀迴印出
            for(int j=0; j                System.out.println(score.get(j).get("cs_name")+":"+score.get(j).get("score"));
            }           
        }       
    }


資料庫與容器

1. 至 http://dev.mysql.com/downloads/connector/j/3.0.html 下載JDBC函式庫
2. 將當中的jar檔案複制到專案中的lib資料夾
3. 專案中右鍵選properties設置Java Build Path按下Add JARs...指定jar檔




建立新程式並在最上方加入 import java.sql.*;


import java.sql.*;
public class DateBaseTest {

    public static void main(String[] args) {
       

    }

}
建立連線
Class.forName("com.mysql.jdbc.Driver");
String host =" jdbc:mysql://資料庫地址:埠號/資料庫名稱";
String user="root";
String pass="spring";
Connection conn = DriverManager.getConnection(host, user, pass);       
Statement stmt = conn.createStatement();

建立查詢


List>list=new ArrayList>();//縱資料容器
Map columns;//橫資料容器       
ResultSet rs = stmt.executeQuery("SELECT * FROM Class LIMIT 10");//SQL查詢       
ResultSetMetaData metaData = rs.getMetaData();//原生查詢結果
裝入資料容器


while (rs.next()) {
             columns = new LinkedHashMap();
             for (int i = 1; i <= metaData.getColumnCount(); i++) {
                 columns.put(metaData.getColumnLabel(i), rs.getObject(i));
             }
             list.add(columns);
         }
應用

for(int i=0; i             System.out.println(list.get(i).get("ClassName"));
         }
完整程式碼

import java.sql.*;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
public class Main {

    public static void main(String[] args) throws ClassNotFoundException, SQLException {      
         Class.forName("com.mysql.jdbc.Driver");
         String host ="jdbc:mysql://192.168.0.1/db";
         String user="user";
         String pass="pass";
         Connection conn = DriverManager.getConnection(host, user, pass);        
         Statement stmt = conn.createStatement();      
         List>list=new ArrayList>();                Map columns;       
         ResultSet rs = stmt.executeQuery("SELECT * FROM Class LIMIT 10");        
         ResultSetMetaData metaData = rs.getMetaData();        
         while (rs.next()) {
             columns = new LinkedHashMap();
             for (int i = 1; i <= metaData.getColumnCount(); i++) {
                 columns.put(metaData.getColumnLabel(i), rs.getObject(i));
             }
             list.add(columns);
         }
        
         for(int i=0; i             System.out.println(list.get(i).get("ClassName"));
         }
    }
}

沒有留言:

張貼留言