11. JDBC
JDBC:java操作數據庫的一組API(注意模仿)
1.JDBC驅動方式:
*JDBC-ODBC橋驅動(必須先建立數據源,性能比較低,不推薦使用)
*JDBC純驅動:必須把JDBC的jar包加入到構建路徑,一般使用JDBC純驅動
2.JDBC操作數據庫的流程
*使用Class.forName("")加載驅動程序
*使用DriverManager.getConnection()獲得Connection(連接)\
*使用Connction 創建語句(語句有Statement,PreparedStatement)
*執行語句
*關閉Connection
3.執行數據庫操作在JDBC分爲兩種
*更改數據庫:executeUpdate(),返回所影響的數據庫的行數。包括insert ,update,delete
*執行查詢: executeQuery(),返回結果集ResultSet。包括select
4.ResultSet的常用操作:
*ResultSet代表查詢出的結果集,並且包含遊標的概念
*ResultSet.getMetaData可以取得每一列的元信息:列名,列的類型,列的長度
*rs.next()使得遊標往下移一行,並且返回是否還有下一行的boolean值
*rs.getXXX可以取得遊標當前所指向的行裏面的信息
*在只進的ResultSet裏,取數據不允許倒退
*常用遍歷結果集的方式:while(rs.next()) { rs.getString(1) }
5.PreparedStatement
*可以對sql語句裏的佔位符進行設值setXXX
*執行executeUpdate()時不需要傳sql語句,因爲在創建 PreparedStatement的時候就指定了sql語句
*注意PreparedStatement與Statement
6.使用事務的方式
*禁止自動提交:設置Connection.setAutoCommit(false);
*在最後手動提交:Connection.commit();
*可以在數據操作中捕獲異常,一旦捕獲異常,使用Connection.rollBack();
7.批處理sql
*對於一個語句來將,可以使用addBatch()添加多個sql語句
*可以使用executeBatch一次執行所有加入的sql語句
8.建議大家使用Dao這中方式訪問數據庫
*實體類
*實體類的DAO
9.建議大家使用DBUtil管理取得連接與關閉連接
12. 圖形-佈局,常用Swing組件
圖形用戶界面(Swing常用組件,佈局管理器,事件模型,繪圖)
1.AWT與Swing
*AWT是重量級的組件,Swing是輕量級別組件,Swing是從awt的基礎上發展過來的
*swing依然使用awt裏面的佈局與事件模型
*組件:每一個界面元素都稱爲一個組件,如按鈕,文本框
*容器的概念:可以容納其他元素的組件,通過add()往容器裏面加入組件,每一個容器都可以設置自己的佈局管理器(Layout)
2.常用組件
*框架:JFrame(有一個默認的內容面板),一般來將,所有的其他組件都放在JFrame的默認面板上。通過JFrame.getContentPane()獲得默認內容面板
*面板:JPanel
*標籤:JLabel
*文本輸入框:JTextField
*文本域(多行文本):JTextArea
*單選按鈕:JRadioButton
*複選框:JCheckBox
*下拉列表:JComboBox
*按鈕:JButton
3。佈局管理器(流佈局Flowlayout,邊框佈局 BorderLayout,網格佈局GridLayout)
*使用setLayout(new FlowLayout())方法設置容器的佈局管理器
*Flowlayout:當拖動界面的時候,元素的大小不會改變,僅改變元素的位置,可以指定居中對齊,左對齊,右對齊等對齊方式
*BorderLayout:將界面分爲東西南北中五部分.:元素大小會發生改變,但是相對位置不變。除中間區域(自動填充)之外,區域裏面不加組件,默認大小爲0.如果往區域里加入多個組件,只顯示最後添加的組件。
*GridLayout:每個網格的大小相等,位置不發生改變,大小隨容器大小變化而變化
13. 圖形-事件處理,繪圖
圖形用戶界面
1.內部類:在一個類的裏面再定義一個類稱爲內部類
*內部類可以訪問外部類的所有的成員變量與成員方法
*如果想在外部實例化內部類,必須使用全名:外部類.內部類
2.事件模型:
*java事件採用委託模型(授權模型),即事件源本身不處理事件,交給事件監聽器來處理,因此需要把事件監聽器綁定到事件源裏面
*事件源,事件,事件監聽器。事件有許多種,不同的事件使用不同監聽器來處理
*事件觸發後,系統自動調用事件處理方法(不需要手動調用事件處理方法),並傳遞事件信息作爲方法參數
*事件編寫步驟:1.實現監聽器接口(完成事件處理方法);2.實例化實現監並綁定到事件源
3.事件實現方式
*外部類
*內部類
14. 多線程
線程:
1.線程的概念
*程序裏面不同的執行路徑,每一個執行路徑稱爲一個線程
*對於單cpu來講,某一具體的時刻,只會有一個線程在運行,但是CPU的速度非常快,表面上看起來是許多個線程並行執行
2.java中線程的創建與啓動
*兩種實現線程的方式:繼承Thread,實現Runnable接口
*線程的啓動:start.啓動線程,運行線程的run方法,run方法運行完線程就結束(注意,start只在Thread裏面有,start不同於run)
*注意一個Thread對象,只能一次調用start方法
*Thread與Runnable的區別:1:Runnable是接口,比Thread靈活(因爲java只能單繼承,可以同時實現許多接口);2.一個Runnable對象可以啓動許多個線程,線程之間共享對象(Thread不能共享對象)
3.線程的狀態:new ,可運行,運行中,阻塞,死亡
4.線程的調度
*Thread.sleep,使該線程睡眠
*join:線程合併(結果類似與方法調用)
*yield:線程讓出當前CPU,留給其他線程運行
*線程優先級:setPriority設置線程優先級
*後臺線程:setDaemon,必須在線程運行前設置爲後臺線程.當所有的前臺線程都結束了,後臺線程自動結束
*線程可以指定名字,取得當前線程的方法Thread.currentThread();
5.線程同步
*synchronized:同一時刻,只會有一個線程執行synchronized代碼塊
6.線程間通訊
*wait(),notify(),notifyAll是Object類中定義的方法
*wait():使得運行該代碼的線程進入對象的等待池進行等待,線程進入阻塞狀態,wait的線程一直阻塞,指導其他線程調用該對象的notify方法喚醒它。
*notify():喚醒對象等待池中的一個線程,使得被喚醒的線程進入可運行狀態,如果等待池中沒有線程,notify什麼也不做。
*notifyAll():喚醒對象等待池中的所有線程
*wait(),notify,notifyAll都必須放在同步代碼塊裏面(Synchronized代碼塊).
*wait()的線程會釋放對象的鎖,而Thread.sleep的線程不會釋放對象的鎖
7.線程安全的類:多線程的環境下使用類或者調用類的方法不會造成同步問題的類稱爲線程安全的類
*JDK1.1以前,java的集合框架中有一些線程安全的類:如Vector(被ArrayList代替),HashTable(被HashMap代替)
15. IO
16. 網絡
17. 類與對象的生命週期
18. 補充知識點
代碼書寫規範
代碼跟蹤調試
有時候需要知道程序的具體執行過程,這時候跟蹤程序很有用
跟蹤調試程序
*設置斷點
*調試,跟蹤程序的運行
*程序的運行過程,變量的值