经历了两个礼拜的找工做以后,找到了一家公司肯要我这个培训班出来非计算机专业的学生,虽然并非很满意这样的结果,可是目前来讲,找一个稳妥的工做好好积攒工做经验才是最须要的。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 写法)