实习小结(一)

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

实习第一天,虽然说没有什么重要的任务去作,仍是从基础作起,锻炼本身的编码能力,继续敲写着链接数据库,进行增删改查的任务。本觉得并无什么多大的问题,可是动手编写的时候,仍是遇到了很多的问题。java

 

问题一:java.util.NoSuchElementException异常

  第一次遇到这个问题,把代码逻辑检查了好几遍,都是简单的从控制台获取数据,封装在对象中,这么简单的逻辑怎么会出错呢。通过一番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

 

问题二:Scanner中连续使用nextLine(),没有输入,会自动输出

首先看一个例子:学习

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; }

 

问题五:数据库表中生日字段为Date类型,展现数据时根据当前时间算出相应的年龄

  MySql中根据生日计算年龄的方法:

SELECT ROUND(DATEDIFF(CURDATE(), @birthday)/365.2422)

DATEDIFF()函数返回连个日期之间的天数。

参考博客:

  MySQL根据出生日期计算年龄的五种方法比较

  http://www.javashuo.com/article/p-bljikszn-bx.html

  

问题六:MySql中的三表left join写法

  使用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 写法)

  http://blog.csdn.net/chentaocba/article/details/7697825

相关文章
相关标签/搜索