JDBC学习与模式应用[20181107]

问题:1.下图中的list<Master>ArrayList<Master>的意思

 

  1. 为什么放在里面?

 

笔记:学习和练习代码在day14

一、JDBC

-》概述:JDBCJava 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异常,如下图:

 

说明:

URLjdbc: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 ExecuteUpdateString SQL):

以执行插入、删除、更新等操作,返回值int类型,是执行该操作所影响的行数。

-》数据库的读取;

-》结果集:ResultSet

Statement.executeQuery()===ResultSet对象

返回类型是:ResultSet

-ResultSet结果集的方法

next():返回的是Boolean类型 查看下一行是不是数据(判断结果集是否有元素)

获得字符串:getString()

获得Int类型:getInt():

说明:获取元素时:下标从1 开始

Private 加和不加的区别:

加了就是私有的能在这个类里面使用,如果要在别的类里面也可以使用的话就要写属性对应的getset方法,如下图。

 

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文件

持久化的主要操作:

读取,查找,保持,修改,删除

一、模式:

    1Java中一共有23种模式

    2、模块: "套路""管理代码的一种方式"

二、Java中的设计模式:

   说明:共有23种,其中DAO模式;

        备注:

三层开发框架是比较有名的开发框架(框架与模式区别),三层不是模式

                  表示层(UI)

            三层  业务层(BIZ)

                  数据访问层(DAO)

DAO模式:

DAO(Data Access Object数据存储对象)是一个数据访问接口,数据访问:顾名思义就是与数据库打交道。夹在业务逻辑与(持久化数据)数据库资源中间的访问

组成:数据库连接类(连接数据库)vO类(entity(实体)Dao接口,Dao的实现类及Dao的工厂类;

说明:  1234表示创建顺序)

1.数据库连接类(util):作用:连接并获得连接对象以及关闭数据库,通过数据库连接可以大大简化开发,在需要进行数据库连接时,只需创建该类的实例,并调用其中的方法,就可以获得数据库连接对象,不必进行重复的操作

2.vo(实体类):是一个包含属性与表中字段完全对应的类并在该类中提供SetterGetter方法来设置并获得该类中的属性

3.Dao接口类:interface为接口

该类中定义了所有用户操作如添加删除查询记录等;不过因为是接口仅仅是定义,需要子类来实现

4.dao实现(implement)类:实现某个接口

Dao实现类实现了Dao接口并实现了接口中定义的所有方法,在Dao实现类中通过连接数据库进行操作,

说明:Daoimpl

继承DaoMaster,方法如下图。

 

Tips:快速try catch

选择代码块,然后按快捷键(Alt+Shift+Z),选择Try/catch block

模块的进化

ADao模式===三层=====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:思想

1Sql语句  Select 字段 form 表明

2、泛型集合 List<Student> list    //Student:类名

持久化:查询全部数据的返回值类型 List<Student>

3:对象:集合添加的元素对象==实体

4:实体的读写:ResultSet中获取数据

5:结果集:stmt.executeQuery();方法中获取值

6:编译命令:Statement是通过Connection获取数据

7:数据源的公共方法的提取

D:测试获取的数据便利

什么是分层:

含义:一种化大为小,分而治之的软件开发方法

分层的特点

每一层都有自己的职责

上一层不用关心下一层的实现细节,上一层通过下一层提供的对外接口来使用其功能

上一层调用下一层的功能,下一层不能调用上一层功能

分层开发的好处:

各层专注于自己功能的实现,便于提高质量

便于分工协作,提高开发效率

便于代码复用

便于程序扩展

猜你喜欢

转载自www.cnblogs.com/Allonwar/p/9938378.html