问题:1.下图中的list<Master>和ArrayList<Master>的意思
- 为什么放在里面?
笔记:学习和练习代码在day14中
一、JDBC
-》概述:JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句
的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类
和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,
使数据库开发人员能够编写数据库应用程序,同时,JDBC也是个商标名
-》应用:JDBC 可做三件事:与数据库建立连接、发送 操作数据库的语句并处理结果
-》说明:
DriverManager:管理各种不同的Jdbc驱动
Connection:负责连接数据库并担任传送数据的任务
Statement:由Connection产生,负责执行sql语句
ResultSet:负责保存Statement执行后所产生的查询结果
二、JDBC的连接
-》导入的包
点击项目名--Build Path--add Ex..
-》加载驱动
Class.forName("com.mysql.jdbc.Driver");
说明:通过Class.forName加载驱动的路径 :com.mysql.jdbc.Driver
在添加驱动后,通过com.运算符得到
-》获得数据库的链接
创建Connection变量(快捷键导包:Ctrl+Shift+O)
通过DriverManager.getConnection(url,name,pass)获得Connection对象
报错选择报sql异常,如下图:
说明:
URL:jdbc:mysql://localhost:3306/数据库名
-》127.0.1.1代表的是本机
localhost:代表的是本机
3306:连接数据库的接口
name:登录名
pass:登录名对应的密码
三、对数据库的操作
-》相关类的顺序
加载驱动(Class.forname())
管理驱动(DriverManager)
产生连接(Connection)
命令(Statement)
执行()
结果集(ResultSet)
释放资源
Next()使用方法
1、.next()方法的作用:指针指向下一条记录,有记录(有值)返回true并把记录内容存入到对应的对象中,也就是obj.next()的obj中。如果没有返回false。
2、.next()方法的应用:一般和ResultSet对象和while循环一起使用,去迭代结果集,并在循环中调用getXXX(intfieldIndex)/getXXX(String columnName)方法获取字段值。
-》数据库的添加,修改,删除
Class.forName("com.mysql.jdbc.Driver");--加载驱动
Connection conn=Class.forName("com.mysql.jdbc.Driver");--获得链接对象
Statement stat=conn.createStatement();--获得命令对象
String sql="";
int Line=statement.executeUpdate(sql_update);--执行获得结果
说明:
更新:int ExecuteUpdate(String SQL):
以执行插入、删除、更新等操作,返回值int类型,是执行该操作所影响的行数。
-》数据库的读取;
-》结果集:ResultSet
Statement.executeQuery()===ResultSet对象
返回类型是:ResultSet
-》ResultSet结果集的方法
next():返回的是Boolean类型 查看下一行是不是数据(判断结果集是否有元素)
获得字符串:getString()
获得Int类型:getInt():
说明:获取元素时:下标从1 开始
Private 加和不加的区别:
加了就是私有的能在这个类里面使用,如果要在别的类里面也可以使用的话就要写属性对应的get和set方法,如下图。
tostring方法
-》获得结果集显示的方法
登录:if(){}
遍历:while();
四、PreparedStatement:预编译命令
-》说明:
Statement :Sql注入式攻击没有进行优化处理,安全性较差
PreparedStatement继承了Statement,在Statement的基础上进行扩张,
对注入式的攻击进行了很好的保护
-》解决方案:
PreparedStatement:预编译命令
-》使用
-》String sql = "update commoditytype set ct_name = ? where ct_id = ?;"
说明:将具体的数据用?占位符表示
-》获得PrepardStatement对象
创建对象:conn.prepareStatement(sql);请注意,是在创建对象的时候将SQL命令放入其中
-》占位符:?====》需要解析占位符
解析方式:ptmt.setString(1,name);//解析字符串
ptat.setDouble(占位符(问号)的位置, 要传入的值);//解析double类型
ptat.setInt(占位符(问号)的位置,要传入的值);//解析int类型
说明:1代表的是第一个在占位符的位置====不像下标一样从0开始
持久化
含义:持久化是将程序中的数据在瞬时状态和持久状态间转换的机制
持久化的方式:数据库,普通文件,xml文件
持久化的主要操作:
读取,查找,保持,修改,删除
一、模式:
1、Java中一共有23种模式
2、模块: "套路"或"管理代码的一种方式"
二、Java中的设计模式:
说明:共有23种,其中DAO模式;
备注:
三层开发框架是比较有名的开发框架(框架与模式区别),三层不是模式
表示层(UI)
三层 业务层(BIZ)
数据访问层(DAO)
DAO模式:
DAO:(Data Access Object数据存储对象)是一个数据访问接口,数据访问:顾名思义就是与数据库打交道。夹在业务逻辑与(持久化数据)数据库资源中间的访问
组成:数据库连接类(连接数据库),vO类(entity)(实体),Dao接口,Dao的实现类及Dao的工厂类;
说明: (1234表示创建顺序)
1.数据库连接类(util):作用:连接并获得连接对象以及关闭数据库,通过数据库连接可以大大简化开发,在需要进行数据库连接时,只需创建该类的实例,并调用其中的方法,就可以获得数据库连接对象,不必进行重复的操作
2.vo类(实体类):是一个包含属性与表中字段完全对应的类并在该类中提供Setter和Getter方法来设置并获得该类中的属性
3.Dao接口类:interface为接口
该类中定义了所有用户操作如添加删除查询记录等;不过因为是接口仅仅是定义,需要子类来实现
4.dao实现(implement)类:实现某个接口
Dao实现类实现了Dao接口并实现了接口中定义的所有方法,在Dao实现类中通过连接数据库进行操作,
说明:Daoimpl
继承DaoMaster,方法如下图。
Tips:快速try catch
选择代码块,然后按快捷键(Alt+Shift+Z),选择Try/catch block
模块的进化
A:Dao模式===三层=====MVC模式=====框架(SSH)
数据连接类:数据源
A:数据源的优点:一次定义处处使用
B:数据源:数据实体工具
包:util 类名
C:数据源的构成
1、驱动连接
2、管理构造函数,static模块
3、资源释放destory();
接口:数据登陆
存储过程:cellableStatement
解析:Cstmt.SetString(索引,绑定值);
测试类:rs.next();判断是否存在值
问题:实现结果获取禁止使用ResultSet作为返回值
异常:
登录得优化
A:标准 Boolean===登陆的标准
B:资源释放Destory
结果集的查询
A:实体表示实体:vo entity bean
B:返回值:List list
C:实体:因为每条记录不一样,所以实体的对象也应该是不一样,将实体的实例化放在while循环里;
结果集的查询(泛型)
A:实体:实体就是一张表是一个对象
B:属性是私有的,方法是公有的 构造函数 对字段进行封装、
C:思想
1、Sql语句 Select 字段 form 表明
2、泛型集合 List<Student> list //Student:类名
持久化:查询全部数据的返回值类型 List<Student>
3:对象:集合添加的元素对象==实体
4:实体的读写:ResultSet中获取数据
5:结果集:stmt.executeQuery();方法中获取值
6:编译命令:Statement是通过Connection获取数据
7:数据源的公共方法的提取
D:测试获取的数据便利
什么是分层:
含义:一种化大为小,分而治之的软件开发方法
分层的特点
每一层都有自己的职责
上一层不用关心下一层的实现细节,上一层通过下一层提供的对外接口来使用其功能
上一层调用下一层的功能,下一层不能调用上一层功能
分层开发的好处:
各层专注于自己功能的实现,便于提高质量
便于分工协作,提高开发效率
便于代码复用
便于程序扩展