經歷了兩個禮拜的找工做以後,找到了一家公司肯要我這個培訓班出來非計算機專業的學生,雖然並非很滿意這樣的結果,可是目前來講,找一個穩妥的工做好好積攢工做經驗纔是最須要的。html
實習第一天,雖然說沒有什麼重要的任務去作,仍是從基礎作起,鍛鍊本身的編碼能力,繼續敲寫着鏈接數據庫,進行增刪改查的任務。本覺得並無什麼多大的問題,可是動手編寫的時候,仍是遇到了很多的問題。java
第一次遇到這個問題,把代碼邏輯檢查了好幾遍,都是簡單的從控制檯獲取數據,封裝在對象中,這麼簡單的邏輯怎麼會出錯呢。通過一番debug和百度以後,找到了問題的出處。sql
在A方法中使用了Scanner,使用完後將它進行了關閉,後面的代碼調用了B方法,可是B方法中也使用了Scanner,此時就會拋出java.util.NoSuchElementException異常。數據庫
在第一次使用Scanner以後,使用scan.close()關閉資源,會把System.in關閉。當後面代碼中再進行Scanner scan = new Scanner(System.in)讀取操做時,由於輸入流已經關閉,因此讀取的值會是-1,從而會致使異常。api
在方法的最後處理未關閉的資源。eclipse
Java學習筆記之Scanner報錯java.util.NoSuchElementException函數
http://www.javashuo.com/article/p-ypjhblpt-m.htmlpost
首先看一個例子:學習
public class test { public static void inputinfo(){ Scanner scan = new Scanner(System.in); System.out.println("請輸入編號:"); int num = scan.nextInt(); System.out.println("請輸入姓名:"); String name = scan.nextLine(); System.out.println("請輸入性別:"); String sex = scan.nextLine(); } public static void main(String[] args) { inputinfo(); } }
這是一個簡單的從控制檯接收信息的方法,運行程序,輸入編號以後,輸入姓名和性別的提示同時打印出編碼
在使用nextInt()後面不能使用nextLine(),這是因爲nextLine() 的特殊性。next()和nextLine()的區別在於,next()必定後讀取到有效字符才能夠結束輸入,對於輸入有效字符以前的空格鍵,tab鍵和enter鍵爲結束的,next()將會自動去掉。nextLine()的結束符只是enter鍵,輸入中能夠帶空格等。
由於nextInt()只讀取數值,剩下的「\n」並無讀取,當執行到下面的nextLine()時,會讀取「\n」,並結束,因此輸入姓名那行貌似沒有輸入就執行了。
(1)使用next();
(2)在name前加一個變量用來接收多出來的「\n」
Scanner scan = new Scanner(System.in); System.out.println("請輸入編號:"); double num = scan.nextDouble(); String ch = scan.nextLine(); System.out.println("請輸入姓名:"); String name = scan.nextLine();
Java中關於nextInt()、next()和nextLine()的理解
http://www.javashuo.com/article/p-pmeojxno-bm.html
廢話很少數,上例子
public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.println("請輸入一句話:"); String str= scan.nextLine(); System.out.println(str); }
java源文件的字符集爲utf-8,因爲Window平臺默認是GBK的字符集,而在JVM啓動的時候會採用操做系統的字符集,因此在控制檯輸出時可能發生亂碼。
在eclipse安裝目錄下找到eclipse.ini文件,打開文件,在裏面追加-Dfile.encoding=utf-8,重啓eclipse就會正常。
eclipse.ini
http://surenpi.com/2016/02/19/eclipse-ini/
(1)在進行對數據的增刪改查時,常常會涉及到java.util.Date和java.sql.Date之間的轉換問題,轉換思路以下:
// 將java.util包下的Date對象轉爲java.sql包下的date
public static java.sql.Date utilDateToSqlDate(Date date) { // 獲取了毫秒值ֵ
long millisTime = date.getTime(); // 根據毫秒值來獲取java.sql包下的Date對象
java.sql.Date pubTime = new java.sql.Date(millisTime); return pubTime; }
(2)將一個字符串轉換成Date類型
public static Date strDate(String time) { Date date = null; DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); try { date = df.parse(time); } catch (ParseException e) { e.printStackTrace(); } return date; }
MySql中根據生日計算年齡的方法:
SELECT ROUND(DATEDIFF(CURDATE(), @birthday)/365.2422)
DATEDIFF()函數返回連個日期之間的天數。
MySQL根據出生日期計算年齡的五種方法比較
http://www.javashuo.com/article/p-bljikszn-bx.html
使用Mysql的多表鏈接時,一表中的字段在另外一表中沒有對應的記錄,須要將其顯示出來,須要使用到left join,兩個表之間的左外鏈接容易寫,三個表之間的鏈接就無從下手
現有以下,表stu_info中標誌屬性爲stu_id,表project中標誌屬性爲pro_id,表stu_pro_relation是中間表,字段爲stu_id和pro_id。
須要查詢出全部學生的信息,以及所過的項目(沒有作過項目的學生也要展現,這裏須要使用左外鏈接),Sql語句以下:
SELECT s.stu_id,s.stu_name,CEIL(DATEDIFF(CURDATE(), s.birthday) / 365.2422) age,s.sex,s.school,p.pro_id,p.pro_name,p.`code`
FROM (stu_info s LEFT JOIN stu_pro_relation spr ON s.stu_id = spr.stu_id) LEFT JOIN project p ON p.pro_id = spr.pro_id
先將其中一表和中間錶鏈接,將這個結果再和最後一個表進行鏈接。
MySql的join(鏈接)查詢 (三表 left join 寫法)