五、对象拷贝、JDBC

五、对象拷贝、JDBC

1. 为什么要使用克隆?

在这里插入图片描述

2. 如何实现对象克隆?

在这里插入图片描述

3. 深拷贝和浅拷贝的区别?

在这里插入图片描述

JDBC

用于执行 Sql语句的 API;

JDBC可做三件事:
1、与数据库建立连接;
2、发送操作数据库的 sql语句;(sql语句具体执行不在 JVM,而是在数据库引擎中,sql语句本身与 Java语句完全不同的,它只有在数据库引擎才能被认证、解释、执行)
3、处理结果。(数据库引擎执行后会返回一个结果)

【1】创建数据库连接:
① 加载驱动程序:class.forName("com.mysql.jdbc.Driver");
(通过 class.forName来加载一个类,来获取它的运行时信息;参数是一个字符串,一个类的全限定名)
② 建立连接:(通过此连接对象发送操作数据库的 sql语句,让数据库引擎去执行)

Connection conn=DriverManager.getConnection(url);
(String url="jdbc:mysql://localhost:3306/mystore?
            user=root &password=123 &useUnicode=true&
            characterEncoding=UTF-8 &useSSL=true")

【2】发送操作数据库的 sql语句:
Connection接口提供了三个方法用于创建这些类的实例,JDBC提供了三个类用于向数据库发送 sql语句;
Statement:由 Connection对象的 createStatement() 方法创建 Statement对象,同于发送简单的 sql语句(一次性执行的);
PrepareStatement:由 Connection对象的 PrepareStatement方法创建 PrepareStatement() 对象,同于发送带有参数的语句(用于在服务器端,数据库引擎那边进行预编译,然后进行反复的重用);
CallableStatement:由 Connection对象的 prepareCall() 方法创建 CallableStatement对象,同于执行 sql存储过程;

JDBC用 PrepareStatement有什么好处?:可在数据库引擎进行预编译进行反复重用,在缓存中且较安全;

如何发送?:通过 Statement、PrepareStatement、CallableStatement这些对象的 execute()/executeXXX()方法(executeQuery()、executeUpdate())来执行 sql语句;数据库引擎执行后会返回结果。
【3】处理结果:
对于上面的返回结果有两种形式:
① 对于更新操作:(增删改),完成后会返回一个受影响的行数(记录数);
② 对于查询操作:返回查询的结果集 ResultSet。
对于结果集有两个重要的方法:
next():用来下移结果集的记录指针并判断当前指针是否指向空,这个指针一开始是指向结果集中所有记录的前面,并未指向第一条。所以 next()必须要先调用一次,它下移,指向第一条。
getX():是一组方法,X表示数据类型。一条记录要在 java代码中读出,必须要一个一个字段的读,不能把一条记录全部读出来。

三种 Statement区别:

Jdbc客户端 ——> 数据库服务器端
① 创建:S、PS在客户端创建,CS创建在服务器端;(创建不仅指 S对象的创建,也指 Sql语句的创建)
②存储:S存储在客户端,PS存储在服务器端(也是 PS好用的原因),CS储存在服务器端;(对 S在客户端创建了 Sql语句,调用 execute()把 sql语句发送到服务器端,然后在数据库服务器端执行,它不会把 sql语句存储下来,每次执行 sql语句都会发送到数据库服务器端; 对 PS虽然在客户端创建 sql语句,但调用 PS的 execute()方法执行时会把对应的 sql语句发送到数据库服务器端,在服务器端存储下来,下次执行时同样的 sql语句,不会再把 sql语句发送到数据库服务器端,只会把替换占位符的参数传递过去再执行,所以 PS效率高于 S)

PS、CS是同构的 S,两者都可以使用带参、不带参的 sql语句,都可使用占位符;
S为异构的 S,只能使用不带参的 sql语句,不能使用占位符。

使用 S:
加载驱动程序;(class.forName()…)
创建连接;(DriverManager.getConnection())
创建 S对象;(Statement s=conn.createStatement())
定义 Sql语句;
调用 S的 executeX(sql)执行 sql,返回 rs结果;(ResultSet rs=s.executeQuery(sql))
使用 PS:
加载驱动程序;(class.forName()…)
创建连接;(DriverManager.getConnection())
创建 S对象;(Statement s=conn.createStatement())
定义 Sql语句,可有占位符;
创建 PS对象,将 sql传入;(ps.executeX(sql))
替换占位符,执行 sql语句;
调用 PS对象的 executeX(sql)执行 sql,返回 rs结果;(ResultSet rs=s.executeQuery(sql))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值