JDBC中的几个常见问题

2023-11-02

1、JDBC中的Statement和PreparedStatement、CallableStatement的区别?
  • PreparedStatement是预编译SQL语句,效率高于Statement
  • PreparedStatement支持?占位符操作,相对于Statement更加灵活。
  • PreparedStatement可以防止SQL注入,安全性高于Statement.
  • CallableStatement适用于执行存储过程。
2、JDBC中大数据量分页的解决方法?

答:最好的方法是利用sql语句进行分页,这样每次查询的结果集中只包含某页的数据内容。

  • Mysql语法

    SELECT * 
    FROM 表名
    LIMIT [START],length;
    
  • Oracle语法
    currentPage:当前页码数
    lineSize:每页显示的条数

    SELECT * FROM(
    		SELECT 列名,列名,ROWNUM rn
            FROM 表名
    		WHERE ROWNUM <= (currentPage * lineSize)) tmp  
    WHERE tmp.rn >(currentPage - 1) * lineSize
    
3、事务
  1. 事务是作为单个逻辑工作单元执行的一些列操作。

  2. 一个逻辑工作单元必须有四个属性,称为原子性、一致性、隔离性、持久性。只有这样才能称为一个事务。

    • 原子性:不可分割的最小操作单位,要么同时成功,要么同时失败。
    • 持久性:当事务提交或者回滚后,数据库会持久化的保存数据
    • 隔离性:多个事务之间,相互独立。
    • 一致性:数据操作前后数据总量不变。
  3. 事务的隔离级别

    ​ 多个事务之间是隔离的,相互独立的。但是如果多个事务之间操作同一批数据,则会引发一些问题,设置不同的隔离级别就可以解决这些问题(脏读、不可重复读、幻读)。

    • 脏读:一个事物读取到另一个未提交的事务
    • 不可重复读:在同一事务中,多次读取同一数据返回的结果有所不同,读到了之前的数据后又读到了其他事务已经提交的更新的数据。
    • 幻读(虚读):一个事务操作(DML)数据表中所有的记录,另一个事务添加了一条数据,则第一个事务查询不到自己的修改。

    数据库定义了四个隔离级别 :

    • Serializable:串行化

      ​ 可避免脏读、不可重复读、幻读,不会产生任何问题。

    • Repeatable read :可重复读【Mysql默认】

      ​ 可避免脏读、不可重复读,产生幻读

    • Read committed :读已提交【Oracle默认】

      ​ 可避免脏读,产生不可重复读、幻读

    • Read uncommitted:读未提交

      ​ 级别最低、什么都避免不了

    分别对应Connection类中的四个常量:

    • TRANSACTION_SERIALIZABLE
    • TRANSACTION_REPEATABLE_READ
    • TRANSACTION_READ_COMMITTED
    • TRANSACTION_READ_UNCOMMITTED
  4. Connection类中提供了四个事务处理方法:

    • setAutoCommit(Boolean autoCommit):设置是否自动提交事务,默认为自动提交,即为true,通过设置false进行手动提交。

    • commit():提交事务

    • rollback():回滚事务

    • savepoint():保存点

      ​ 注意:savepoint不会结束当前事务,普通提交和回滚都会结束当前事物的。

4、execute、executeQuery、executeUpdate的区别是什么?
  • Statement中的execute(String query)方法用来执行任意的Sql查询的,如果查询结果是ResultSet,这个方法就返回true。如果不是ResultSet,比如insert或者update查询,它就会返回false。我们可以通过他的getResultSet方法来获取ResultSet,或者通过getUpdateCount()方法来获取更新的记录条数。
  • Statement中的executeQuery(String query)接口用来执行select查询,并且返回ResultSet。即使查询不到记录返回的ResultSet结果也不会为null。我们通常使用executeQuery来执行查询语句,这样的化如果传进来的是insert或者update语句的话,他会抛出错误信息"executeQuery method can not be used for update"的java.util.SQLException。
  • Statement中的executeUpdate(String query)方法来执行insert或者update/delete(DML)语句,或者什么也不返回DDL语句。返回值是int类型,如果是DML语句的话,返回影响的条数,如果是DDL语句就返回0.
  • 只有当你不确定是什么语句的时候才使用execute()方法,否则应该使用executeQuery()或者executeUpdate()方法。
5、JDBC中的DriverManager是用来做什么的?
  • JDBC中的DriverManager是一个工厂类,我们通过它创建数据库的连接
  • 当JDBC中的Driver类被加载进来的时候,它会自己注册到DriverManager类里面
  • 然后我们会把数据库配置信息传承DriverManager.getConnection((String url, String user, String password)方法,DriverManager会使用注册到它里面的驱动来获取数据库的连接,并返回给调用程序
6、JDBC中的ResultSet是什么?
  • 在查询数据库后就会返回一个ResultSet,它就像查询结果集的一张数据表。
  • ResultSet对象维护了一个游标,指向当前数据行。开始的时候这个游标指向的是第一行。如果调用了ResultSet的next()方法游标会下移一行,如果没有更多的数据了,next()方法返回false。
  • 默认的ResultSet是不能更新的,游标也只能往下移。也就是说你只能从第一行到最后一行遍历一遍。不过也可以创建可以回滚或者可更新的ResultSet
  • 当生成ResultSet的Statement对象要关闭或者重新执行或是获取下一个ResultSet的时候,ResultSet对象也会自动关闭。
  • 可以通过ResultSet的getter方法,传入列名或者从1开始的序号来获取列数据
7、JDBC的DataSource是什么,有什么好处?

DataSource即数据源,他是定义在java.sql中的一个接口,跟DriverManager相比,它的功能要更强大。我们可以用它来创建数据库的连接,当然驱动的实现类会实际的完成这项工作。除了能创建连接外,他还提供给了如下的特征:

  • 缓存PreparedStatement以便更快的执行
  • 可以设置连接超时时间
  • 提供记录日志功能
  • ResultSet大小的最大阈值设置
  • 通过JNDI的支持,可以为Servlet容器提供连接池的功能。
8、常见的JDBC异常有哪些?
  • java.sql.SQLException --> 这是JDBC常用的基类
  • java.sql.BatchUpdateException --> 当批处理操作执行失败的时候可能会抛出这个异常。这取决于具体的JDBC驱动的实现,它也可能直接抛出基类异常java.sql.SQLException。
  • java.sql.SQLWarning --> SQL操作出现的警告信息。
  • java.sql.DataTruncation --> 字段值由于某些非正常的原因被截断了(不是因为超过对应字段类型的长度限制)。
9、SQLWarning是什么?在程序中如何获取?

SQLWarning是SQLException的子类,通过Connection、Statement、ResultSet的getWarnings()方法都可以获取到它。SQLWarning不会中断查询语句的执行,只是用来提示用户存在相关的警告信息。

10、java.util.Date和java.sql.Date有什么区别?

java.util.Date包含日期和时间,而java.sql.Date只包含日期信息,而没有具体的时间信息。如果想把时间信息存入到数据库里,可以考虑使用Timestamp或者DateTime字段。

11、抛出java.sql.SQLException: No suitable driver found该怎么办?

如果你的SQL URL 格式不正确的话,就会抛出这样的异常,不管使用DriverManager还是JNDI数据源来创建连接都有可能抛出这种异常。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JDBC中的几个常见问题 的相关文章

  • 如何在 phpmyadmin 中创建 MySQL 触发器

    我想在 MySQL 中创建一个触发器 我运行以下命令 mysql gt delimiter mysql gt CREATE TRIGGER before insert money BEFORE INSERT ON money gt FOR
  • 使用 Spark DataFrame 获取组后所有组的 TopN

    我有一个 Spark SQL DataFrame user1 item1 rating1 user1 item2 rating2 user1 item3 rating3 user2 item1 rating4 如何按用户分组然后返回TopN
  • PDO SQLSRV 和 PDO MySQL 在获取 int 或 float 时返回字符串

    当您获取时 PDO MS SQL Server 和 PDO MySQL 都会返回一个字符串数组 即使列的 SQL 类型本应是数字类型 例如 int 或 float 我设法解决了这个问题 但我想了解为什么它们一开始就这样设计 是不是因为PDO
  • 查询中列的顺序重要吗?

    当从 MySQL 表中选择列时 与表中的顺序相比 选择列的顺序是否会影响性能 不考虑可能覆盖列的索引 例如 您有一个包含行 uid name bday 的表 并且有以下查询 SELECT uid name bday FROM table M
  • MYSQL - 查找最近的前一天

    我可以以某种方式 不使用 PHP 找到一周中最近的前一天日期吗 Like 最近的上一个星期二的日期是哪一天 CURDATE INTERVAL WEEKDAY CURDATE wday IF WEEKDAY CURDATE gt wday 0
  • 根据表sql中的行替换字符串中的字符

    我需要用一些映射的字符替换字符串中的字符列表 我有一个表 dbo CharacterMappings 有 2 列 CharacterToFilter 和 ReplacementCharacter 假设这个表中有3条记录 Filter Rep
  • 如何在 Laravel 查询中使用多个 OR,AND 条件

    我需要 Laravel 查询帮助 我的自定义查询 返回正确结果 Select FROM events WHERE status 0 AND type public or type private 如何写这个查询Laravel Event w
  • 如何在 SQL Server 中使用 nvarchar 变量为 unicode 用户添加前缀“N”?

    如何在 SQL Server 中使用 nvarchar 变量为 unicode 用户添加前缀 N 例如 给定这个变量 declare Query1 nvarchar max 我可以这样分配它 set Query1 N 但是如果我想使用怎么办
  • 为什么这会返回资源 id #2? [复制]

    这个问题在这里已经有答案了 可能的重复 我如何从 PHP 中的 MySql 响应中 回显 资源 id 6 https stackoverflow com questions 4290108 how do i echo a resource
  • 阻止注销页面后的后退按钮

    我有 php 注销页面 当用户单击注销链接时 请参阅此页面并重定向到索引页面 但是当单击后退按钮时 我会看到带有用户数据的上一页 当然 当我刷新页面时 我看不到以前的页面和数据 我在单击注销并单击后退按钮后检查了其他代码 drupal 但我
  • 更改迁移中的自动​​增量值(PostgreSQL 和 SQLite3)

    我有一个托管在 Heroku 上的项目 想要更改表的自动增量起始值 我在本地使用 SQLite3 Heroku 使用 PostgreSQL 这是我在迁移中所拥有的 class CreateMytable lt ActiveRecord Mi
  • 如何在使用连接池时强制 SqlConnection 物理关闭?

    我明白 如果我实例化一个 SqlConnection 对象 我实际上是从连接池中获取一个连接 当我调用 Open 时 它将打开连接 如果我对该 SqlConnection 对象调用 Close 或 Dispose 方法 它将返回到连接池 但
  • 分层查询

    我希望我能够解释困扰我的问题 我有以下分层数据集 这只是 34K 记录的子集 PARENT ID CHILD ID EXAM TUDA12802 TUDA12982 N TUDA12982 TUDA12984 J TUDA12984 TUD
  • 如何在Sequelize中设置查询超时?

    我想看看如何在 Sequelize 中设置查询的超时时间 我查看了 Sequelize 文档以获取一些信息 但我找不到我要找的东西 我发现的最接近的是 pools acquire 选项 但我不想设置传入连接的超时 而是设置正在进行的查询的超
  • 插入触发器最终在分区表中插入重复行

    我有一个分区表 我认为 适当的INSERT触发器和一些限制 不知何故 INSERT语句为每个语句插入 2 行INSERT 一个用于父分区 一个用于相应的分区 设置简要如下 CREATE TABLE foo id SERIAL NOT NUL
  • MySQL PHP邮政编码比较具体距离

    我试图找出比较一个邮政编码 用户提供的 和一大堆其他邮政编码 现在大约有 200 个邮政编码 之间的距离的最有效方法 相对于加载时间 但它会随着时间的推移而增加 我不需要任何精确的东西 只是在球场上 我下载了整个美国的邮政编码 csv 文件
  • Mysql 中 UNION 子句的替代方案

    我有两张桌子 表 a 表 b table a ID 1 2 3 4 5 7 table b ID 2 3 4 5 6 我必须得到这样的输出而无需UNION命令 ID 1 2 3 4 5 6 7 注意 我有一个联合解决方案 select fr
  • 将古吉拉特语文本插入 MySQL 表会产生垃圾字符和不可读的文本

    我有三个 MySQL 表 我正在向其中插入古吉拉特语内容 当我插入两个表时 它们插入得很好并且可读 但在一个表中 它显示垃圾字符 不可读的文本 我怎样才能解决这个问题 MySQL 有每个表的字符集设置 http dev mysql com
  • 使用 where 进行 select 语句时,HSQLDB 用户缺乏权限或未找到对象错误

    我的数据库使用 SQuirrel SQL 客户端版本 3 5 3 和 HSQLDB 我已经能够为其指定相应的驱动程序 内存中 并创建一个别名 我创建了一个表 CREATE TABLE ENTRY NAME VARCHAR 100 NOT N
  • Mysql 创建定义器

    我创建了一个在 CentOS Web 服务器上运行的 Intranet Web 应用程序 该应用程序使用另一个本地服务器 始终是 CentOS 作为 MySQL 数据库 在数据库内部我创建了例程 这些例程总是这样开始 CREATE DEFI

随机推荐

  • python 数据分析与挖局书籍

    之前一直有朋友叫我列一个数据科学的书单 说实话这件事情我是犹豫了很久的 有两个原因 其一是因为自己读书太少才疏学浅 其二我觉得基于我个人观点认为 好 的书其实可能对于很多人是不一定合适的 不过 明天正好是世界读书日 所以这里从一个 在读的统
  • 【LeetCode算法系列题解】第51~55题

    CONTENTS LeetCode 51 N 皇后 困难 LeetCode 52 N 皇后 II 困难 LeetCode 53 最大子序和 中等 LeetCode 54 螺旋矩阵 中等 LeetCode 55 跳跃游戏 中等 LeetCod
  • vue不同组件中监听Localstorage变化并实时更新---ing

    vue 不同组件中监听Localstorage变化并实时更新 一 解决问题 二 实现实例 1 控制组件 触发后向浏览器保存数据 2 main js全局引入 3 在所需要监听localstorage值的组件中写入监听事件 三 参考 一 解决问
  • SRGAN 图像超分辨率重建(Keras)

    文章目录 前言 一 SRGAN 1 训练步骤 2 生成器 3 判别器 二 其他准备 1 数据读取 2 VGG19提取特征 4 训练过程代码 5 预测过程 参考链接 前言 SRGAN 网络是用GAN网络来实现图像超分辨率重建的网络 训练完网络
  • python统计表中单词及其出现的次数 字典形式输出_python 实现查找某个字符在字符串中出现次数,并以字典形式输出...

    把字符串 aenabsascd 中的字符出现的次数统计出来 并以字典形式输出 方法一 1 defcount str str 2 dic 3 for i instr 4 dic i str count i 0 5 returndic6 7 p
  • 8个流行的Python可视化工具包。

    喜欢用 Python 做项目的小伙伴不免会遇到这种情况 做图表时 用哪种好看又实用的可视化工具包呢 之前文章里出现过漂亮的图表时 也总有读者在后台留言问该图表时用什么工具做的 下面 作者介绍了八种在 Python 中实现的可视化工具包 其中
  • 字符串搜索dfs题79_208_212

    79 Word Search 给一个二维字符数组和一个字符串 判断是否存在一条路径使得路径字符等于所给字符串 board A B C E S F C S A D E E Given word ABCCED return true Given
  • 【未解决】获取注解上的注解的值

    网上没找到相关资料 自己尝试做了下 注解1 Target ElementType METHOD ElementType ANNOTATION TYPE Retention RetentionPolicy RUNTIME public int
  • html弹跳qq群号代码,抖音上QQ群霸屏消息代码分享_抖音上QQ群霸屏消息代码大全-街机中国...

    今天抖音上很多人拍摄在QQ中发送代码 可以让表情霸屏的视频 小编的QQ群也收到了很多霸屏贴表情消息 首先 复制代码 sticker start tag for text originMsgType 0 x 0 070370368659496
  • 传统网络配置命令与ip高级路由命令学习示例(转)

    传统网络配置命令与ip高级路由命令学习示例 转 more 传统网络配置命令与ip高级路由命令学习示例 by KindGeorge 2005 5 9 懂得网络配置命令是一般技术人员必备的技术 经过一段时间的研究和学习 总结了一些常用的命令和示
  • MapReduce之KNN算法

    MapReduce之KNN算法 什么是 K K K 邻近算法 KNN KNN分类问题是找出一个数据集中与一个给定查询数据点最近的 k k k个数据点 这个操作也称KNN连接 定义为 给定两个数据集
  • svn清除不成功的解决办法(cleanup失败)

    使用工具 sqlite3 exe 32位下载地址 https download csdn net download songxinfeng1989 10500196 64位下载地址 https download csdn net downl
  • FreeRTOS软件定时器创建、复位、开始和停止(备忘)

    目录 一 简介 1 1 开发环境 1 2 摘要 二 STM32CubeIDE配置 三 创建定时器 3 1 头文件声明 3 2 工程文件定义 3 3 创建定时器 3 4 开启 复位 和关闭定时器 四 定时器回调函数 一 简介 1 1 开发环境
  • js调用摄像头拍照并兼容ie浏览器

    不会吧不会吧 现在都2023年了竟然还有人在用ie浏览器 文章内容有点长 耐心看完 基本上能遇到的问题 都记录在这里了 问题1 调用摄像头并兼容ie浏览器 用户调用摄像头一般使用navigator mediaDevices 在ie浏览器这个
  • Netty客户端断线重连实现及问题思考

    前言 在实现TCP长连接功能中 客户端断线重连是一个很常见的问题 当我们使用netty实现断线重连时 是否考虑过如下几个问题 如何监听到客户端和服务端连接断开 如何实现断线后重新连接 netty客户端线程给多大比较合理 其实上面都是笔者在做
  • ::和.的区别

    作用域运算符 和 成员运算符 的区别 这是在看 运算符的作用时产生的疑问 有三个作用 1 全局作用 2 类作用 3 名称空间 1和3不多说 在2中 其说明是 作用域符号 的前面一般是类名称 后面一般是该类的成员名称 C 为了避免不同的类有名
  • Keil-MDK解决“Error: Encountered an improper argument”问题

    Keil MDK解决 Error Encountered an improper argument 问题 ARM官方问题描述及解决办法 https developer arm com documentation ka004382 lates
  • android环境配置

    JDK配置 JRE问题 Windows 打开PowerShell 进入JDK目录 执行 bin jlink exe module path jmods add modules java desktop output jre 环境变量 系统环
  • [STM32F10x] 利用定时器测量脉冲宽度

    硬件 STM32F103C8T6 平台 ARM MDk V5 11 前面一篇文章讲过如何利用定时器测量信号的频率 见 STM32F10x 利用定时器测量频率 使用的是定时器的捕获 比较单元 Capture compare 它也可以测量输入信
  • JDBC中的几个常见问题

    JDBC中的几个常见问题 1 JDBC中的Statement和PreparedStatement CallableStatement的区别 2 JDBC中大数据量分页的解决方法 3 事务 4 execute executeQuery exe