JDBC连接数据以及详细的ResultSet结果集解释

一.数据库连接

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

 

1. java的sql框架支持多种数据库连接,不同的数据库需要使用不同的数据库连接驱动,驱动来自于数据库厂商;
 
2. 主要需要四个参数,一个驱动信息参数,三个数据库入口参数
  • driverClass:驱动信息
  • url:数据库连接参数
  • user:用户名    
  • password:密码
 
3.java语言定义了很多接口,数据库厂商统一实现这些接口,所以通用;
 
 

二.接口

1.Connection接口
  • Connection接口代表着与数据库的链接
connection接口的常用方法
返回类型方法功能描述
StatementcreateStatment()创建一个Statment对象
StatementcreateStatment(int resultSetType,int resultSetConcurrency)创建一个statment对象,该对象将生成具有给定类型并发性,和可保存的ResultSet对象
PrepareStatementprepareStatement()创建预处理对象prepardStatement
CallableStatementprepareCall(String sql)创建一个CallableStatment对象来调用数据库存储过程
booleanisReadOnly()查看当前Collection对象是否为只读
booleansetReadOnly() 设置当前对象的默认读写模式
 
 
 
 
2.Statment接口
statment接口
返回类型方法功能描述
booleanexecute(String sql)执行静态sql语句,该语句可能返回多个结果集,(改方法看似鸡肋,其实也很鸡肋,如果该语句可以返回一个ResultSet结果集,则为true,反之false,当然,当sql语句庞大的时候,可以用这个方法来检测是否能够执行从而节省资源)
ResultSetexecuteQuery(String sql)执行给定的sql语句,该语句返回单个ResultSet对象
voidclearBatch()清空这个Statement对象的sql命令列表
int[]executeButch()将一批sql命令交给数据库类执行,如果全部成功,则返回更新计数组成的数组,数组元素的排序和sql添加的顺序相同
 
 
3.PreparedStatment接口,继承自Statment接口,因为PreparedStatment是安全的,Statment接口是不安全的
PrepareStatment接口的常用方法
方法参数方法功能描述
voidsetXXX(int index,[指定给的类型] k)将制定位置的参数设置成XXX值
ResultSetexecuteQuery()执行Sql查询,并返回对应的ResultSet结果集
voidsetNull(int index ,int sqlType)设置指定的位置为SQL NUll值
intexecuteUpdate()执行前面包含的参数的动态 [INSERT|UPDATE|DELETE]
voidclearParameters()清楚当前所有参数值
  • 例子
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该常量指示可滚动并且,不可修改表内容;

 

 
 
常用方法
返回类型方法功能描述
booleannext()将光标从当前位置向下移动一行,也就是读取下一行
booleanprevious()将光标从当前位置向上移动一行,也就是读取上一行
voidclose()关闭ResultSet对象
intgetInt(int)以int的形式获取结果集,以当前行指定序号的值,以列的编号或者列的名字
intgetInt(String)以下跟以上一样以此类推
floatgetFloat(int) 
floatgetFloat(String) 
StringgetString(int) 
StringgetString(String) 
intgetRow()得到光标当前所指定的行号
booleanabsolute(int row)光标移动到row指定的行
booleanrelative(int rows)光标移动到相对于当前行的指定行,上下使用+和-表示
 
        ResultSet内存结构
         
 
 
 
 
1.ResultSet对象是Statement和ParpareStatemen创建的,所以ResultSet的具体行为指令由创建他的类定义
  在jdbc中,最重要的就是ResultSet,因为他最常用,数据的中转站,很有必要弄详细;
 
 
2. ResultSet集合的主要功能使用来存储查询语句返回的结果集,注意: 他存储的不是结果集内容,所以不会造成数据量过大而引发的内存溢出,
  他存储的只是查询数据的部分资料,而具体的数据信息会在调用next()时拿出来;
  以上言论是网上大佬说的,说错了,说错了,具体内容已经被保存到ResultSet里的RowDate里面了,字节的形式,打开会看到一堆二进制;
  寻找jvm可容量视化工具,请评论;
 
 
 
 
 
 
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);

 

 
 
    • 要实现这种类型的ResultSet对象的,在Statement创建该对象是为其指定类型;
      •  resultSetType用来设置ResultSet类型是否支持滚动,或者是不可滚动,取值如下:
  1. ResultSet.TYPE_FORWARD_ONLY       只能向前滚动;            
  2. ResultSet.TYPE_SCROLL_INSENSITIVE 实现任意的前后滚动,即可以使用各种移动指针的方法,并且支持修改;
  3. Result.TYPE_SCROLL_SENSITIVE      实现任意的前后滚动,对修改敏感;    
 
 
      •  resultSetConcurency 是设置 ResultSet 对象能够修改的,取值如下:              
  1. ResultSet.CONCUR_READ_ONLY 设置为只读类型的参数。 
  2. 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 。

 

 
 
 
 
4.ResultSet的可更新状态
  • RresltSet不仅可以用来存储查询结果返回的数据,也可以通过修改其内中值,然后起到更新数据库内容的作用  
  • ResultSet相当于数据中的视图,他没有实体,并且,所提交的Sql语句必须满足一下几点内容
    • 只引用了单个表
    • 不包含jion和分组信息
    • 列中要包含主键信息
创建可跟新结果集的办法:
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);

 

 
 
  • 两个参数在第3. 4. 中已经阐述的参数 ,这里说明一下resultsetSetHoldability参数
    • resultsetSetHoldability参数表名,该结果集是否能够在连接关闭时打开
      • ResultSet.HOLD_CURSORS_OVER_COMMIT:表示修改提交时,不关闭数据库.
      • ResultSet.CLOSE_CURSORS_AT_COMMIT:表示修改提交时ResultSet关闭.
 
 
 
 
 



 



转载于:https://www.cnblogs.com/lyuweigh/p/eb16d79e30a2e4a9f606770ff591fc7b.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值