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内存结构

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

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

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

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

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

寻找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);
    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 。
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关闭.

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">

原文地址:https://www.cnblogs.com/lyuweigh/p/eb16d79e30a2e4a9f606770ff591fc7b.html

时间: 2024-08-05 20:58:47

JDBC连接数据的相关文章

JDBC连接数据以及操作数据

好久没有写博文了,写个简单的东西热热身,分享给大家. jdbc相信大家都不陌生,只要是个搞java的,最初接触j2ee的时候都是要学习这么个东西的,谁叫程序得和数据库打交道呢!而jdbc就是和数据库打交道非常基础的一个知识,也是比较接近底层的,在实际的工作中大家用得更多的其实还是比较成熟的框架,例如Hibernate.Mybatis. 但是作为这些成熟框架的底层的jdbc却也是我们应该去掌握的,只有了解了jdbc的增删改查,这样在以后如果有兴趣去研究Hibernate或者Mybatis的源代码的

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

在本blog中,主要介绍的是Crystal Reports 2008使用JDBC连接mysql数据库. 在连接之间,首先要确认你电脑上面都安装了mysql数据库. 其次,就是jdbc连接数据时候所使用的相关jar包. 接下来,就可以进行数据库的一些连接操作了. 对JDBC不是很了解的,可以到 完整java开发中JDBC连接数据库代码和步骤 了解相关的操作 1.打开Crystal Reports的数据专家 2.点击JDBC(JNDI)出现: 3.输入url和数据库类名,点击下一步: 4.输入pas

使用JDBC连接MySQL数据库--典型案例分析(八)----实现员工数据的分页查询

转载请注明:http://blog.csdn.net/uniquewonderq 问题: 使用JDBC连接Mysql数据库,实现对Emp表数据的分页查询功能. 方案: 对于较大的数据量,通常采用分页查询的方式.不同的数据库产品有不同的数据库级的分页查询策略.例如:Oracle通常使用rownum的方式:而Mysql使用limit的方式. Oracle采用rownum和子查询实现分页查询,SQL语句如下, select * from (select rownum rn,empno,ename,jo

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

终于回到既定轨道上了,这一篇讲讲数据库连接池的相关知识,线程池以后有机会再结合项目单独写篇文章(自己给自己挖坑,不知道什么时候能填上),从这一篇文章开始到本阶段结束的文章都会围绕数据库和dao层的优化去写,本篇是一个开始.本文会介绍连接池技术并对比目前比较流行的java连接池技术,之后,会把druid整合到项目中来,将技术方案落地,实际整合到项目中,让技术能为我所用. 使用连接池的原因 jdbc的demo //第一步,注册驱动程序 //com.MySQL.jdbc.Driver Class.fo

JDBC连接Oracle数据库

我记得大二的时候,我们上java课程,当时老师就说了JDBC这个东西,也没怎么好好学,直到现在,我也不直到JDBC是什么玩意,就知道这玩意可以从数据库提取数据,那么JDBC到底是什么呢? JDBC是Java DataBase Connectivity的缩写,含义意思是java数据库连接,不需要多解释了,我感觉! 那么我们如何去做这样子的一个连接呢?用过一次之后就会发现,其实很简单,记住几个步骤,还有就是导入必要的驱动包就可以了,下面是几个重要的步骤: 第一步,你的项目环境中必须要导入必要的数据库

HSQLDB源码学习——数据库安装启动及JDBC连接

HSQLDB 是一个轻量级的纯Java开发的开放源代码的关系数据库系统.因为HSQLDB的轻量(占用空间小),使用简单,支持内存运行方式等特点,HSQLDB被广泛用于开发环境和某些中小型系统中. 在http://sourceforge.net/projects/hsqldb/files/下载了HSQLDB 1.8.0版本.把下载的zip文件解压缩至任意目录例如c:\hsqldb1.8便完成安装. hsqldb有四种运行模式: 一.内存(Memory-Only)模式:所有数据都在内存里操作.应用程

MySql &amp; JDBC &amp; 连接池 &amp; 总结

连接池:解决资源浪费,提高代码性能. 本小节目标: 使用DBCP,C3P0连接池完成基本数据库的操作. 使用DBUtils完成CRUD的操作. 数据库连接池的解决方案是: 当应用程序启动时,系统主动建立足够的数据库连接,并将这些连接组成一个连接池.每次应用程序请求数据库连接时,无须重新打开连接,而是从连接池中取出已有的连接使用,使用完后不再关闭数据库连接,而是直接将连接归还给连接池.通过使用连接池,将大大提高程序的运行效率. 数据库连接池是Connection 对象的工程.数据库连接池的常用参数

java jdbc 连接mysql数据库 实现增删改查

好久没有写博文了,写个简单的东西热热身,分享给大家. jdbc相信大家都不陌生,只要是个搞java的,最初接触j2ee的时候都是要学习这么个东西的,谁叫程序得和数据库打交道呢!而jdbc就是和数据库打交道非常基础的一个知识,也是比较接近底层的,在实际的工作中大家用得更多的其实还是比较成熟的框架,例如Hibernate.Mybatis. 但是作为这些成熟框架的底层的jdbc却也是我们应该去掌握的,只有了解了jdbc的增删改查,这样在以后如果有兴趣去研究Hibernate或者Mybatis的源代码的

通过JDBC连接Mysql之基础篇

1 JDBC基础知识 Q1 什么是JDBC技术 Java Database Connectivity :Java访问数据库的解决方案 Q2 JDBC如何实现访问数据库 JDBC定义了一套标准通用接口,由数据库厂商来实现这些接口连接数据库 Q3 JDBC有哪些标准通用接口 DriverManager 驱动管理 Connection/DatabaseMetaData 连接接口 Statement/PreparedStatement/CallableStatement 语句对象接口 ResultSet