学习内容:
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包中,都分别继承字以下四种抽象流类型。
字节流 | 字符流 | |
输入流 | InputStream | Reader |
输出流 | OutputStream | Writer |
流是个抽象的概念,是对输入输出设备的抽象,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开发人员,同时提供一些提高性能的替代方法