JDBC数据库 入门二

面向接口编程

DAO模式

具体的实现类创建,隐藏在工厂中,

通过工厂类的get方法得到这个接口的实现类的实例

工厂类

返回一个具体的UserDao 的实现类对象

1.给出一个配置文件,文件中给出UserDao接口的实现类名称

2.加载配置文件,获取类名称,然后通过反射来创建这个类对象

加载配置文件,就是键值对的文件,实现类的名称和自己的’‘xxx’’'配对

加载配置文件:

首先,加载一个流

InputStream in = DaoFactory.class.getClassLoader().getResourceAsStream("配置文件");

Propeties props = new Properties();

props.load(in);

这样,配置文件信息就到了props中,上面部分可以放在工厂类的静态块中,只需要执行一次

获取实现类名称:

String name = props.getProperty(“xxx”)

反射创建对象:

class c = class.forName(name);

Usedao u = c.newInstance();

就创建出来了

这样 我们的相关接口的实现类的创建,就直接可以在工厂类中使用get方法就行 ,这样代码中,没有出现过实现类的名称,只存在配置文件中。

util包下的Date与sql包下的时间类型之间的转换

数据库 的类型 与Java中类型的对应关系

 DATE -> java.sql.Date

TIME -> java.sql.Time 

TIMESTAMP -> java.sql.Timestamp

领域对象 ,其中所有的属性不能出现javas.sql包下的东西。

所以我们需要把领域对象中的util类型,转换成sql的类型,完成get方法

把结果集中的sql类型,转换utils类型,赋给领域对象,完成set方法

比如:ResultSet 结果集 getDate()方法 返回的是java.sql.Date的类型

PrepareStatement 的setData(int,Date),Date就是java.sql.Date下的

所以我们需要时间类型的转换:

java.sql.Time----java.util.Time

java.sql.Date – java.util.Date

java.sql.Timestamp --java.util.Timestamp

util -> sql

我们查看sql的三种类型 的 构造器,发现其参数是long类型 毫秒值

所以我们util的三种类型 ,使用毫秒值来创建sql 的三种类型

java.util.Date date = new java.util.Date();

long l = date.getTime();

java.sql.Date sqlDate = new java.sql.Date(l);

sql -> util

直接赋值,因为util的三种类型 , 是sql三种类型的父类,子类可以直接赋值给父类,隐藏了子类的功能

大数据传入数据库

1.把mp3保存在数据库中

连接数据库

得到连接Connection(通过JDBC Utils)

sql模板,然后得到PrepareStatement

给参数赋值

主要是放入mp3的数据,是blob类型

如何将 mp3文件 -> blob类型

查看blob 发现是接口,有一个实现类SerialBlob,其构造器 需要一个byte[]

mp3 文件 变成 byte[]

先导入一个io的包,获得方法

byte[] bytes = IOUtils.toByteArray(new FileInputStream("文件路径"))

执行,exectuteUpdate()

从数据库中读取mp3

创建Connetion

给sql模板,创建PrepareStatement

直接执行 查询 ,得到结果集

获取结果集 中的 mp3数据

先得到Blob类型 的这个数据

Blob 类型 对象变成文件

通过Blob 得到输入流对象

创建输出流对象

把输入流的数据写入输出流中

InputStream in = biob.getBinaryStream();

OutputStream out = new FileOutputStream("路径");

IOUtils.copy(in, out);

这样,这个路径下就会出现mp3文件了。

批处理

即是一次性向服务器发送多条sql语句,服务器一次性处理

批处理只针对更新(增,删,改)

我们之前创建pstmt对象,传递一个sql模板

然后给sql模板的? 赋值

现在我们批处理

  • 创建pstmt对象,也是需要一个sql模板,然后其内部有集合

  • 使用循环,向pstmt中添加参数。然后一组参数与模板匹配,成为一条sql语句

  • 调用其执行批方法,完成向数据库发送

如何循环往pstmt中添加参数

for循环中,往 各个列 的位置添加好参数后,

pstmt.addBatch();

就是将这一组参数加入到了pstmt 内部的集合中

循环结束后,执行批处理

pstmt.executeBatch();

MySQL的批处理也需要通过参数来打开:

rewrtiteBatchedStatements = true

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值