数据库——MySQL(四)(JDBC、数据库链接、数据库增删改查、SQL注入攻击)

数据持久化:persistence
把数据保存到可掉电式存储设备中以供之后使用。数据持久化意味着将内存中的数据保存到硬盘上加以”固化”,而持久化的实现过程大多通过各种关系数据库来完成。可以存储在磁盘文件、XML数据文件中
数据库——MySQL(四)(JDBC、数据库链接、数据库增删改查、SQL注入攻击)
------------------------------------------------------------------------------------------------------------------
Java中数据库存取技术可分为三类:
●  JDBC直接访问数据库
●  JDO技术
●  第三方O/R工具,如Hibernate,ibatis等
注意:JDBC是java访问数据库的基石,JDO,Hibernate等只是更好的封装了JDBC
------------------------------------------------------------------------------------------------------------------
JDBC:Java  Database  Connectivity
●  JDBC是一个独立于特定数据库管理系统、通用的SQL数据库存取和操作的公共接口(一组API),定义了用来访问数据库的标准Java类库,使用这个类库可以以一种标准的方法、方便地访问数据库资源
●  JDBC为访问不同的数据库提供了一种统一的途径,为开发者屏蔽了一些细节问题
●  JDBC的目标是使Java程序员使用JDBC可以连接任何提供了JDBC驱动程序的数据库系统,这样就使得程序员无需对特定的数据库系统的特点有过多的了解,从而大大简化和加快了开发过程
数据库——MySQL(四)(JDBC、数据库链接、数据库增删改查、SQL注入攻击)
------------------------------------------------------------------------------------------------------------------
JDBC接口(API)包括两个层次:
●  面向应用的API:(Java  API)抽象接口,程序开发人员使用(连接数据库,执行SQL语句,获得结果)
●  面向数据库的API:(Java  Driver  API)开发商开发数据库驱动程序用
------------------------------------------------------------------------------------------------------------------
ODBC:Open  Database  Connectivity开放式数据库连接
●  早期对数据库的访问,都是调用数据库厂商提供的专有的API。为了在Windows平台下提供统一的访问方式,微软推出了ODBC,并提供了ODBC API,使用者在程序中只需要调用ODBC API,由ODBC驱动程序将调用转换成为对特定的数据库的调用请求
●  一个基于ODBC的应用程序对数据库的操作不依赖任何DBMS(database manager system),不直接与DBMS打交道,所有的数据库操作由对应的DBMS的ODBC驱动程序完成。也就是说,不论是FoxPro、Access , MySQL还是Oracle数据库,均可用ODBC API进行访问。由此可见,ODBC的最大优点是能以统一的方式处理所有的数据库
------------------------------------------------------------------------------------------------------------------
JDBC驱动程序第一类:JDBC-ODBC桥
●  JDBC-ODBC桥本身也是一个驱动,利用这个驱动,可以使用JDBC API通过ODBC去访问数据库。这种机制实际上是把标准的JDBC调用转换成相应的ODBC调用,并通过ODBC访问数据库。在JDK中,提供了它的实现类(sun.jdbc.odbc.JdbcOdbcDriver)

数据库——MySQL(四)(JDBC、数据库链接、数据库增删改查、SQL注入攻击)

注意:因为需要通过多层调用,所以访问数据库的效率较低

------------------------------------------------------------------------------------------------------------------
JDBC驱动程序第二类:部分本地API部分Java的驱动程序
●  这种类型的JDBC驱动程序使用Java编写,它调用数据库厂商提供的本地API(需要在客户的机器上安装本地JDBC驱动程序和特定厂商的本地API

数据库——MySQL(四)(JDBC、数据库链接、数据库增删改查、SQL注入攻击)

注意:通过这种类型的JDBC驱动程序访问数据库减少了ODBC的调用环节,提高了数据库访问的效率

------------------------------------------------------------------------------------------------------------------
JDBC驱动程序第三类:JDBC网络纯Java驱动程序
●  这种驱动利用中间件的应用服务器来访问数据库。应用服务器作为一个到多个数据库的网关,客户端通过它可以连接到不同的数据库服务器

数据库——MySQL(四)(JDBC、数据库链接、数据库增删改查、SQL注入攻击)

注意:应用服务器通常有自己的网络协议,Java用户程序通过JDBC驱动程序将JDBC调用发送给应用服务器,应用服务器使用本地程序驱动访问数据库,从而完成请求

------------------------------------------------------------------------------------------------------------------
JDBC驱动程序第四类:本地协议的纯Java驱动程序
●  这种类型的驱动程序完全使用Java编写,通过与数据库建立的Socket连接,采用与厂商的网络协议把JDBC调用转换为直接连接的网络调用
数据库——MySQL(四)(JDBC、数据库链接、数据库增删改查、SQL注入攻击)

注意:JDBC驱动程序是各个数据库厂商根据JDBC的规范制作的JDBC实现类的类库。第三、四两类都是纯Java的驱动程序,因此,对于Java开发者来说,它们在性能、可移植性、功能等方面都有优势 
------------------------------------------------------------------------------------------------------------------
JDBC  API:(一系列的接口,它使得应用程序能够进行数据库联接,执行SQL语句,并且得到返回结果)
数据库——MySQL(四)(JDBC、数据库链接、数据库增删改查、SQL注入攻击)
------------------------------------------------------------------------------------------------------------------

建立数据库连接:

数据库——MySQL(四)(JDBC、数据库链接、数据库增删改查、SQL注入攻击)

注意:用户名、密码根据自己的数据库设定

数据库——MySQL(四)(JDBC、数据库链接、数据库增删改查、SQL注入攻击)

●  协议:    JDBC URL中的协议总是jdbc 
●  子协议:用于标识一个数据库驱动程序
●  子名称:一种标识数据库的方法。是为了定位数据库提供足够的信息。子名称可以依不同的子协议而变化
常用数据库的JDBC URL:
●  Oracle数据库连接: jdbc:oracle:thin:@localhost:1521:sid
●  SQLServer数据库连接:jdbc:microsoft:sqlserver//localhost:1433; DatabaseName=sid

------------------------------------------------------------------------------------------------------------------
访问数据库:insert、update、delete
数据库——MySQL(四)(JDBC、数据库链接、数据库增删改查、SQL注入攻击)
注意:传入值手动输入使用 "+变量名+" 方法。例:"insert into user(sname,sage) values ('"+name+ "',"+age+")";
------------------------------------------------------------------------------------------------------------------
访问数据库:select
数据库——MySQL(四)(JDBC、数据库链接、数据库增删改查、SQL注入攻击)
注意:insert、update、delete与select的执行方法不同,取值时可以使用列名,也可以使用下标位

取值原理

数据库——MySQL(四)(JDBC、数据库链接、数据库增删改查、SQL注入攻击)

●  判断当前指针的下一行记录是否有效(指针默认是在第一行记录之前)。 有效,则返回true,并把指针向下移动一行

●  使用ResultSet的对象调用getXxxxx(int index) 或者getXxxxx(String  columnLable) 得到当前指针指向行的列的值

------------------------------------------------------------------------------------------------------------------

SQL注入攻击:
利用某些系统没有对用户输入的数据进行充分的检查,而在用户输入数据中注入非法的SQL语句段或命令,从而利用系统的SQL引擎完成恶意行为的做法。防范SQL注入,PreparedStatement取代Statement
Statement:

数据库——MySQL(四)(JDBC、数据库链接、数据库增删改查、SQL注入攻击)

PreparedStatement:

数据库——MySQL(四)(JDBC、数据库链接、数据库增删改查、SQL注入攻击)

注意:PreparedStatement是Statement的子接口,表示一条预编译过的SQL语句,SQL语句中的参数用问号(?)来表示,调用setXXX(下标索引,值)方法来设置这些参数,XXX表示对应的基本数据类型

------------------------------------------------------------------------------------------------------------------

总结:所有包都导入java.sql包
●  DriverManager:驱动管理器,用来获得数据库链接
●  Connection:数据库链接接口
●  Statement:静态操作sql语句(PreparedSatement :动态操作sql语句
●  ResultSet:结果集,保存数据结果的结果集
------------------------------------------------------------------------------------------------------------------
自己整理,有些地方是扒拉的,如有侵犯,还望告知