Java数据库操作
一、JDBC
1.JDBC
Java数据库连接,用于Java程序中实现数据库操作功能,java.sql包中提供了执行SQL语句,访问各种数据库的方法,并为各种不同的数据库提供统一的操作接口及类。
2.操作步骤
- 加载JDBC驱动器,将JDBC驱动加载到classpath中。
- 加载JDBC驱动,并将其注册到DriverManager中。一般使用反射机制class.forName(String driverName)
- 建立数据库连接,取得Connection对象。一般通过DriverManager.getConnection(url,username,passwd)方法实现,其中url表示连接数据库的字符串,uaername表示连接数据库的用户名,passwd表示连接数据库的密码。
- 建立Statement对象或PrepareStatement对象。
- 执行SQL语句。
- 访问结构集ResultSet对象。
- 依次访问ResultSet、Statement、PreparedStatement、Connection对象关闭,释放掉所占用的资源。
3.举例举出一个用访问MySQL的例子
二、JDBC处理事务采用的方法
1.事务:用户定义的一个数据库操作序列,这些操作要么全做,要么全部不做,是一个不可分割的工作单元。
2.事务的特性:
- 原子性——由数据库的恢复机制控制
- 隔离性——由数据库的兵法控制机制控制
- 一致性——由原子性、隔离性、持久性一起控制
- 持久性——由数据库恢复机制控制
3.事务的方法
- 事务开始begin trans
- 事务提交 commits,默认自动提交,但可以通过setAutoCommit(false)方法来禁止自动提交
- 事务回滚 rollback
- 事务结束 end trans
4.JDBC有哪些事务的隔离级别?
为了解决与“多个线程请求相同数据”相关的问题,事务之间通常会用锁相互隔离开。
- TEANSACTION_NONE JDB 不支持事务
- TRANSCTION_READ_UNCOMMITTED 未提交读——说明提交前一个事务可以看到另一个事务的变化。这样读“脏”数据、不可重复读和虚度都是允许的
- TRANSCTION_READ_COMMITTED 已提交读——说明读取为题教的数据是不允许的,这个级别仍然允许不可重复读和虚读
- TRANSCTION_READ_COMMITTED 可重读读——说明事务保证能再次读取相同的数据而不会失败,但是虚读仍然会出现。
- TRANSCTION_SERIALIZABLE 可序列化——能防止读“脏”数据、不可重复读、虚读
备注:
- 读“脏”数据:一个事务读到另一个事务尚未提交的数据,则另一个事务更新时,一个事务读取的数据就是“脏”数据。
- 不可重复读:一个事务的操作导致另一事务前后两次读到不同的数据。
- 虚读:一个事务的操作导致另一个事务前后两次查询的结果数据量不同。
三、Class,forName的作用
把类加载到JVM中,它会返回一个与带有给定字符串名的类或接口相关联的Class对象,并且JVM会加载这个类,同时JVM会执行该类的静态代码段
四、Statement、PreparedStatement和CallableStatement的区别
- Statement用来执行不带参数的简单的SQL语句,并返回它锁生成结果的对象,每次执行SQL语句时,数据库都要编译改SQL语句
- PreparedStatement表示预编译的SQL语句的对象,用于执行带参数的预编译SQL语句
- CallableStatement则提供了用来调用数据中存储过程的接口,如果有输出参数要注册,说明是输出参数。
Statement、PreparedStatement虽然能够完成相同的功能,但是PreparedStatement具有以下优点:
- 效率更高。每当执行一个PreparedStatement对象时,由于在缓冲区中可以发现预编译命令,虽然它会再被解析一次,但不会再被编译,是可以重复使用的,从而能够提高系统性能。
- 代码可读性和可维护性好
- 安全性更好,能够预防SQL注入,SQL注入指的是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器,达到执行恶意SQL语句的目的。
五、getString()方法与getObject()方法有什么区别?
JDBC提供了getString()、getInt()和getData()等方法从ResultSet中获取数据,当查询结果集中的数据量较小时,不用考虑性能,但是当查询结果集中的数据量非常大的时候,会抛出异常,通常情况下,使用getObject()方法可以解决这个问题。
getString()或getInt()等方法在调用时,程序会一次性地把数据都放在内存中,然后通过调用ResultSet的next()和getString()等方法来获取数据。当数据大到内存中放不下的时候就会抛出异常。而使用getObject()方法就不会有这种问题,因为数据不会一次性地被读到内存中,每次调用时会直接从数据库中获取数据,因此使用这种方法不会因为数据过而出错。
六、使用JDBC要注意哪些问题?
编程时,一定要保证释放不再使用的连接
七、什么是JDO
Java数据对象是一个用于存取某种数据仓库中的对象的标准化API,它会使开发人员能够间接访问数据库。
八、JDBC与Hibernate有什么区别?
Hibernate是JDBC的封装,采用配准文件的形式将数据库的连接参数写到XML文件中,至于对数据库的访问仍然使用JDBC来完成。
Java数据库操作的更多相关文章
- 复习java数据库操作的总结
以前学习java数据库操作,学得那叫糊里糊涂,各种JDBC常用的类和接口根本是傻傻分不清啥是干嘛的.只是套着用用吧. 不过这次好歹清楚些了,呜呜,学习有阶段性,多次重复才有好效果,多么痛的领悟. 工程 ...
- Java数据库操作(MySQL与SQLserver)
在java编程开发中,数据库的开发是重头戏. MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品: SQL Server是由Microsoft开发 ...
- Java 数据库操作
目录 Java数据库组织架构 下载驱动包 连接数据库 连接数据库的三个步骤 连接数据库的高开销 Statement接口介绍 PreparedStatement类 使用PreparedStatement ...
- Java数据库操作(JDBC)
JDBC Java数据库连接(Java DataBase Connectivity,JDBC)用于在Java程序中实现数据库操作功能,它提供了执行SQL语句.访问各种数据库的方法,并为各种不同的数据库 ...
- Java数据库操作类演示
只在mysql上测试过,不知道算不算好使1. [代码][Java]代码 package org.load.demo; import java.io.IOException;import ja ...
- Java 学习笔记(16)——Java数据库操作
数据库操作是程序设计中十分重要的一个部分,Java内置JDBC来操作数据库 JDBC使用 JDBC--Java Database connecting Java数据库连接:本质上JDBC定义了操作数据 ...
- Java数据库操作学习
JDBC是java和数据库的连接,是一种规范,提供java程序与数据库的连接接口,使用户不用在意具体的数据库.JDBC类型:类型1-JDBC-ODBC桥类型2-本地API驱动类型3-网络协议驱动类型4 ...
- java数据库操作:JDBC的操作
1,JDBC注意操作类及接口: 数据库操作过程: 1)打开数据库服务 2)连接数据库:一般都要输入用户名,密码, 3)操作数据库:创建表:查询表,更新,记录. 4)关闭数据库. 1,DriverMan ...
- Java数据库操作大全
1.提取单条记录 //import java.sql.*; Connection con=null; Statement stmt=null; ResultSet %%6=null; try { Cl ...
随机推荐
- HttpClient(JAVA)使用笔记
HTTPCLIENT 此工具是由apache基金会支持开发的一套 开源 http client 组件, 目前属于 http components的一部分, 官网:http://hc.apache.or ...
- RDIFramework.NET ━ 9.7 操作权限项管理 ━ Web部分
RDIFramework.NET ━ .NET快速信息化系统开发框架 9.7 操作权限项管理 -Web部分 随着经济全球化趋势的发展和企业间竞争的加剧,企业对管理要求不断变化.提高,越来越多的信息都表 ...
- wkwebview a target="_blank" 打不开链接的解决方案
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigatio ...
- 大数阶乘(C/C++)
高精度的运算在Java中是很容易实现的,就像 a + b Problem 一样,因为Java提供了相应的类库和API:但是在 C/C++ 当中就没有那么现成的类和API来让你调用了.本着“自己动手,丰 ...
- WinForm中跨线程操作控件
在WinForm编程时会遇到通过后台线程操作界面的情况,直接在后台线程执行的方法中直接操作控件会报错,这时候就要使用跨线程方式间接操作控件.下面是两种实现方式. 1.采用定义delegate的方式 ...
- nodejs框架express实现登录
目录: 访问视图 Post请求 Post请求 - body(1) Post请求 - body(2) Post登陆1 Post登陆2 页面访问控制1 页面访问控制2 访问视图 前面我们已经添加了视图模板 ...
- Codeforces Round #374 (div.2)遗憾题合集
C.Journey 读错题目了...不是无向图,结果建错图了(喵第4样例是变成无向就会有环的那种图) 并且这题因为要求路径点尽可能多 其实可以规约为限定路径长的拓扑排序,不一定要用最短路做 #prag ...
- MySql_十六进制值
十六进制值 MySQL支持十六进制值.在数字上下文中,十六进制数如同整数(64位精度).在字符串上下文,如同二进制字符串,每对十六进制数字被转换为一个字符: mysql> SELECT x'4D ...
- ArcGIS10.2中文版破解教程
ArcGIS10.2中文版前些时间早就出炉了,下载了但是一直没有安装,听说了ArcGIS10.2云处理能力和影像处理能力都增强了!网上经常遇到一些朋友安装失败的问题,现在特此做一个教程!分享一下安装成 ...
- Displaying Window In Center In Oracle Forms 6i
Center window automatically in Oracle Forms 6i, use the following procedure by passing window name ...