• 实习小结(一)


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

    实习第一天,虽说没有什么重要的任务去做,还是从基础做起,锻炼自己的编码能力,继续敲写着连接数据库,进行增删改查的任务。本以为并没有什么多大的问题,但是动手编写的时候,还是遇到了不少的问题。

     

    问题一:java.util.NoSuchElementException异常

      第一次遇到这个问题,把代码逻辑检查了好几遍,都是简单的从控制台获取数据,封装在对象中,这么简单的逻辑怎么会出错呢。经过一番debug和百度之后,找到了问题的出处。

    在A方法中使用了Scanner,使用完后将它进行了关闭,后面的代码调用了B方法,但是B方法中也使用了Scanner,此时就会抛出java.util.NoSuchElementException异常。

    报错的原因:

      在第一次使用Scanner之后,使用scan.close()关闭资源,会把System.in关闭。当后面代码中再进行Scanner scan = new Scanner(System.in)读取操作时,因为输入流已经关闭,所以读取的值会是-1,从而会导致异常。

    解决的办法:

      在方法的最后处理未关闭的资源。

    参考的博客:

      Java学习笔记之Scanner报错java.util.NoSuchElementException

      https://www.cnblogs.com/qingyibusi/p/5812725.html

     

    问题二: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()只读取数值,剩下的“ ”并没有读取,当执行到下面的nextLine()时,会读取“ ”,并结束,所以输入姓名那行貌似没有输入就执行了。

    解决的办法:

      (1)使用next();

      (2)在name前加一个变量用来接收多出来的“ ”

    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()的理解

      https://www.cnblogs.com/Skyar/p/5892825.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根据出生日期计算年龄的五种方法比较

      https://www.cnblogs.com/learnapi/p/7851293.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

      

     

  • 相关阅读:
    axios+post获取并下载后台返回的二进制流
    vue+ckEditor5
    金额大写转换(改进版)
    vue+axios请求头封装
    移动端h5+vue失焦搜索,ios和android兼容问题
    vue滚动+滑动删除标记(移动端)仿qq/微信
    重置 centos 7 密码
    发现好玩的——github + git 有意思的用法
    github 中使用 issues
    java代理模式与装饰模式
  • 原文地址:https://www.cnblogs.com/ghq120/p/8552513.html
Copyright © 2020-2023  润新知