Java開發IDE(Integrated Development Environment,集成開發環境),大多圖書上使用的是Eclipses或NetBeans,考慮到咱們課程會涉及到Android開發,而用於Android開發的IDE Android Studio(CN)是在Intellij IDEA上構建的,因此咱們上課推薦的IDE是Intellij IDEA。php
Intellij IDEA是收費軟件,但對學生和老師免費,能夠到這裏申請無償使用。html
IDEA的使用過程當中要慢慢掌握經常使用的快捷鍵(哪一個經常使用就刻意記憶一下,參考十大Intellij IDEA快捷鍵).IDEA的快捷鍵以下圖所示:java
返回目錄
mysql
使用tar -xzvf jdk-8u121-linux-x64.tar.gz; mv jdk-8u121 ~/jdk
進行解壓(注意時間不一樣,xuxxx會不一樣),而後經過vi .bashrc
添加下面幾行設置環境變量:linux
export JAVA_HOME=~/jdk export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
參考「程序開發與信息安全工具箱」,下載並安裝Atom.android
參考別出心裁的Linux命令學習法,使用mkdir -p Code/20155200
(改爲本身的學號)創建學習目錄。git
注意:安裝JDK選擇安裝目錄,安裝過程當中會出現兩次安裝提示:第一次是安裝JDK,第二次是安裝Public JRE。建議JDK安裝在本身選擇的目錄中,Public JRE安裝在默認目錄中。(不能都安裝在Java文件夾的根目錄下,JDK和Public JRE安裝在同一文件夾會出錯)程序員
沒有DOS命令基礎的同窗先學習「Java程序設計的DOS命令基礎」,參考相關內容github
參考「程序開發與信息安全工具箱」,下載並安裝Atom.web
參考「程序開發與信息安全工具箱」,下載並安裝PowerCMD。參考Java程序設計的DOS命令基礎學習DOS命令的使用。
打開PowerCMD,使用mkdir Code\20155200
(改爲本身的學號)創建工做目錄。
參考「程序開發與信息安全工具箱」,下載並安裝JDK:
atom Hello.java
(注意把代碼保存到exp1目錄中)或vim Hello.java
(建議你們花點時間學習一下Vim)編輯Hello.java,並輸入如下代碼:1 package ljp; 2 import java.util.Scanner; 3 public class Hello{ 4 public static void main(String[] args){ 5 System.out.println("Input your first name, please:"); 6 Scanner s = new Scanner(System.in); 7 String name = s.next(); 8 System.out.println("Hello " + name + " !"); 9 } 10 }
注意代碼的第一行,這會影響到咱們使用javac編譯代碼的方式。
注意代碼第二行,咱們使用到Java類庫中的類時,要用import導入相關的類(你能夠暫時理解爲C語言中include的功能),導入路徑能夠查看JDK幫助文檔,好比咱們使用到了Scanner類,路徑見下圖中紅框:
javac -d . Hello.java
命令編譯代碼,輸入java ljp.Hello
命令運行IDEA的安裝在Linux,Windows,macOS下安裝都差很少,咱們以Windows下的安裝爲例說明。
New
按鈕:System.out.println()
,這是使用IDE的便利之處:程序設計中有三類錯誤:
邏輯錯誤是你們學習中遇到最多的錯誤,要學會經過調試(Debug)來定位邏輯錯誤,經常使用技能有:
在命令行中調試Java程序參考Java中使用JDB,咱們在這學習在IDEA中調試程序。
1 public class HelloJDB { 2 public static void main(String[] args) { 3 int i = 5; 4 int j = 6; 5 int sum = add(i, j); 6 System.out.println(sum); 7 8 sum = 0; 9 for(i=0; i< 100; i++) 10 sum += i; 11 12 System.out.println(sum); 13 } 14 15 public static int add(int augend, int addend){ 16 int sum = augend + addend; 17 return sum; 18 } 19}
Ctrl+F8
快捷鍵),以下圖所示,咱們在第5行設了個斷點:Alt+Shift+F9
快捷鍵)開始調試Java程序,咱們能夠看到程序停留在了第5行,以下圖所示:Step Into
會跳入方法實現,Step Over
會直接執行完方法,實際使用中咱們優先使用Step Over
,只有方法執行出錯了,說明程序問題在被調用方法中,這時再回來經過Step Into
進入方法進行調試。咱們單擊一下Step Over
圖標(或F8
),程序停在了第5行,這時查看變量i的值,會看到sum等於11。以下圖所示:Resume
圖標(快捷鍵F9
),程序就運行到了第11行,以下圖所示:Ctrl+Shift+F8
打開斷點設置窗口,選中「Remove Once hit」Ctrl+Shift+F8
打開斷點設置窗口,選中「Remove Once hit」;最簡單的方法是把光標移到第12行,使用菜單「Run」->「Toggle Temporary Line Breakpoint」或使用快捷鍵Ctrl+Alt+Shift+F8
;斷點上面有個1,運行一次就消失了:Alt+F9
,以下圖.掌握這些調試的基本技巧能夠解決你們平時遇到的大部分問題,其餘調試方法能夠參見參考資料。
Java編程的學習 《積極主動敲代碼,使用JUnit學習Java》給出了學習方法。其中提到的JUnit就是Java單元測試工具。
現代軟件工程講義 2 開發技術 - 單元測試 & 迴歸測試中說:
你的RP是由你的程序質量決定的。
這一章講的是兩人合做,既然程序是兩我的寫的,那就會出現一我的寫的模塊被另外一我的寫的模塊調用的狀況。不少誤解、疏忽都發生在兩個模塊之間。如何能讓本身寫的模塊儘可能無懈可擊?單元測試就是一個頗有效的解決方案。
什麼是單元測試?單元測試(unit testing),是指對軟件中的最小可測試單元進行檢查和驗證。對於單元測試中單元的含義,通常來講,要根據實際狀況去斷定其具體含義,如Java裏單元指一個類。
編程是智力活動,不是打字,編程前要把幹什麼、如何幹想清楚才能把程序寫對、寫好。與目前很多同窗一說編程就打開編輯器寫代碼不一樣,我但願同窗們養成一個習慣,當大家想用程序解決問題時,要會寫三種碼:
咱們經過一個例子說明如何寫這三種代碼。
需求:咱們要在一個
MyUtil
類中解決一個百分制成績轉成「優、良、中、及格、不及格」五級製成績的功能。
咱們先寫僞代碼
,僞代碼能夠用漢語寫,推薦你們用英語寫,僞代碼與具體編程語言無關,不要寫與具體編程語言語法相關的語句(如用malloc分配內存
,這樣只能用C語言編程了),僞代碼
從意圖層面來解決問題,最終,僞代碼
是產品代碼
最天然的、最好的註釋。針對上面的問題,咱們能夠經過僞代碼這樣解決:
百分制轉五分制: 若是成績小於60,轉成「不及格」 若是成績在60與70之間,轉成「及格」 若是成績在70與80之間,轉成「中等」 若是成績在80與90之間,轉成「良好」 若是成績在90與100之間,轉成「優秀」 其餘,轉成「錯誤」
簡單吧?想用編程來解決問題,首先要用僞代碼
代表本身想明白了。
有了僞代碼
,咱們用特定編程語言翻譯一下,就是可用的產品代碼
了,固然,咱們在這要選用Java,小菜一碟了,翻譯好的MyUtil.java
以下:
public class MyUtil{ public static String percentage2fivegrade(int grade){ //若是成績小於60,轉成「不及格」 if (grade < 60) return "不及格"; //若是成績在60與70之間,轉成「及格」 else if (grade < 70) return "及格"; //若是成績在70與80之間,轉成「中等」 else if (grade < 80) return "中等"; //若是成績在80與90之間,轉成「良好」 else if (grade < 90) return "良好"; //若是成績在90與100之間,轉成「優秀」 else if (grade < 100) return "優秀"; //其餘,轉成「錯誤」 else return "錯誤"; } }
咱們在IDEA中建一個項目,輸入上面的代碼:
產品代碼
寫完了,若是別人要使用這個代碼,把MyUtil.java
拷給他就能夠了。可是做爲負責任的你,確定會擔憂本身的程序會有Bug。若是別人用本身的代碼發現一堆Bugs,那多沒面子!怎麼辦?寫了產品代碼
,咱們還要寫測試代碼
,證實本身的代碼沒有問題。Java編程時,程序員對類實現的測試叫單元測試
。類XXXX
的單元測試
,咱們通常寫建一個XXXXTest
的類,針對MyUtil
類咱們寫一個MyUtilTest.java
的測試模塊,代碼以下:
public class MyUtilTest { public static void main(String[] args) { // 百分制成績是50時應該返回五級制的「不及格」 if(MyUtil.percentage2fivegrade(50) != "不及格") System.out.println("test failed!"); else System.out.println("test passed!"); } }
這裏咱們設計了一個測試用例(Test Case)
,測試用例
是爲某個特殊目標而編制的一組測試輸入、執行條件以及預期結果,以便測試某個程序路徑或覈實是否知足某個特定需求。這裏咱們的測試輸入是「50」,預期結果是「不及格」。
在 IDEA中咱們把產品代碼放在src
目錄中,把測試代碼放在test
目錄中,右鍵單擊項目,在彈出的菜單中選擇New->Directory
新建一個目錄:
輸入目錄名test
:
test
目錄中放的也是Java代碼,但IDEA不知道test
中放的是源代碼。在命令行中咱們知道要設置SOURCEPATH
環境變量,在IDEA中咱們右鍵單擊test
目錄,在彈出的菜單中選擇Mark Directory as->Test Sources Root
就能夠了:
在IDEA中運行結果以下,測試結果符合預期:
只有一組輸入的測試是不充分的,咱們把通常狀況都測試一下,代碼以下:
public class MyUtilTest { public static void main(String[] args) { //測試正常狀況 if(MyUtil.percentage2fivegrade(55) != "不及格") System.out.println("test failed!"); else if(MyUtil.percentage2fivegrade(65) != "及格") System.out.println("test failed!"); else if(MyUtil.percentage2fivegrade(75) != "中等") System.out.println("test failed!"); else if(MyUtil.percentage2fivegrade(85) != "良好") System.out.println("test failed!"); else if(MyUtil.percentage2fivegrade(95) != "優秀") System.out.println("test failed!"); else System.out.println("test passed!"); } }
在Eclipse中運行結果以下,測試結果符合預期:
咱們不能只測試正常狀況,下面看看異常狀況如何,好比輸入爲負分或大於100的成績,代碼以下:
public class MyUtilTest { public static void main(String[] args) { //測試出錯狀況 if(MyUtil.percentage2fivegrade(-10) != "錯誤") System.out.println("test failed 1!"); else if(MyUtil.percentage2fivegrade(115) != "錯誤") System.out.println("test failed 2!"); else System.out.println("test passed!"); } }
運行程序發現負分時與指望不一致,終於找到了一個bug,緣由是判斷不及格時沒有要求成績大於零。咱們修改MyUtil.java
,增長對負分的判斷,代碼以下:
public class MyUtil{ public static String percentage2fivegrade(int grade){ //若是成績小於0,轉成「錯誤」 if ((grade < 0)) return "錯誤"; //若是成績小於60,轉成「不及格」 else if (grade < 60) return "不及格"; //若是成績在60與70之間,轉成「及格」 else if (grade < 70) return "及格"; //若是成績在70與80之間,轉成「中等」 else if (grade < 80) return "中等"; //若是成績在80與90之間,轉成「良好」 else if (grade < 90) return "良好"; //若是成績在90與100之間,轉成「優秀」 else if (grade < 100) return "優秀"; //若是成績大於100,轉成「錯誤」 else return "錯誤"; } }
再次運行測試,測試結果符合預期,以下圖所示:
測試夠了嗎?還不夠,通常代碼在邊界處最容易出錯,咱們尚未測試邊界狀況,咱們對輸入爲「0,60,70,80,90,100」這些邊界狀況進行測試的代碼以下:
public class MyUtilTest { public static void main(String[] args) { //測試邊界狀況 if(MyUtil.percentage2fivegrade(0) != "不及格") System.out.println("test failed 1!"); else if(MyUtil.percentage2fivegrade(60) != "及格") System.out.println("test failed 2!"); else if(MyUtil.percentage2fivegrade(70) != "中等") System.out.println("test failed 3!"); else if(MyUtil.percentage2fivegrade(80) != "良好") System.out.println("test failed 4!"); else if(MyUtil.percentage2fivegrade(90) != "優秀") System.out.println("test failed 5!"); else if(MyUtil.percentage2fivegrade(100) != "優秀") System.out.println("test failed 6!"); else System.out.println("test passed!"); } }
測試結果以下:
咱們發現邊界狀況中輸入100時有一個Bug。咱們修改MyUtil.java
,把判斷優秀的條件中包含輸入爲100的狀況,代碼以下:
public class MyUtil{ public static String percentage2fivegrade(int grade){ //若是成績小於0,轉成「錯誤」 if ((grade < 0)) return "錯誤"; //若是成績小於60,轉成「不及格」 else if (grade < 60) return "不及格"; //若是成績在60與70之間,轉成「及格」 else if (grade < 70) return "及格"; //若是成績在70與80之間,轉成「中等」 else if (grade < 80) return "中等"; //若是成績在80與90之間,轉成「良好」 else if (grade < 90) return "良好"; //若是成績在90與100之間,轉成「優秀」 else if (grade <= 100) return "優秀"; //若是成績大於100,轉成「錯誤」 else return "錯誤"; } }
這時測試都符合預期了,咱們把MyUtil.java
提供給別人使用時,內心比較有底氣了。那如何保證單元測度是充分的呢?咱們的通常要求是測試代碼
要比產品代碼
多。如何寫測試,《單元測試之道》提出了Right-BICEP
的方法,你們能夠參考一下。
前面的例子,咱們先寫產品代碼
,而後再寫測試代碼
,經過測試發現了一些Bugs,提升了代碼質量。這有問題嗎?軟件開發從建築中吸收了不少養分,咱們看看一個砌牆的例子,以下圖:
工人是「先把牆砌好的,再用繩子測一下牆平不平,直不直,若是不平或不直拆了重砌」,仍是「先用繩子給出平和直的標準,而後靠着繩子砌牆,從而保證了牆砌出來就是又平又直的」呢?答案是不言而喻的了。
拿編程作對比,咱們是該「先寫產品代碼
,而後再寫測試代碼
,經過測試發現了一些Bugs,修改代碼」,仍是該「先寫測試代碼
,而後再寫產品代碼
,從而寫出來的代碼就是正確的」呢?固然先寫測試代碼了。這種先寫測試代碼
,而後再寫產品代碼
的開發方法叫「測試驅動開發」(TDD)。TDD的通常步驟以下:
基於TDD,咱們不會出現過分設計的狀況,需求經過測試用例表達出來了,咱們的產品代碼
只要讓測試經過就能夠了。
Java中有單元測試工具JUnit來輔助進行TDD,咱們用TDD的方式把前面百分制轉五分制的例子重寫一次,體會一下有測試工具支持的開發的好處。
IDEA中使用JUnit要安裝插件,選擇File->Setting
打開設置對話框:
在設置對話框中選擇Plugins
, 單擊Install JetBrains plugin...
按鈕打開插件安裝界面:
在插件安裝對話框的搜索中輸入junit
,單擊JunitGenerator V2.0,單擊右邊綠色的Install1
按鈕安裝:
安裝完以下:
咱們在IDEA中新建一個項目,而後新建一個空類MyUtil:
鼠標單擊類名會出現一個燈泡狀圖標,單擊圖標或按Alt + Entert
,在彈出的菜單中選擇Create Test
:
咱們選擇建立JUnit3的測試用例 :
在test
文件件夾中出現了MyUtilTest
測試類:
咱們增長第一個測試用例testNormal
,注意測試用例前必定要有註解@Test
,測試用例方法名任意,輸入如下代碼:
import org.junit.Test; import junit.framework.TestCase; public class MyUtilTest extends TestCase { @Test public void testNormal() { assertEquals("不及格", MyUtil.percentage2fivegrade(55)); assertEquals("及格", MyUtil.percentage2fivegrade(65)); assertEquals("中等", MyUtil.percentage2fivegrade(75)); assertEquals("良好", MyUtil.percentage2fivegrade(85)); assertEquals("優秀", MyUtil.percentage2fivegrade(95)); } }
若是TestCase
是紅色的,須要在IDEA中的項目(模塊)中加入junit.jar
包,junit.jar
包的位置能夠在Everything中查找:
如上圖:junit.jar
包的位置是「C:\Users\13015\AppData\Local\JetBrains\Toolbox\apps\IDEA-U\ch-1\171.4073.35\lib\junit.jar」
咱們在IDEA中選擇菜單File->Project Structure...
,
在彈出的對話框中選擇Dependancies
標籤頁,單擊+號,選擇JARs or Directories...
,輸入上面找到的「C:\Users\13015\AppData\Local\JetBrains\Toolbox\apps\IDEA-U\ch-1\171.4073.35\lib\junit.jar」。
輸入完畢,IDEA中以下圖所示:
紅色代碼說明有語法錯誤,這是由於MyUtil
中尚未percentage2fivegrade
方法,點擊左邊的圖標能夠修復這個問題:
在percentage2fivegrade()
方法中加入一行return "錯誤";
。
你們能夠看到如今測試代碼沒有語法錯誤了,在測試代碼上單擊右鍵,選擇Run 'MyTuilTest'
:
運行結果以下:
測試結果出現了一個紅條(red bar),說明測試沒經過,紅條上面彙總了測試狀況,運行了一個測試,沒有錯誤,一個測試沒經過。下面緣由說的也很清楚:測試代碼第十行傳入55時,指望結果是「不及格」,代碼返回了「錯誤」,修改MyUtil.Java
吧,輸入如下代碼,再運行測試,以下圖所示:
測試結果出現了一個綠條(green bar),說明測試經過了。TDD的目標是"Clean Code That Works",TDD的slogan是"Keep the bar green, to Keep the code clean",你們體會一下。
TDD的編碼節奏是:
咱們增長一個測試異常狀況的用例testException
和一個測試邊界狀況的用例testBoundary
,以下圖:
如何讓JUnit的gree bar
出來,動手實驗一下,以下圖:
無論用不用TDD,寫出高質量的測試用例纔是最重要的,如何進行單元測試,你們可參考一下《單元測試之道》這本書。另外,《Agile Java 中文版》展現瞭如何將Java和TDD進行有效的整合,經過TDD驅動項目開發,有興趣的能夠參考。
Java的學習我是提倡首先在命令行下學習一段時間的,git也是,入門參考使用碼雲和博客園學習簡易教程。
咱們學習了IDE,如何在IDEA中使用git? 咱們以使用碼雲和博客園學習簡易教程中建好的項目爲例。
在IDEA中,咱們選擇菜單File
->New
->Project from Version Control
->git
:
彈出以下對話框,咱們填上學習項目的URL,點擊Clone
按鈕,這就至關於執行命令git clone https://git.oschina.net/bestiisjava2017/ljp20155200_JavaProgramming.git
:
其中的Git Repository URL
來自碼雲:
IDEA 會詢問如何打開項目:
項目打開後,目錄都是灰的,IDEA不知道咱們的源代碼在src
文件夾裏,教材上說了在命令行窗口中要設置SOURCEPATH
環境,在IDEA中只要把鼠標放src
文件夾上,在右鍵菜單中選擇Make Directory as
->Sources Root
:
src
文件夾就變成藍色的了,IDEA就知道咱們的源代碼在src
文件夾裏了。這時,Java API中的String
,System
都是紅色的,IDEA提示咱們要Setup SDK
,用鼠標點擊Setup SDK
:
若是之前設置過,選擇之前的設置,點擊OK
按鈕:
若是之前沒設置過SDK,點擊上圖中的Configure...
按鈕進行設置:
這時,Java API中的String
,System
都沒問題了:
咱們運行Hello.java
,IDEA會提示沒有輸出目錄,咱們要建立一個bin
文件夾,並指定爲輸出目錄,點擊OK
按鈕進行設置:
在彈出對話框中點擊右鍵,選擇New Folder...
:
輸入要建立的文件夾名bin
:
bin
文件夾不該歸入版本控制,咱們點擊一下Excluded
,bin
文件夾變紅,不進行版本控制:
咱們點擊Path
標籤,指定Output path和Test output path 都是咱們剛建立的bin:
代碼在IDEA中能夠編譯運行了,Hello.class也生成在bin文件夾中了:
咱們修改一下代碼,增長一行,編譯運行正確:
把鼠標放到Hello.java上,右鍵菜單選擇git
->Commit File...
,這至關於命令行「git add.; git commit」:
咱們選中.idea和src,並在Commit Message中輸入信息。Commit Message是git commit -m "Commit Message"中的提交信息。Commit Message的編寫參考Commit message 和 Change log 編寫指南.
點擊Commit
按鈕,咱們能夠選擇Commit and push
,這在提交後會執行git push
命令:
第一次執行要配置用戶名和E-mail,這至關於執行:
git config --global user.name "rocedu" git config --global user.email "rocedu@qq.com"
輸入碼雲上的用戶名和口令就能成功上傳了:
你們注意,這個教程只是入門,你們要在實踐中發現問題,解決問題,不斷精進。學習git命令時要在命令行下學習,而後在IDEA中找相關菜單項,這樣使用IDEA時才能知其然,也知其因此然。
現代軟件產業通過幾十年的發展,已經不可能出現一我的單槍匹馬完成一個軟件的事情了,軟件都是在相互合做中完成的。
多人合做必定要有個共同的代碼規範,Java編程咱們推薦《阿里巴巴Java開發手冊》,推薦你參加「阿里巴巴編碼規範」認證經過在線考試,檢測你對手冊中開發規範的掌握程度,併發放官方認證證書.
自《阿里巴巴Java開發手冊》發佈以來,阿里對外開放了IDE檢測插件及源碼。該插件在掃描代碼後,將不符合《手冊》的代碼按block/critical/major三個等級顯示在下方;實時編寫代碼時,還會給出智能提示,告訴你如何編寫能夠更優雅;對於歷史代碼,部分規則實現了批量一鍵修復的功能。
IDEA中的插件,咱們經過Jetbrains官方倉庫安裝:打開 Settings
->Plugins
-> Browse repositories...
在搜索框輸入alibaba
便可看到Alibaba Java Code Guidelines
插件,點擊Install
進行安裝,而後重啓IDE生效:
使用比較簡單:在項目名稱上單擊右鍵,在彈出菜單上選擇編碼規約掃描
:
出現下圖內容:
不規範的地方,有中文提示而且定位到了行,alibaba把問題分爲block/critical/major三個等級,有些規則能夠一鍵修復。
咱們以MySQL爲例,建議參考「程序開發與信息安全工具箱」安裝XAMPP,咱們後面以XAMPP爲例說明。若是下載的XAMPP是Portable版的,解壓後注意先運行一下setup_xampp.bat,使用軟件時讀讀readme 會解決很多問題。
在IDEA中新建項目TestJDBC,在src中輸入示例代碼 ConnectionDemo.java:
import static java.lang.System.out; import java.sql.*; public class ConnectionDemo { public static void main(String[] args) throws ClassNotFoundException, SQLException { Class.forName("com.mysql.jdbc.Driver"); String jdbcUrl = "jdbc:mysql://localhost:3306/demo"; String user = "root"; String passwd = ""; try(Connection conn = DriverManager.getConnection(jdbcUrl, user, passwd)) { out.printf("已%s數據庫鏈接%n", conn.isClosed() ? "關閉" : "打開"); } } }
數據庫鏈接測試,注意數據庫用戶名,口令要根據本身的實際狀況修改,咱們使用XAMPP,在XAMPP的readme_en.txt中給出了MySQL的用戶名和口令:
這個默認不要口令的方式不安全,實際應用中要改成安全的口令。
在XAMPP的安裝目錄中,點擊xampp-control.exe,經過點擊Apache和MySQL的start按鈕啓動Apache服務器和MySQL數據庫:
成功啓動以下圖所示:
咱們上面代碼中用到了數據庫demo,咱們在瀏覽器中輸入http://localhost 或http://127.0.0.1 打開XAMPP,
使用XAMPP中的PHPAdmin 建好數據庫並進行測試。建數據庫的SQL語句: CREATE SCHEMA demo;
後面還要用到一個留言板的表,建這個數據庫表的SQL語句是:
use demo; CREATE TABLE t_message ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, name CHAR(20) NOT NULL, email CHAR(40), msg TEXT NOT NULL ) CHARSET=UTF8;
下載並在IDEA中配置驅動mysql-connector-java-5.1.41-bin.jar (相似單元測試中加入junit.jar的方法)
程序運行結果以下:
在XAMPP中關閉MySQL,再運行一下程序試試。
Connection表明數據庫鏈接,要執行SQL語句要用到 java.sql.Statement,SQL語句的執行結果會返加ResultSet對象。
咱們用在IDEA中,用MessageDAO來訪問數據庫表:
import java.sql.*; import java.util.*; public class MessageDAO { private String url; private String user; private String passwd; public MessageDAO(String url, String user, String passwd) { this.url = url; this.user = user; this.passwd = passwd; } public void add(Message message) { try(Connection conn = DriverManager.getConnection(url, user, passwd); Statement statement = conn.createStatement()) { String sql = String.format( "INSERT INTO t_message(name, email, msg) VALUES ('%s', '%s', '%s')", message.getName(), message.getEmail(), message.getMsg()); statement.executeUpdate(sql); } catch(SQLException ex) { throw new RuntimeException(ex); } } public List<Message> get() { List<Message> messages = new ArrayList<>(); try(Connection conn = DriverManager.getConnection(url, user, passwd); Statement statement = conn.createStatement()) { ResultSet result = statement.executeQuery("SELECT * FROM t_message"); while (result.next()) { Message message = toMessage(result); messages.add(message); } } catch(SQLException ex) { throw new RuntimeException(ex); } return messages; } private Message toMessage(ResultSet result) throws SQLException { Message message = new Message(); message.setId(result.getLong(1)); message.setName(result.getString(2)); message.setEmail(result.getString(3)); message.setMsg(result.getString(4)); return message; } }
用Message 封裝留言信息:
import java.io.Serializable; public class Message implements Serializable { private Long id; private String name; private String email; private String msg; public Message() {} public Message(String name, String email, String msg) { this.name = name; this.email = email; this.msg = msg; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
下面給出測試類MessageDAODEmo.java:
import static java.lang.System.out; import java.util.Scanner; public class MessageDAODemo { public static void main(String[] args) throws Exception { MessageDAO dao = new MessageDAO( "jdbc:mysql://localhost:3306/demo?" + "useUnicode=true&characterEncoding=UTF8", "root", ""); Scanner console = new Scanner(System.in, "Big5"); while(true) { out.print("(1) 顯示留言 (2) 新增留言:"); switch(Integer.parseInt(console.nextLine())) { case 1: dao.get().forEach(message -> { out.printf("%d\t%s\t%s\t%s%n", message.getId(), message.getName(), message.getEmail(), message.getMsg()); }); break; case 2: out.print("姓名:"); String name = console.nextLine(); out.print("郵件:"); String email = console.nextLine(); out.print("留言:"); String msg = console.nextLine(); dao.add(new Message(name, email, msg)); } } } }
運行結果以下:
數據庫的學習要有必定量的數據纔有實際意義。一個學生數據庫讓你編出來1000個學生出來也很難,咱們可使用http://www.fakenamegenerator.com/幫忙產生測試數據。
咱們學習練習時使用MySQL的World數據庫,咱們去https://dev.mysql.com/doc/index-other.html下載world.sql,並導入到MySQL中:
歡迎關注「rocedu」微信公衆號(手機上長按二維碼)
作中教,作中學,實踐中共同進步!
版權聲明:自由轉載-非商用-非衍生-保持署名| Creative Commons BY-NC-ND 3.0
若是你以爲本文對你有幫助,請點一下左下角的「好文要頂」和「收藏該文」