目前分類:上課筆記 (32)

瀏覽方式: 標題列表 簡短摘要

 

作業:

下載"SalaryTestDBOO"Project

開啟SalaryTest.java 和 DataAccessObject.java

在SalaryTest內試著呼叫DAO 的getEmployee來print所有Employee.java裡的資料

 

//如果換電腦要確定有先import JDBC driver到project程式庫, 另外MySQL也已經灌好,connector J 裝好

 

我的答案:

無迴圈版

package com.hellopianoman.salarytestdb;

import java.sql.*;

public class SalaryTest {

    public static void main(String[] args) throws Exception {
        DataAccessObject dao = new DataAccessObject("com.mysql.jdbc.Driver", "jdbc:mysql://127.0.0.1/hr?user=root");
        Employee[] emps = dao.getEmployee();

        System.out.println(emps[1].get員工編號() + "," + emps[1].get姓名());

    }

}

 

鈴木保齡球 發表在 痞客邦 留言(0) 人氣()

  • 載入目標資料庫專用之JDBC驅動程式 (呼叫java.lang.Class類別中的forName()方法) (呼叫forName()方法所需參數為 "com.mysql.jdbc.Driver")

Class.forName("com.mysql.jdbc.Driver"); 

//Class name = 這段是參考forName的API文件來了解應該用什麼回傳值型態來接收

 

  • 通過DriverManager class與資料庫取得連線, 連線成功可取回Connection物件 (呼叫java.sql.DriverManager類別中的getConnection()方法) (呼叫getConnection()方法所需參數為 "jdbc:mysql://localhost/hr?user=root&password=xxxxx", 其中xxxxx須改為自已設定的資料庫最高管理員密碼)

DriverManager.getConnection("jdbc:mysql://localhost/hr?user=root");

//然後藉由API技術文件,或CTRL+按住method名(看API),確認getConnection的回傳值型態

Connection b = DriverManager.getConnection("jdbc:mysql://localhost/hr?user=root");

 

  • 通過Connection物件建立Statement物件 (呼叫java.sql.Connection中的createStatement()方法)

 Statement c = b.createStatement();

//原因複雜,需要了解為什麼上面的b可以代替c來實作createStatement()

 

  • 通過Statement物件對資料庫下達SQL資料查詢指令並取得回傳之ResultSet物件 (呼叫java.sql.Statement中的executeQuery()方法並給予"select * from employees"參數)

ResultSet d = c.executeQuery("select * from employees");

 

  • 取出ResultSet物件中的資料並進行所需運用 (呼叫java.sql.ResultSet中的next()方法後再呼叫java.sql.ResultSet中的getXXX()方法)

while (d.next()) {
            System.out.println(d.getString("empid") + " " + d.getString("name") + " " + d.getString("grade"));
        }

 

  • 關閉通道

 d.close();
 c.close();
 b.close();

 

鈴木保齡球 發表在 痞客邦 留言(0) 人氣()

1. 安裝MySQL資料庫伺服器 (檔案下載區內mysql-5.0.67-win32-Setup.exe, Google搜尋關鍵字 : mysql 下載)

//安裝階段使用預設值,設定階段選"Standard Configuration"

2. 安裝MySQL圖形化管理工具 (檔案下載區內mysql-workbench-community-6.1.6-win32.msi, Google搜尋關鍵字 : mysql gui)

3. 下載並解壓縮檔案下載區內SalaryTestMySQLDB.zip

4. 建立練習用資料庫, 點選 開始 > 程式集 > MySQL > MySQL Workbench > Database > Connection to Database > Hostname 輸入 localhost(或127.0.0.1),
    Username 輸入 root, Password輸入步驟1 MySQL安裝過程中所設定管理員密碼 > OK > File > Open SQL Script  > 選取步驟3解開的DB資料夾中的hr.sql > Execute

5. 下載並解壓縮MySQL JDBC驅動程式 (檔案下載區內mysql-connector-java-5.1.6.zip, Google搜尋關鍵字 : mysql jdbc)

6. 新增NetBeans程式庫, 工具 > 程式庫 > 新增程式庫 > 程式庫名稱 : MySQL > 加入 JAR/資料夾 > 選取步驟5解開的
    mysql-connector-java-5.1.6-bin.jar

7. 設定專案使用MySQL程式庫, 點選欲使用MySQL資料庫之NetBeans專案 > 檔案 > 專案屬性 > 程式庫 > 加入程式庫 > 選取MySQL程式庫

 

 

 

 


鈴木保齡球 發表在 痞客邦 留言(0) 人氣()

繼承的使用時機:

當希望使用"所有的"父類別的內容

當希望擴增父類別的功能

當希望修改父類別的功能

 

這個Shape練習的關鍵在如何消除多餘的程式碼,還有練習組、父、子的繼承關係。繼承時,建構式和封裝為private的變數都無法繼承,若子類別需要用到這類的資源,就必須想辦法。

什麼辦法:

 

 

 

然後,有時候子類別有重複的程式碼的時候,不一定代表她們一定就要搬到父類別,因為有時候反而會造成共用其他這個父類別的子類別,必須實做這個method。

 

 

Shape3D.class

 

publicabstractclass Shape3D extends Shape{

 

privatedoubleradius;

 

public Shape3D(String name, double radius){

鈴木保齡球 發表在 痞客邦 留言(0) 人氣()

建構式(Constructor)必須符合以下規定
1. 不能有回傳值, 也不能有void宣告
2. method名稱須與class名稱相同, 包含大小寫
3. 必須是動態
4. 建構式第一行一定要呼叫父類別中的其中一個建構式( super(參數); )或是呼叫同class中的另一個建構式( this(參數); ), 如果沒有做到, 則Java會自動在第一行增加super();
5. 如果class原始碼中沒有任何建構式則編譯器將自動加上預設建構式(不收參數的建構式).

 

 

1. private權限 - 僅供同class內所有method存取.
2. package權限 - 僅供同package中的所有class內的所有method皆可存取.
3. protected權限 - 供同package中的所有class內的所有method皆可存取, 或同package或不同package中的子類別存取
4. public權限 - 開放所有class的所有method皆可存取.


鈴木保齡球 發表在 痞客邦 留言(0) 人氣()

配合Main.java撰寫Rectangle(長方形), Circle(圓形), Triangle(三角形), Cylinder(圓柱體), Sphere(球體)等5個class.

其中Rectangle(長方形), Circle(圓形), Triangle(三角形)等3個class中須有getArea method能夠回傳面積, printArea method能夠在螢幕上顯示面積.

Cylinder(圓柱體), Sphere(球體)等2個class中除了須有getArea method能夠回傳面積, printArea method能夠在螢幕上顯示面積外, 尚須有getVolume method能夠回傳體積, printVolume method能夠在螢幕上顯示體積.


各形狀面積、體積公式如下 :

Rectangle(長方形)面積公式 : 長(length) * 寬(width)

Circle(圓形)面積公式 : 圓周率*半徑(radius)平方

Triangle(三角形)面積公式 : 假設a,b,c為三角形三邊長,d=總邊長/2, 面積=開根號(d(d-a)(d-b)(d-c))

Cylinder(圓柱體)面積公式 : 2*圓周率*半徑(radius)平方+2*圓周率*半徑*高(height)
Cylinder(圓柱體)體積公式 : 高(height)*圓周率*半徑(radius)平方

Sphere(球體)面積公式 : 4*圓周率*半徑(radius)平方
Sphere(球體)體積公式 : 3分之4*圓周率*半徑(radius)3次方


圓週率可讀取 Math class中的PI變數
開根號可呼叫Math class中的sqrt() method
次方計算可呼叫Math class中的pow() method

 

 

Main:

 

鈴木保齡球 發表在 痞客邦 留言(0) 人氣()

原始資料:

書名 : 三國演義
作者 : 羅貫中
售價 : 1000
----------------------------
書名 : 紅樓夢
作者 : 曹雪芹
售價 : 1000

以上,用物件導向載入記憶體中。

 

Book.java

package javaapplication2;

public class Book {

private String name;
private String author;
private double price;
private final String COMPANY = "三民書局";

public void setPrice(double price) {
if (price > 0) {
this.price = price;

鈴木保齡球 發表在 痞客邦 留言(0) 人氣()

下次上課:10/4

 

我的寫法:

 

package com.sun.www;

 

import javax.swing.JOptionPane;

 

publicclass Psy {

 

 

    public static void main(String[] args) {

        

        //方法3 輸入的值第一個即預設為第一樓

        String[][] quiz = new String[][]{

        

        {"1.經常對雙親採取反抗的態度 (y/n) ?"},

        {"2.能沉著地和討厭的人說話 (y/n) ?"},

        {"3.不會拒絕別人的請求 (y/n) ?"},

        {"4.周圍的人說你生氣時很恐怖 (y/n) ?"},

鈴木保齡球 發表在 痞客邦 留言(0) 人氣()

//陣列寫法

package com.hellopianoman.salarytestdb;

import java.sql.*;

public class SalaryTest {
    public static void main(String[] args) throws Exception {
        DataAccessObject dao = new DataAccessObject("com.mysql.jdbc.Driver", "jdbc:mysql://127.0.0.1/hr?user=root&password=");
        String[][] emp = dao.getEmployee();
        int[][] lev = dao.getLevel();
        int salary=0;
        for(int i=0; i<emp.length; i++){
            for(int j=0; j<lev.length; j++)
                if(lev[j][0]==Integer.parseInt(emp[i][3]))
                    salary=lev[j][1]+Integer.parseInt(emp[i][4])*lev[j][2];
            System.out.println("本薪:"+salary);
       }
    }
}

 

//物件導向(OO)寫法

package com.hellopianoman.salarytestdb;

鈴木保齡球 發表在 痞客邦 留言(0) 人氣()

 實務工作中,幾乎所有的method都是"動態"的。

Java原廠API大部分的method都是"靜態"的,所以不需要下"new"指令就可以使用。

口訣:

靜態在上面(藍圖),

動態在下面(實體)。

 

Blue J

 

Human andy = new Human();    //Human是Class名 也可以當作實體名

andy.set姓名("劉德華");               //大多透過method轉存資料,但也可以用: andy.姓名="劉德華"; 這樣寫也可以,但之後可能有問題

andy.set性別(true);                    //同上andy.性別=true;

(白板圖)

 

public class Main
{
public static void main(String[] args) {
Human andy=new Human();
andy.set姓名("劉德華");
andy.set性別(true);
andy.顯示();

鈴木保齡球 發表在 痞客邦 留言(0) 人氣()

我的寫法:

package javaapplication1;

import javax.swing.JOptionPane;

public class Psy {

public static void main(String[] args) {

//方法3 輸入的值第一個即預設為第一樓
String[][] quiz = new String[][]{
{"1.經常對雙親採取反抗的態度 (y/n) ?"},
{"2.能沉著地和討厭的人說話 (y/n) ?"},
{"3.不會拒絕別人的請求 (y/n) ?"},
{"4.周圍的人說你生氣時很恐怖 (y/n) ?"},
{"5.曾經認真考慮過要自殺 (y/n) ?"},
{"6.想嘗試如野獸般的sex (y/n) ?", "10", "8"},
{"7.因為個性很衝,所以常常與人發生口角 (y/n) ?", "8", "6"},
{"8.你的內心比外表還要狂野 (y/n) ?", "12", "11"},
{"9.最近的人際關係經常失和 (y/n) ?", "12", "13"},
{"10.能若無其事地說謊 (y/n) ?", "13", "14"},
{"11.經常會累積煩惱 (y/n) ?", "15", "10"},
{"12.對人的喜好很強烈 (y/n) ?", "15", "16"},
{"13.會帶頭說人壞話 (y/n) ?", "17", "14"},

鈴木保齡球 發表在 痞客邦 留言(0) 人氣()

//求籤程式一般版   

public static void main(String[] args) {
        String 籤詩1 = "第一籤\n\n  上吉\n  善才參世尊  寶馬盈門吉慶多。官司有理勸調和。萬般得利稱全福。一箭紅心定中科。";
        String 籤詩2 = "第三籤 上上 梁山伯訪友 瑞氣騰騰最吉祥。行人有利即還鄉。";
        String 籤詩3 = "第四籤 上上 唐三藏取經 在家富貴足安然。出外如同透碧天。秀士名登龍虎榜。農夫得遇大豐年。";

        double 亂數 = Math.random() * 3;
        double 整數亂數 = Math.floor(亂數);

        if (整數亂數 == 0) {                     
            System.out.println(籤詩1);
        } else if (整數亂數 == 1) {
            System.out.println(籤詩2);
        } else if (整數亂數 == 2) {
            System.out.println(籤詩3);
        }
    }
}

//求籤程式陣列版

public class NewClass {
     public static void main(String[] args) {
        

鈴木保齡球 發表在 痞客邦 留言(0) 人氣()

«12