Java基础知识(Java数据库操作)

news/2024/5/19 0:21:14 标签: 数据库, mysql, java, jdbc

java_0">java数据库操作

11.1 如何通过JDBC访问数据库

通过JDBC访问数据库一般有如下几个步骤:
1.加载JDBC数据库驱动器,将数据库的JDBC驱动加载到classpath中,一般将JDBC驱动复制在web-inf.lib下。
2.加载JDBC驱动,并将其注册到DriverManager中。一般使用反射class.forName(String driveName)
3.建立数据库连接,取得Connection对象,通过DriverManager.getConnection(url,username,password)实现,url为连接数据库的字符串,username为数据库的用户名,password为数据库密码。
4.建立Statement对象或PreparedStatement对象
5.执行SQL语句
6.访问结果集ResultSet对象
7.一次将Result、Statement、PreparedStatement、Connection对象关闭,释放所占用资源。
在这里插入图片描述

11.2 JDBC处理事务采用什么方法

一个事务是由一条或多条对数据库操作的SQL语句所组成的一个不可分割的工作单元,只有当事务中的所有操作都正常执行完后,整个事务才会被提交到数据库
在JDBC中通过commit方法或rollback方法结束事务的操作。commit是对事务的提交,rollback是完成对事务的回滚。一般是将事务进行自动调用commit方法,否则调用rollback方法。
JDBC有哪些事务隔离级别:
1.transaction_nonejdb,不支持事务
2.transaction_read_uncommitted,未提交读,在提交前一个事务可以看到另一个事务的变化。允许读脏数据、不可重复读、虚读。
3.transaction_read_committed,已提交读。读取未提交的数据是是不允许的。
4.trainsaction_repeatable_read,可重复读。事务保证再次读取相同的数据。
5.trainsaction_serializable,可序列化,防止读脏数据,不可重复读和虚读。
读脏数据:一个事务读取了另一个事务未提交的数据。
不可重复读:一个事务的操作导致另一个事务前后两次读取到不同的数据。
虚读:一个事务的操作导致另一个事务前后两次查询的结果数据量不同。

11.3 Class.forName的作用

将类加载到JVM中,会返回一个与带有给定字符串名的类或接口相关的Class对象,并且JVM会加载该类,JVM执行该类的静态代码块。
JDBC要求Driver类在使用前必须向DriverManager注册,因此当执行Class.foName(“com.mysql,jdbc.Driver”)时,JVM会加载名字为“com.mysql.jdbc.Driver”对应的Driver类。com.mysql.jdbc.Driver类如下:
在这里插入图片描述

11.4 Statement、PreparedStatement、CallableStatement的区别

1.Statement用于执行不带参数的简单SQL语句,返回所生成结果的对象,每次执行SQL语句时,数据库都要编译该SQL语句。
在这里插入图片描述
2.PreparedStatement表示预编译的SQL语句对象,用于执行带参数的预编译SQL语句。
PreparedStatement比Statement好的点:

  • 效率高:使用PreparedStatement对象执行SQL命令时,命令会被数据库进行编译解析,并放到命令缓存区。
  • 代码可读性和可维护性更好
  • 安全性更好:可防止SQL语句注入攻击。SQL注入是通过把SQL命令插入到web标单递交或输入域名或页面请求的查询字符串,达到欺骗服务器,执行恶意SQL命令的目的。

3.CallableStatement提供用来调用数据库存储过程的接口,如果有输出参数要注册,说明是输出参数。

11.5 getString方法和getObject方法的区别

getString或getInt方法在调用时,程序会一次性将数据都放在内存中,然后通过调用ResultSet的next和getString方法获得数据。当数据量达到内存放不下时抛出异常。getObject方法不会出现这种问题,数据不会一次性被读到内存中,每次调用时会直接从数据库中去获取数据。

11.6 使用JDBC时需要注意的问题

使用JDBC时,需要建立与数据库的连接,才能完成对数据库的访问,由于与数据库的连接是非常重要的资源。JDBC连接池提供JDBC连接定义和数目有限的连接,如果连接数量不够,需要长时间等待。不正常关闭JDBC连接会导致等待回收无效的JDBC连接。正常关闭和释放JDBC连接,JDBC资源才能被快速重用。
在使用JDBC时,createStatement和PrepareStatement最好放在循环外面,在使用Statement后,需要及时关闭。在执行一次executeQuery等之后,如果不需要使用ResultSet数据,就将Statement关闭。在每次执行conn.createStatement都是在数据库中打开一个cursor(游标),如果将方法调用放在循环内,则不停地打开cursor。

11.7 什么是JDO

java数据对象,用来存取某种数据仓库中的对象标准化API,能够间接访问数据库

11.8 JDBC与Hibernate的区别

Hibernate是JDBC的封装,使用配置文件将数据库的连接参数写到XML文件中,对数据库的访问还是JDBC完成。
在这里插入图片描述


http://www.niftyadmin.cn/n/1865545.html

相关文章

Java Web(Servlet和JSP)

1. Servlet与JSP 1.1 页面请求工作流程 基本页面访问请求的处理流程 1.用户通过浏览器输入连接地址请求所需的资源 2.浏览器接收用户的请求,将请求组成指定的格式发送到服务器端,客户端与服务器端之间通过HTTP完成具体的交互。请求的数据流中主要包含…

Java Web(J2EE 与EJB)

2. J2EE与EJB 2.1 什么是J2EE 是java平台企业版简称,用来开发与部署企业级应用的架构,提供一种统一的、开放标准的多层平台,主要由构件、服务和通信组成。 构件包含客户端构件和服务器构件,客户端构件主要包含两类Applets和Appl…

数据结构与算法(链表)

1. 链表 1.1 如何实现单链表的增删操作 链表是一个基本的数据结构,存储特点是:可以用任意一个存储单元存储单链表中的数据元素(可以不连续)。单链表中的一个存储单元包括存储的数据元素和指向直接后继的索引。这两个总和成为一个…

数据结构与算法(栈与队列)

2. 栈与队列 2.1 栈与队列的区别 栈和队列都是重要的线性数据结构,在一个特定范围内存储单元中存储的数据。与线性表相比,插入和删除受到更多的约束和限定,是限定性的线性表结构。栈是先进后出,队列是先进先出。 有时在数据结构…

数据结构与算法(导论)

数据结构导论 数据结构基本概念 数据是信息的载体,是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。数据是计算机程序加工的原料。数据元素是数据的基本单位,通常作为一个整体进行考虑和处理。一个数据元素可…

牛客网剑指offer习题(二叉树中和为某一值的路径复杂链表的复制)

1、输入一颗二叉树的根节点和一个整数,按字典序打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。 分析: 需要输出一个二叉树中结点值的和为输入整数的所有路径,每个路径…

牛客网剑指Offer(二叉搜索树与双向链表)

输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。 分析: 对二叉搜索树进行中序遍历,递归操作。 /** public class TreeNode {int val 0;TreeNode left nul…

牛客网剑指Offer(字符串的排列数组中次数超过一半的元素)

输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 分析: 首先从字符串的第一个元素开始遍历,对第i个元素,将除过该元素后的子字符串中的元…