2021-01-27 MySQL(四)

学习内容:

MySQL(四)

前言

学习 JAVA 大数据:“钱”景无限

文章目录

一:异常

二:PrepareStatement 和 Statement的区别

三:流

四:Properties对象

五:XML

一:异常

a.定义:

导致程序的正常流程被中断的事件,叫做异常

异常类型

在 Java 中所有异常类型都是内置类 java.lang.Throwable 类的子类,即 Throwable 位于异常类层次结构的顶层。Throwable 类下有两个异常分支 Exception 和 Error,如图 1 所示。
 

b.常见的五个编译时异常:

SQLException 

IOexception 

FileNotFoundException

ClassNotFoundException

EOFException   (文件结束异常)

IllegaArguementException (方法接收到非法参数异常)

b.常见的五个RunTimeException异常:

StringIndexOutOfBoundsException

ArrayIndexOutOfBoundsException (数组大小小于或大于实际的数组大小)

ArithmeticException

IllegaArguementException 、

NullPointException

举例:

public class Demo01 {
    public static void main(String[] args) {
        /*
         * 1:文件不存在异常
         */
        //1.1:创建Flie对象
        File f = new File("d:/love7.txt");
        /*
         * 1.2:试图用文件流对象去
         *          加载这个文件对象 ;
         *    因为: FileInputStream(File file )是
         *    会throws(抛出异常),所以我们在调用
         *    这个构造方法的时候会得到一个异常,
         * 那我们有2种处理方式:
         *  a: 捕获异常 try{}catch(异常类型 引用){}
         *         try的大括号里是放可能产出异常的代码,
         *         如果没有异常则整除执行try里的代码,
         *         否则(有异常)则执行catch里的代码;
         *   b: 向上抛 
         */
        try {
            //文件存在则正常执行try里的代码
            new FileInputStream(f);
            System.out.println("没有异常");
        } catch (FileNotFoundException e) {
            //文件不存在则正常执行catch里的代码
            System.out.println("有异常");
            e.printStackTrace();
        }
        
    }
}
 

二:PrepareStatement 和 Statement的区别

a.Statement 

 代表SQL发送器,用于发送和执行SQL语句。

/*
 * 研究sql注入
 */
public class DemoStatement {
    /*
     * 1.通过JDBCTools工具类得到Connection(连接器)
     */
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        Connection con = JDBCTools.getConnection();    
        /*
         * 2.通过Connection对象得到Statement(处理器)
         */
        Statement stat = con.createStatement();
        /*
         * 3.模拟sql注入
         */
        String sql = "select * from testjdbc where id =1 or id = 2;";
        ResultSet res = stat.executeQuery(sql);
        while (res.next()) {
            System.out.println(res.getInt(1)+":"+ res.getString(2));
        }
    }
}

b.PrepareStatement

PrepareStatement是一个预编译的Statement,将带占位符?的SQL语句发送给数据库后,SQL语句不会立即执行,数据库会生成一个执行计划,此时SQL语句结构已确定,不可更改注入,然后利用setXXX()方法给sql的?设置参数值,传参后即执行计划,返回结果集。另外,由于执行计划已生成,只要传入参数就可执行计划,这在大批量存入数据时,编码更简单,效率更高。

举例:

public class DemoPrepareStatement {
    /*
     * 1.通过JDBCTools工具类得到Connection(连接器)
     */
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        Connection con = JDBCTools.getConnection();    
        /*
         * 2.给sql
         */
        String sql = "select * from testjdbc where id =?;";
        
        /*
         * 3.创建预处理器prepareStateme
         */
        PreparedStatement ps = con.prepareStatement(sql);
        //更改sql参数
            ps.setInt(1,1);
           
         //执行sql,返回成功更新的行数
            ResultSet res =ps.executeQuery();
            while (res.next()) {
                System.out.println(res.getInt(1)+":"+ res.getString(2));
            }
    }

}


C.PrepareStatement 和 Statement的区别

PrepareStatement和Statement区别和联系
--PrepareStatement从Statement继承
--都是用于发送和执行SQL语句的
--PrepareStatement是一种预编译的Statement对象。
  Statement对象是在executeUpdate或executeQuery方法时指定sql,此时将sql语句发送和执行。
  PrepareStatement对象是在创建时指定并发送sql,在executeUpdate或executeQuery方法时触发sql执行。

使用原有Statement有以下问题:
--容易遭受注入式攻击
--拼写SQL繁琐和麻烦
通过PrepareStatement可以解决上述问题

PrepareStatement使用步骤:
--编写带?号的sql
--利用con.prepareStatement(sql);方法获取PrepareStatement对象
--利用setXXX()方法给sql的?设置参数值
--调用无参的executeUpdate()或executeQuery()执行sql.

三:流

流结构介绍

Java所有的流类位于java.io包中,都分别继承字以下四种抽象流类型。

 字节流字符流
输入流InputStreamReader
输出流OutputStreamWriter

 

流是个抽象的概念,是对输入输出设备的抽象,Java程序中,对于数据的输入/输出操作都是以“流”的方式进行。设备可以是文件,网络,内存等。

流具有方向性,至于是输入流还是输出流则是一个相对的概念,一般以程序为参考,如果数据的流向是程序至设备,我们成为输出流,反之我们称为输入流。

可以将流想象成一个“水流管道”,水流就在这管道中形成了,自然就出现了方向的概念。

当程序需要从某个数据源读入数据的时候,就会开启一个输入流,数据源可以是文件、内存或网络等等。相反地,需要写出数据到某个数据源目的地的时候,也会开启一个输出流,这个数据源目的地也可以是文件、内存或网络等等。

举例:

static Properties getProObject(){
        //1.1创建配置文档对象
        Properties p = new Properties();
        //1.2以数据流的形式获取配置文件
        InputStream inputStream = ProObject.class.getResourceAsStream( "login.properties");
                /*
                 * getResourceAsStream方法:
                 *     "login.properties"获取到当前类
                 *     所在包下的 login.properties文件
                 */ 
        try {
            //1.3配置对象加载这个流对象
            p.load(inputStream);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return p; 
    }

四:Properties对象

Properties(Java.util.Properties),该类主要用于读取Java的配置文件,不同的编程语言有自己所支持的配置文件,配置文件中很多变量是经常改变的,为了方便用户的配置,能让用户够脱离程序本身去修改相关的变量设置。就像在Java中,其配置文件常为.properties文件,是以键值对的形式进行参数配置的。

举例:

   /*
     * 静态方法获取Properties对象(
     *     加载了properties配置文件的对象)
     */
    static Properties getProObject(){
        //1.1创建配置文档对象
        Properties p = new Properties();

五:XML

1.DOM (Document Object Model) 方式解析XML

Dom解析是将xml文件全部载入到内存,组装成一颗dom树,然后通过节点以及节点之间的关系来解析xml文件,与平台无关,java提供的一种基础的解析XML文件的API,理解较简单,但是由于整个文档都需要载入内存,不适用于文档较大时。

2.SAX(Simple API for XML) 方式解析XML

基于事件驱动,逐条解析,适用于只处理xml数据,不易编码,而且很难同时访问同一个文档中的多处不同数据

3.JDOM (Java-based Document Object Model) 方式解析XML

简化与XML的交互并且比使用DOM实现更快,仅使用具体类而不使用接口因此简化了API,并且易于使用

4.DOM4J (Document Object Model for Java) 方式解析XML

大量使用了Java集合类,方便Java开发人员,同时提供一些提高性能的替代方法

 

已标记关键词 清除标记
【为什么还需要学习C++?】 你是否接触很多语言,但从来没有了解过编程语言的本质? 你是否想成为一名资深开发人员,想开发别人做不了的高性能程序? 你是否经常想要窥探大型企业级开发工程的思路,但苦于没有基础只能望洋兴叹?   那么C++就是你个人能力提升,职业之路进阶的不二之选。 【课程特色】 1.课程共19大章节,239课时内容,涵盖数据结构、函数、类、指针、标准库全部知识体系。 2.带你从知识与思想的层面从0构建C++知识框架,分析大型项目实践思路,为你打下坚实的基础。 3.李宁老师结合4大国外顶级C++著作的精华为大家推出的《征服C++11》课程。 【学完后我将达到什么水平?】 1.对C++的各个知识能够熟练配置、开发、部署; 2.吊打一切关于C++的笔试面试题; 3.面向物联网的“嵌入式”和面向大型化的“分布式”开发,掌握职业钥匙,把握行业先机。 【面向人群】 1.希望一站式快速入门的C++初学者; 2.希望快速学习 C++、掌握编程要义、修炼内功的开发者; 3.有志于挑战更高级的开发项目,成为资深开发的工程师。 【课程设计】 本课程包含3大模块 基础篇 本篇主要讲解c++的基础概念,包含数据类型、运算符等基本语法,数组、指针、字符串等基本词法,循环、函数、类等基本句法等。 进阶篇 本篇主要讲解编程中常用的一些技能,包含类的高级技术、类的继承、编译链接和命名空间等。 提升篇: 本篇可以帮助学员更加高效的进行c++开发,其中包含类型转换、文件操作、异常处理、代码重用等内容。
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页