1、JDBC:由SUN公司提供的1组API,由类和接口所组成,以便于操作数据库,大部分以接口形式。
2、JDBC是java应用程序与各种关系数据库进行对话的一种机制。
3、驱动:各大数据库厂商针对SUN提供的接口所提供的实现类,将这些类打成JAR包供JAVA程序员下载使用
4、JDBC包含三个组件:应用程序、驱动程序管理器和驱动程序。
5、对数据库厂商:SUN提供接口让这些厂商实现,从而达到一个统一的JAVA操作数据库的标准的目的。统一方 法名/参数/返回类型。
对我们JAVA程序员:提供了一套统一的接口和方法来操作不同的数据库。从而让我们不需要关心到底是在操作什么数据库,而是关心如何利用数据库实现持久化。并且当今后底层数据库改变之后,代码几乎不需要改动。
6、JDBC的完整步骤:
1)加载驱动程序
Class.forName(driver)
2) 创建一个连接对象
Connection conn = DriverManager.getConnection(url, user, password);
3) 编写SQL语句 使用问号代替动态的参数
String sql = "......?";
4) 使用连接对象创建预编译语句对象
PreparedStatement pre = conn.preparedStatement(sql);、
5)按问号出现的位置设置问号的值
pre.setXXX(问号出现的顺序,xxx)
6)操作数据或查询数据
pre.executeUpdate();//增 删 改
ResultSet rs = pre.executeQuery();//查询 还需要遍历结果集
5)依次关闭各种对象
rs.close();
pre.close();
conn. close();
7、什么是驱动:各大数据库厂商或其他组织所编写的针对SUN提供的JDBC API中接口的实现已经相关类,一般打包为JAR文件提供给JAVA程序员使用。
8、为什么要导入驱动:因为SUN在JDBC API中大部分只是以接口的形式提供,实现类的代码在驱动JAR包中,这些类没有包含在SUN的API中。
9、为什么要加载驱动:需要调用这些实现类的方法。
10、为什么用反射加载驱动:如果是有传统的new创建实现了Driver接口的实现类对象的话,new后面的构造函数名称依赖于实现类的名称,这样一旦更换数据源的话则会因为不同的数据库驱动中的实现类的名称不一样而导致代码必须重写。
11、使用prepardStatement的好处:
1.使用PRE不需要拼装SQL字符串
2、效率 :
2-1。针对静态SQL String sql ="select xx from oo";
都是在第1次执行之前编译,后面再执行的话进行软解析而不需要重新编译,缺点是不可变化
2-2。针对动态SQL 使用statement
int id = xx;
String sql ="select xx from oo where id="+id;
虽然是可变化的,但是由于使用+连接字符串,因此即使
每次提交时变量id的值都是一样的,但是sql不是一个完整的字符串而将会使SQL引擎认为每次提交上来的SQL都是1条新的SQL,那么就会进行硬解析,即每次执行之前都会重新编译
3、使用preparedStatement
int id = xx;
String sql ="select xx from oo where id=?";
pre.setxxx 将id的值赋给问号
动态改变的参数用?表示,即使id的值每次都在变化,但是因为每次提交的都是一个完整的相同的字符串,因此SQL引擎认为每次提交上来的SQL都是相同的,那么就执行软解析而不需要重新编译 可可以变化。
4、安全性 preparedStatement可以防止SQL注入。
12、类表映射:需要持久化的类就映射成1张表
1)类的属性映射为表的列:
比如说有一个
clsss Student{
int id;
String name;
int score;
}
2)建立表t_student(s_id int primary key,s_name varchar(20),
s_score int)
3)持久化:将需要被持久化的对象按照属性进行拆分
然后作为1条记录 添加。
4)查询的时候:查出来的列的值对应着类的属性,1条记录组合为1个对象,多条记录以对象+集合方式返回。