java 保持固定接数_JDBC连接数据

一.数据库连接

(前面为jdbc的其他参数,文章下部分为ResultSet详解)ResultSet rs = st.executeQuery(sqlStr)

1. java的sql框架支持多种数据库连接,不同的数据库需要使用不同的数据库连接驱动,驱动来自于数据库厂商;

2. 主要需要四个参数,一个驱动信息参数,三个数据库入口参数

driverClass:驱动信息

url:数据库连接参数

user:用户名

password:密码

3.java语言定义了很多接口,数据库厂商统一实现这些接口,所以通用;

二.接口

1.Connection接口

Connection接口代表着与数据库的链接

connection接口的常用方法

返回类型

方法

功能描述

Statement

createStatment()

创建一个Statment对象

Statement

createStatment(int resultSetType,int resultSetConcurrency)

创建一个statment对象,该对象将生成具有给定类型并发性,和可保存的ResultSet对象

PrepareStatement

prepareStatement()

创建预处理对象prepardStatement

CallableStatement

prepareCall(String sql)

创建一个CallableStatment对象来调用数据库存储过程

boolean

isReadOnly()

查看当前Collection对象是否为只读

boolean

setReadOnly()

设置当前对象的默认读写模式

2.Statment接口

statment接口

返回类型

方法

功能描述

boolean

execute(String sql)

执行静态sql语句,该语句可能返回多个结果集,(改方法看似鸡肋,其实也很鸡肋,如果该语句可以返回一个ResultSet结果集,则为true,反之false,当然,当sql语句庞大的时候,可以用这个方法来检测是否能够执行从而节省资源)

ResultSet

executeQuery(String sql)

执行给定的sql语句,该语句返回单个ResultSet对象

void

clearBatch()

清空这个Statement对象的sql命令列表

int[]

executeButch()

将一批sql命令交给数据库类执行,如果全部成功,则返回更新计数组成的数组,数组元素的排序和sql添加的顺序相同

3.PreparedStatment接口,继承自Statment接口,因为PreparedStatment是安全的,Statment接口是不安全的

PrepareStatment接口的常用方法

方法参数

方法

功能描述

void

setXXX(int index,[指定给的类型] k)

将制定位置的参数设置成XXX值

ResultSet

executeQuery()

执行Sql查询,并返回对应的ResultSet结果集

void

setNull(int index ,int sqlType)

设置指定的位置为SQL NUll值

int

executeUpdate()

执行前面包含的参数的动态 [INSERT|UPDATE|DELETE]

void

clearParameters()

清楚当前所有参数值

例子

PrepareStatment ps = conn.prepareStatment("select * from emp where ename = ? ");

ps.setInt(1,‘张三‘);

//将sql中的第一个参数设置为张三

PrepareStatment ps = conn.prepareStatment("select * from emp where ename = ? ");

ps.setInt(1,‘张三‘);

//将sql中的第一个参数设置为张三

4.CallableStatement接口

CallableStatemnt接口继承并且扩展了PrepareStatemnt接口,用来执行对数据库的存储过程操作;

方法

功能描述

set+数据类型

将指定参数设置为java中指定的数据类型值

get+数据类型

以java中指定类型值的形式获取指定的JDBC中相应参数的类型值

三.ResultSet结果集详解

所有静态字段

int

CLOSE_CURSORS_AT_COMMIT

该常量指示提交当前事务时,具有此可保存性的打开的 ResultSet 对象将被关闭。

int

CONCUR_READ_ONLY

该常量指示不可以更新的 ResultSet 对象的并发模式。

int

CONCUR_UPDATABLE

该常量指示可以更新的 ResultSet 对象的并发模式。

int

FETCH_FORWARD

该常量指示将按正向(即从第一个到最后一个)处理结果集中的行。

int

FETCH_REVERSE

该常量指示将按逆向(即从最后一个到第一个)处理结果集中的行处理。

int

FETCH_UNKNOWN

该常量指示结果集中的行的处理顺序未知。

int

FETCH_UNKNOWN

该常量指示提交当前事务时,具有此可保存性的打开的 ResultSet 对象将保持开放。

int

TYPE_FORWARD_ONLY

该常量指示光标只能向前移动的 ResultSet 对象的类型。

int

TYPE_SCROLL_INSENSITIVE

该常量指示可滚动,再固定条件下可以修改表内容;

int

TYPE_SCROLL_SENSITIVE

该常量指示可滚动并且,不可修改表内容;

常用方法

返回类型

方法

功能描述

boolean

next()

将光标从当前位置向下移动一行,也就是读取下一行

boolean

previous()

将光标从当前位置向上移动一行,也就是读取上一行

void

close()

关闭ResultSet对象

int

getInt(int)

以int的形式获取结果集,以当前行指定序号的值,以列的编号或者列的名字

int

getInt(String)

以下跟以上一样以此类推

float

getFloat(int)

float

getFloat(String)

String

getString(int)

String

getString(String)

int

getRow()

得到光标当前所指定的行号

boolean

absolute(int row)

光标移动到row指定的行

boolean

relative(int rows)

光标移动到相对于当前行的指定行,上下使用+和-表示

ResultSet内存结构

20180926231550614839.png

1.ResultSet对象是Statement和ParpareStatemen创建的,所以ResultSet的具体行为指令由创建他的类定义

在jdbc中,最重要的就是ResultSet,因为他最常用,数据的中转站,很有必要弄详细;

2. ResultSet集合的主要功能使用来存储查询语句返回的结果集,注意:他存储的不是结果集内容,所以不会造成数据量过大而引发的内存溢出,

他存储的只是查询数据的部分资料,而具体的数据信息会在调用next()时拿出来;

以上言论是网上大佬说的,但的确到我这里也没有找到它里面有什么其他的数据,只保留了一些属性信息,没有具体的数据;

寻找jvm可容量视化工具,请评论;

20180926231550988838.png

3.因为ResultSet是由其他对象来创建的,所以有有几种类型不同的Result

最基本的ResultSet

这个ResultSet的作用就是完成了查询结果的存储功能,并且只能读取一次,不能够来回滚动进行读取操作,如图;

可滚动的ResultSet

这个类型支持前后滚动取得记录的next()向下读取以一行,和previous()向上读取以一行,同时还支持absolute(int row)读取指定的一行,以

及relative(int rows)移动到相对于当前行的指定行("-"号和"+")

这种结果集的创建方式如下

Statement st = conn.createStatement(int resultSetType, int resultSetConcurrency);

ResultSet rs = st.executeQuery(sqlStr);

Statement st = conn.createStatement(int resultSetType, int resultSetConcurrency);

ResultSet rs = st.executeQuery(sqlStr);

要实现这种类型的ResultSet对象的,在Statement创建该对象是为其指定类型;

resultSetType用来设置ResultSet类型是否支持滚动,或者是不可滚动,取值如下:ResultSet.TYPE_FORWARD_ONLY       只能向前滚动;

ResultSet.TYPE_SCROLL_INSENSITIVE 实现任意的前后滚动,即可以使用各种移动指针的方法,并且支持修改;

Result.TYPE_SCROLL_SENSITIVE      实现任意的前后滚动,对修改敏感;

resultSetConcurency是设置 ResultSet 对象能够修改的,取值如下:

ResultSet.CONCUR_READ_ONLY 设置为只读类型的参数。

ResultSet.CONCUR_UPDATABLE 设置为可修改类型的参数。

所以如果只是想要可以滚动的类型的 Result,就要在Statement创建ResultSet是为其指定类型

Statement st = conn.createStatement(Result.TYPE_SCROLL_INSENITIVE,

ResultSet.CONCUR_READ_ONLY);

ResultSet rs = st.excuteQuery(sqlStr);

//用这个 Statement 执行的查询语句得到的就是可滚动的 ResultSet 。

Statement st = conn.createStatement(Result.TYPE_SCROLL_INSENITIVE,ResultSet.CONCUR_READ_ONLY);

ResultSet rs = st.excuteQuery(sqlStr);

//用这个 Statement 执行的查询语句得到的就是可滚动的 ResultSet 。

4.ResultSet的可更新状态

RresltSet不仅可以用来存储查询结果返回的数据,也可以通过修改其内中值,然后起到更新数据库内容的作用

ResultSet相当于数据中的视图,他没有实体,并且,所提交的Sql语句必须满足一下几点内容

只引用了单个表

不包含jion和分组信息

列中要包含主键信息

创建可跟新结果集的办法:

Statement st = createstatement(Result.TYPE_SCROLL_INSENSITIVE,Result.CONCUR_UPDATABLE) //具体的ResultSet字段信息请参考上面的字段表

Statement st = createstatement(Result.TYPE_SCROLL_INSENSITIVE,Result.CONCUR_UPDATABLE)  //具体的ResultSet字段信息请参考上面的字段表

5. 可以保持的ResultSet

Statement关闭结果集的方法,当前有一个结果集,又去执行了一条sql语句,会导致第一个结果集关闭,或者在commit方法的时候也会关闭结果集,可保持的意思就是不会被关闭的结果集;

Statement st=createStatement(int resultsetscrollable,int resultsetupdateable,int resultsetSetHoldability)

ResultSet rs = st.excuteQuery(sqlStr);

Statement st=createStatement(int resultsetscrollable,int resultsetupdateable,int resultsetSetHoldability)

ResultSet rs = st.excuteQuery(sqlStr);

两个参数在第3. 4. 中已经阐述的参数 ,这里说明一下resultsetSetHoldability参数

resultsetSetHoldability参数表名,该结果集是否能够在连接关闭时打开

ResultSet.HOLD_CURSORS_OVER_COMMIT:表示修改提交时,不关闭数据库.

ResultSet.CLOSE_CURSORS_AT_COMMIT:表示修改提交时ResultSet关闭.

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值