一、NetBeans 設定連接資料庫
二、資料庫
三、執行緒
四、JDK7版新增加「平行運算」
一、NetBeans 設定連接資料庫
♠開啟專案 File→New Project
♠選擇Java 選擇Java Application
♠設定專案名稱、專案路徑 與 建立主程式類別
♠開啟後,在專案目錄底下有一個 Libraries 加入 資料庫的函式庫
♠選擇會使用到的 derby.jar derbyClient.jar derbyLocale_zh_TW.jar derbynet.jar derbytools.jar
♠切換到服務,找到 jdbc:derby://localhost:1527/sample[app on APP]
此為連接derby資料庫的語法
♠按右鍵選擇 連線
♠出現APP、Tables、Views、Procedures...等,代表已經連上資料庫
♠可以直接在Tables直接點選右鍵,就可以建立「資料表」
♠建立欄位,並設定格式內容
INTEGR 整數型別的資料
在Constraints裡有 主鍵 、 唯一 、 允許空值... 等 可以勾選設定
♠建立第二個欄位
VARCHAR 字串型別的資料
可以設定size 不管中英文size都是1
二、資料庫
使用關聯性的資料組織起來管理。
不過,還有另一種管理方式稱為「分散式資料庫」。
架構:
field欄位
record 紀錄
table 資料表
database 資料庫
要import java.sql.*;
連接資料庫要有url、userName、password資料,其中 url 不同的資料庫,其連接編號都會不同。例如:derby為1527。
連接資料庫時,必須使用try-catch-finally。
♠建立資料表
SQL語法建立資料表,並放入一個字串方便操作。
使用executeUpdate來建立資料表。
♠一樣使用SQL新增語法。
使用executeUpdate來增加紀錄。
♠檢查資料是否有新增成功。對MEMBER資料表按右鍵,點選View Data。
♠資料表的頁面
♠查詢資料表
帶入參數就可以來回查看紀錄
建立查詢物件時,必須使用executeQuery方法
利用查詢物件裡的方法來操作紀錄
♠使用getInt() 與 getString(),參數可以給數字,代表第幾個欄位
♠把查詢條件更改為 性別是 女 的
♠SQL語法~更新紀錄 使用executeUpdate()方法
♠SQL語法~刪除紀錄 使用executeUpdate()方法
♠增加紀錄的另一種寫法
可以彈性增加紀錄
原本SQL語法裡 應該要 values(4,\'Ban\',\'男\') 才有辦法新增Ban這筆紀錄,但現在values三個欄位資料都放上「?」的話,就可以直接打上字串來新增,而不需要使用跳脫字元 讓SQL語法成立。
♠使用JdbcRowSet連接資料庫,並開啟資料表
三、執行緒
JAVA提供一個介面Runnable 與 一個類別Thead 可以實作多執行緒的方法。建議implements Runnable,因為這樣就可以再繼承其他類別。
♠建立「可執行緒」Job1物件
類別 實作 Runnable
♠建立多執行緒
Job3 物件 繼承 Thread,所以不需要再用Thread建立執行緒。
直接 new Job3() 就是執行緒了...
直接繼承 Thread
這三個執行緒各自執行迴圈49次
♠執行緒存取同一物件相同資源時,會引發「競速情況(Race Condition)」
♠另一個 「競速情況(Race Condition)」的例子
♠為了解決「競速情況(Race Condition)」的問題,JAVA提供修飾字 synchronized 同步化。
第一種寫法:synchronized(變數){程式碼區塊}
第二種寫法:直接當成方法的修飾字 synchronized,同步化方法
第三種寫法:synchronized(物件){程式碼區塊}
♠除此之外,JAVA還提供另一個管道解決「競速情況(Race Condition)」的問題。
使用locks,建立ReentrantLock物件,來鎖定部分程式碼
♠另外,除了鎖定程式區塊之外,JAVA提供另一種方式「原生型態(atomic) 」來保證變數的操作過程不被分割。
Atomic套件:封裝了一系列的原生型態,並透過這些類別的方法封裝變數的存取過程與一些常見的判斷邏輯,使這些存取操作過程都變成不可分割的運算。
設定執行緒優先權 setPriorty(1~10),預設為5。
數字愈大,優先權愈高。
讓執行緒更靈活...
♠使用Object的wait()、notify()或notifyAll(),讓執行緒的操作可以更靈活。這些方法必須寫在有「關鍵字synchronized」的同步化區塊內。第一個類別:CountDownLatch,一個執行緒 等待 多個執行緒完成工作。
必須 import java.util.concurrent.CountDownLatch;
第二個類別:CyclicBarrier,多個執行緒 等待 一個執行緒完成工作
必須 import java.util.concurrent.CyclicBarrier;
使用 ExecutorService 物件,必須 import java.util.concurrent.*;。
建立執行緒池:
(1) Executors.newCachedThreadPool(); 會在必要時建立執行緒
(2) Executors.newFixedThreadPool(); 可在池中指定建立固定數量的執行緒
當使用執行緒池時,很容易產生Future物件。
Future物件:可以在將來取得結果。過些時候,再呼叫Future的get()方法取得結果。如果結果已經產生,get()方法會直接返回,否則會進入阻斷直到結果已傳回。
get()方法可以指定等待結果的時間。若指定的時間內無法傳回結果,就會丟出 java.util.concurrent.TimeoutException。
可以使用 isDone() 方法,確認結果是否已產生。
♠因為介面Runnable不能傳回值,故JAVA提供另一個介面Callable<T>可以傳回值。
Callable的作用與Runnable類似,可讓你定義想要的執行流程。
Runnable的run()方法無法傳回值,也無法拋出例外;
Callable的call()方法可以傳回值,也可以拋出受檢例外。
♠測試ExecutorService的invokeAny()方法
♠測試ExecutorService的invokeAll()方法
四、JDK7版新增加「平行運算」
♠分而治之(Divide and Conquer)問題,要有實體的多核心CPU
建立一個一般的遞迴關係式,計算費式數列
使用「平行運算」
必須要 import java.util.concurrent.RecursiveTask類別 extends RecursiveTask<T>,並實作 compute() 方法
使用平行運算的執行緒池
必須 import java.util.concurrent.ForkJoinPool;
取得CPU數量,建立擁有CPU數量的平行運算執行緒池
計算費式數列第40項,發現平行運算所花的時間多好多......但,計算費式數列第50項時,平行運算所花費的時間就比較少了!
後記:
1.今天講的東西很多,而且當下也沒有搞懂,只好回家自己找資料慢慢消化。直到5月13日才把資料整理好。
2.如果要摸熟資料庫,必須要再花時間才能完全瞭解。
3.多執行緒 與 平行運算 的概念非常深奧,目前不能駕馭它。
4.找資料的過程中,發現有一個非常好用的網站,名為SlideShare,網址:http://www.slideshare.net/。裡頭有許多投影片可以觀看。
沒有留言:
張貼留言