,所以在使用的时候需要包裹在try-catch块中或者向上一级抛出异常。...更新语句包括插入、更新、删除等操作,会修改数据库的状态。 执行更新 执行更新需要调用Statement的executeUpdate方法,接受一个SQL更新字符串。...执行查询语句需要调用Statement的executeQuery方法,这个方法接受一个查询字符串,会返回一个ResultSet对象,也就是查询的结果集。这个对象会包含所有的查询结果和一个游标。...一组get方法,按列名称获取当前行的数据deleteRow()删除当前行的数据,也会从地从数据库中删除updateXXX一组update方法,用来更新结果集的,和get方法一样,存在按照列名和列序号两种方式更新数据...updateRow()将更新之后的行写入结果集和底层数据库 默认情况下结果集只支持一次遍历,也就是说游标在遍历到下一条数据之后,就无法后退了。
JDBC是接口,而JDBC驱动才是接口的实现,没有驱动无法完成数据库连接!每个数据库厂商都有自己的驱动,用来连接自己公司的数据库。...ResultSet executeQuery(String sql):执行查询操作,执行查询操作会返回ResultSet,即结果集。 ...如果使用execute()方法执行的是查询语句,那么还要调用ResultSet getResultSet()来获取select语句的查询结果。...5 ResultSet之获取列数据 可以通过next()方法使ResultSet的游标向下移动,当游标移动到你需要的行时,就需要来获取该行的数据了,ResultSet提供了一系列的获取列数据的方法: l...上面方法中,参数columnIndex表示列的索引,列索引从1开始,而不是0,这第一点与数组不同。
我们最常用的操作就是从数据库的ResultSet中获取数据,其实这个包中还有一个非常有用的类叫做ResultSetMetaData,可以通过这个类来获取查询数据的元信息,一起来看看吧。...使用ResultSet java.sql.ResultSet是一个通用的规范,用来表示从数据库获取到的数据。...通常来说,我们通过connection来创建Statement,然后通过执行查询语句来得到: Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE...,我们可以通过它的getMetaData方法,来获取结果集的元数据。...ResultSetMetaData getMetaData() throws SQLException; 举个具体的例子: ResultSet rs = stmt.executeQuery
,即执行insert、update、delete语句,其实这个方法也可以执行create table、alter table,以及drop table等语句,但我们很少会使用JDBC来执行这些语句; ResultSet...executeQuery(String sql):执行查询操作,执行查询操作会返回ResultSet,即结果集。...ResultSet内部维护一个行光标(游标),ResultSet提供了一系列的方法来移动游标: void beforeFirst():把光标放到第一行的前面,这也是光标默认的位置; void afterLast...之获取列数据 可以通过next()方法使ResultSet的游标向下移动,当游标移动到你需要的行时,就需要来获取该行的数据了,ResultSet提供了一系列的获取列数据的方法: String getString...上面方法中,参数columnIndex表示列的索引,列索引从1开始,而不是0,这第一点与数组不同。
Statement 接口中定义了下列方法用于执行 SQL 语句: int excuteUpdate(String sql):执行更新操作INSERT、UPDATE、DELETE ResultSet executeQuery...ResultSet 对象以逻辑表格的形式封装了执行数据库操作的结果集,ResultSet 接口由数据库厂商提供实现 ResultSet 返回的实际上就是一张数据表。...ResultSet 对象维护了一个指向当前数据行的游标,初始的时候,游标在第一行之前,可以通过 ResultSet 对象 的 next() 方法移动到下一行。调用 next()方法检测下一行是否有效。...如何获取 ResultSetMetaData: 调用 ResultSet 的 getMetaData() 方法即可 2....可以在finally中关闭,保证及时其他代码出现异常,资源也一定能被关闭。
Statement st = conn.createStatement(); // 4、执行查询 ResultSet rs = st.executeQuery(sql); // 5、获取结果集的元数据...来表示,调用 PreparedStatement 对象的 setXxx() 方法来设置这些参数. setXxx() 方法有两个参数,第一个参数是要设置的 SQL 语句中的参数的索引(从 1 开始),第二个是设置的...对象 ResultSet 对象以逻辑表格的形式封装了执行数据库操作的结果集,ResultSet 接口由数据库厂商提供实现 ResultSet 返回的实际上就是一张数据表。...ResultSet 对象维护了一个指向当前数据行的游标,初始的时候,游标在第一行之前,可以通过 ResultSet 对象的 next() 方法移动到下一行。调用 next()方法检测下一行是否有效。...rsmd = rs.getMetaData(); // 6.1通过ResultSetMetaData得到columnCount,columnLabel;通过ResultSet得到列值 int
,说明上面操作没有异常,则可以正常提交事务 } catch (SQLException e) { try { connection.rollback();//如果执行到该处,说明try...块操作有异常,则需要回滚!...接口: 1.first()/beforeFirst():将游标移动到ResultSet中第一条记录(的前面) 2.last()/afterLast():将游标移动到ResultSet中最后一条记录(的后面...5.next():将游标下移一行 6.previous():将游标上移一行 7.insertRow():向当前ResultSet和数据库中被插入行处插入一条记录 8.deleteRow():将当前ResultSet...():更新当前ResultSet中的所有记录 14.getMetaData():返回描述ResultSet的ResultSetMetaData对象 15.isAfterLast(): 是否到了结尾 16
为了解决这个问题Spring Batch提供了2套数据读取方案: 基于游标读取数据 基于分页读取数据 游标读取数据 对于有经验大数据工程师而言数据库游标的操作应该是非常熟悉的,因为这是从数据库读取数据流标准方法...在一切都执行完毕之后,框架会使用回调过程调用ResultSet::close来关闭游标。由于所有的业务过程都绑定在一个事物之上,所以知道到Step执行完毕或异常退出调用执行close。...SQL语句出现警告时,是输出日志还是抛出异常,默认为true——输出日志 fetchSize 预通知JDBC驱动全量数据的个数 maxRows 设置ResultSet从数据库中一次读取记录的上限 queryTimeout...将这个属性设置为true,在框架中会有一个位置计数器与ResultSet保持一致,当执行完Reader后位置不一致会抛出异常。...对于一个Step而言,在写入一份文件时需要保持对文件的打开状态从而能够高效的向队尾添加数据。如果每次都重新打开文件,从开始位置移动到队尾会耗费大量的时间(很多文件流无法在open时就知道长度)。
正如前文《SQL 执行》提到的“分表分库,需要执行的 SQL 数量从单条变成了多条”,多个SQL执行结果必然需要进行合并,例如: SELECT * FROM t_order ORDER BY create_time...resultSet) throws SQLException { ResultSetMetaData resultSetMetaData = resultSet.getMetaData(); /...Stream 流式:将数据游标与结果集的游标保持一致,顺序的从结果集中一条条的获取正确的数据。看完下文第三节OrderByStreamResultSetMerger 可以形象的理解。...private Object[] load(final ResultSet resultSet) throws SQLException { int columnCount = resultSet.getMetaData...); } ---- 在看下,我们上文 Stream 方式归并的定义:将数据游标与结果集的游标保持一致,顺序的从结果集中一条条的获取正确的数据。
ResultSet对从数据库返回的结果进行了封装,使用迭代器的模式逐条取出结果集中的记录。...ResultSet游标的移动和定位 Resultset 提供了很多游标定位的方法,部分方法已经在下面列出: boolean absolute(int row) 将光标移动到此...boolean last() 将光标移动到此 ResultSet 对象的最后一行。 boolean next() 将光标从当前位置向前移一行。 ...可以通过以下方法获取: ResultSetMetaData getMetaData() 获取此 ResultSet 对象的列的编号、类型和属性。...在使用ResultSet去记录中的某一列值的时候,用户要根据数据库对应列的数据类型地应的java数据类型,否则的话有可能抛出异常。
; if (resultSet.getMetaData().getColumnCount() > 0) { columnComment = resultSet.getMetaData...一旦查询执行成功,我们通过ResultSet对象遍历查询结果,并使用resultSet.getInt、resultSet.getString等方法从结果集中获取数据。...异常处理 务必进行适当的异常处理,以处理可能的数据库连接和查询执行中的错误。这可以帮助你捕获和处理潜在的问题。 5....COMMIT; 事务回滚:如果在事务执行过程中发生错误或者您需要撤销事务中的操作,可以使用ROLLBACK语句将事务回滚。这将使事务中的操作都被撤销,并且数据库恢复到事务开始前的状态。...事务处理和异常处理:在应用程序中,通常会结合使用事务处理和异常处理,以处理事务中的错误情况。这可以确保在发生异常时执行回滚操作,以保持数据的一致性。
通过遍历ResultSet,我们可以访问和操作从数据库中检索的数据。本文将详细介绍如何使用JDBC来遍历ResultSet,以及在遍历过程中的注意事项。 什么是 ResultSet?...ResultSet对象具有游标,初始时位于第一行之前,通过移动游标,可以逐行遍历查询结果。...执行查询:使用Statement或PreparedStatement对象执行SQL查询,将查询结果存储在ResultSet中。...接着,我们使用resultSet.next()方法移动游标,逐行遍历查询结果,从每行中获取数据。最后,我们在使用完ResultSet后,关闭了相关的资源。...异常处理:在进行数据库操作时,要处理可能的SQLException异常。通常使用try-catch块来捕获异常并进行处理。 游标位置:在遍历ResultSet时,始终要注意游标的位置。
本页涵盖以下主题: ResultSet 接口 从行中检索列值 游标 在 ResultSet 对象中更新行 使用 Statement 对象进行批量更新 在 ResultSet...ResultSet 对象的灵敏度由三种不同的 ResultSet 类型之一确定: TYPE_FORWARD_ONLY:结果集无法滚动;其游标仅向前移动,从第一行之前到最后一行之后。...:ResultSet游标不会关闭;它们是可保持的:当调用commit方法时,它们保持打开状态。...换句话说,由这个传统数据库产生的任何ResultSet对象都没有可滚动的游标,其中的数据也无法修改。...执行frs的命令,将frs填充为从生成的ResultSet对象中获取的数据,并关闭连接。
存储过程: 存储过程是 SQL, PL/SQL, Java 语句的组合, 它使你能将执行商业规则的代码从你的应用程序中移动到数据库。这样的结果就是,代码存储一次但是能够被多个程序使用。...,否则会报无效的SQL语句的异常。...3、在使用select….into….时必须保证数据库有该数据,否则报”no data found”异常 4、在存储过程中,别名不能和字段名相同,否则虽然编译能通过,但是运行结果会报错 五、存储过程基本语法...replace procedure firstPro is begin dbms_output.put_line('Hello World');--打印输出 exception --存储过程异常...--案例六:显式游标 --------1.用游标显示查询所有的结果 CREATE OR REPLACE procedure sys_dictionary_proc AS CURSOR dictionary_emp
这样就导致了脏读,因为更新的数据还没有进行持久化,更新这行数据的业务可能会进行回滚,这样这个数据就是无效的。...在查询数据库后会返回一个ResultSet,它就像是查询结果集的一张数据表。 ResultSet对象维护了一个游标,指向当前的数据行。开始的时候这个游标指向的是第一行。...默认的ResultSet是不能更新的,游标也只能往下移。也就是说你只能从第一行到最后一行遍历一遍。...不过也可以创建可以回滚或者可更新的ResultSet 当生成ResultSet的Statement对象要关闭或者重新执行或是获取下一个ResultSet的时候,ResultSet对象也会自动关闭。...可以通过ResultSet的getter方法,传入列名或者从1开始的序号来获取列数据。
ResultSetHandler { //将结果转换为List List handleResultSets(Statement stmt) throws SQLException; //将结果转换为游标...final ResultSetMetaData metaData = rs.getMetaData(); final int columnCount = metaData.getColumnCount...); } 1处通过ResultSetMetadata获取列的属性 2处获取我们定义的resultMap,如List-2 3处验证resultMap个数,如果小于1则会报错 4处获取resultMap,从List...} } } return foundValues; } List-8中,createAutomaticMappings方法返还sql查询的列属性——从ResultSetWrapper...这样createAutomaticMappings方法执行完成后,就获取了resultSet中的一行数据,且封装到对象中了。
表 1521 基数违例 表 1622 数据异常 表 1723 约束违例 表 1824 无效的游标状态 表 1925 无效的事务状态 表 2026 无效 SQL 语句标识 表 2128 无效权限规范 表...232D 无效事务终止 表 242E 无效连接名称 表 2534 无效的游标名称 表 2636 游标灵敏度异常 表 2738 外部函数异常 表 2839 外部函数调用异常 表 293B SAVEPOINT...类代码 24 无效的游标状态 表 19. 类代码 24:无效的游标状态 SQLSTATE 值 含义24501 标识的游标未打开。24502 在 OPEN 语句中标识的游标已经打开。...24517 外部函数或方法将游标保持为打开。 类代码 25 无效的事务状态 表 20....42893 无法删除、改变或传输该对象或约束,或者无法从对象中撤销权限,因为还有其他对象依赖于该对象。 42894 DEFAULT 值无效。
如果没有流式查询,我们想要从数据库取 100w 条记录而又没有足够的内存时,就不得不分页查询,而分页查询效率取决于表设计,如果设计的不好,就无法执行高效的分页查询。...MyBatis 中使用流式查询避免数据量过大导致 OOM ,但在流式查询的过程当中,数据库连接是保持打开状态的,因此要注意的是: 执行一个流式查询后,数据库访问框架就不负责关闭数据库连接了,需要应用在取完数据后自己关闭...必须先读取(或关闭)结果集中的所有行,然后才能对连接发出任何其他查询,否则将引发异常。...:结果集的游标只能向下滚动 ResultSet.SCROLL_INSENSITIVE:结果集的游标可以上下移动,当数据库变化时,当前结果集不变 ResultSet.SCROLL_SENSITIVE:返回可滚动的结果集...MySQL 是在执行 ResultSet.next() 方法时,会通过数据库连接一条一条的返回。
private static final Logger log = LoggerFactory.getLogger(KerberosAuth.class); // kerberos配置文件,从服务上获取...结果转为sonObject * @param rs ResultSet * @return List * @throws SQLException 异常 */...结果转为list * @param rs ResultSet * @return List * @throws SQLException 异常 */ private...; } } 服务器上测试 认证 kinit -kt /data/tools/bigdata/kerberos/hdfs.keytab hdfs/hadoop01@HADOOP.COM 查看认证状态...hive认证连接 在服务器上测试 hive 使用JDBC 之前 beeline -n hive -u jdbc:hive2://hadoop01:10000/default 注意一定要添加双引号,否则无效
领取专属 10元无门槛券
手把手带您无忧上云