一.数据库连接

(前面为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中的第一个参数设置为张三
 
 
 
 
 
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内存结构
        
 
 
 
 
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关闭.
 
 
 
 
 
 

JDBC连接数据以及详细的ResultSet结果集解释的更多相关文章

  1. JDBC连接数据以及操作数据

    好久没有写博文了,写个简单的东西热热身,分享给大家. jdbc相信大家都不陌生,只要是个搞java的,最初接触j2ee的时候都是要学习这么个东西的,谁叫程序得和数据库打交道呢!而jdbc就是和数据库打 ...

  2. jdbc:mysql:/// jdbc连接数据url简写方式

    正常情况下我们写jdbc连接本地mysql数据库的时候通常是这样写 jdbc:mysql:localhost:3306/数据库名 下面就是要提到的简单的方法 jdbc:mysql:///数据库名

  3. Crystal Reports 2008(水晶报表) JDBC连接mysql数据库

    在本blog中,主要介绍的是Crystal Reports 2008使用JDBC连接mysql数据库. 在连接之间,首先要确认你电脑上面都安装了mysql数据库. 其次,就是jdbc连接数据时候所使用 ...

  4. JDBC连接sql server数据库的详细步骤和代码

    JDBC连接sql server数据库的详细步骤和代码 JDBC连接sql server数据库的步骤如下: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Ja ...

  5. java用JDBC连接MySQL数据库的详细知识点

    想实现java用JDBC连接MySQL数据库.需要有几个准备工作: 1.下载Connector/J的库文件,下载Connector/J的官网地址:http://www.mysql.com/downlo ...

  6. JDBC连接sql server数据库的详细步骤和代码 转

    JDBC连接sql server数据库的步骤如下: 1.加载JDBC驱动程序(只做一次): 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.lang.C ...

  7. Spring+SpringMVC+MyBatis+easyUI整合优化篇(九)数据层优化-jdbc连接池简述、druid简介

    日常啰嗦 终于回到既定轨道上了,这一篇讲讲数据库连接池的相关知识,线程池以后有机会再结合项目单独写篇文章(自己给自己挖坑,不知道什么时候能填上),从这一篇文章开始到本阶段结束的文章都会围绕数据库和da ...

  8. 大数据系列之数据仓库Hive命令使用及JDBC连接

    Hive系列博文,持续更新~~~ 大数据系列之数据仓库Hive原理 大数据系列之数据仓库Hive安装 大数据系列之数据仓库Hive中分区Partition如何使用 大数据系列之数据仓库Hive命令使用 ...

  9. 数据层优化-jdbc连接池简述、druid简介

    终于回到既定轨道上了,这一篇讲讲数据库连接池的相关知识,线程池以后有机会再结合项目单独写篇文章(自己给自己挖坑,不知道什么时候能填上),从这一篇文章开始到本阶段结束的文章都会围绕数据库和dao层的优化 ...

随机推荐

  1. PAT 天梯赛 L3-003. 社交集群 【并查集】

    题目链接 https://www.patest.cn/contests/gplt/L3-003 思路 并查集 用一个 cou[i] 来表示 第 i 门课程 的第一个 感兴趣的人 并的时候 判断 cou ...

  2. PAT 甲级 1104. Sum of Number Segments (20) 【数学】

    题目链接 https://www.patest.cn/contests/pat-a-practise/1104 思路 最容易想到的一个思路就是 遍历一下所有组合 加一遍 但 时间复杂度 太大 会超时 ...

  3. spring 'arroudAspect' for bean class [com.dw.test.ArroudAspect] conflicts with existing, non-compatible bean definition of same name and class [com.dw.aspect.ArroudAspect]

    Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: ...

  4. office 2010 激活工具 迷你KMS使用说明

    “迷你KMS”——“”体态轻盈仅只1MB.但却一身承担两大职能:KMS服务器和客户激活端.“迷你KMS”可激活Microsoft Office 2010系列三大版本,以及Windows 7企业.专业版 ...

  5. animate旋转动画练习,css3形变练习

    <!DOCTYPE html> <!-- saved from url=(0048)http://yinjiazeng.github.io/test/dial/index.html ...

  6. listen and translation exercise 53

    It was hard work and there weren't any interesting things for him. You should be an expert with comp ...

  7. P1912 [NOI2009]诗人小G[决策单调性优化]

    地址 n个数划分若干段,给定$L$,$p$,每段代价为$|sum_i-sum_j-1-L|^p$,求总代价最小. 正常的dp决策单调性优化题目.不知道为什么luogu给了个黑题难度.$f[i]$表示最 ...

  8. ACM学习历程—HDU 2112 HDU Today(map && spfa && 优先队列)

    Description 经过锦囊相助,海东集团终于度过了危机,从此,HDU的发展就一直顺风顺水,到了2050年,集团已经相当规模了,据说进入了钱江肉丝经济开发区500强.这时候,XHD夫妇也退居了二线 ...

  9. windows下搭建绿色nodejs运行环境

    无意中在网上看到NodeJS的文章,发现最近还挺火的,正好我也是做技术的,那就下载个玩玩呗,试试它的魅力,也来亲自感受下. 网上nodejs的环境的搭建到处都是,我这里就不说了,今天我想通过我自己的环 ...

  10. MySQL 5.7新特性

    新增特性 Security improvements. MySQL.user表新增plugin列,且若某账户该字段值为空则账户不能使用.从低版本MySQL升级至MySQL5.7时要注意该问题,且建议D ...