zoukankan      html  css  js  c++  java
  • Java数据库操作

    一、JDBC

    1.JDBC

               Java数据库连接,用于Java程序中实现数据库操作功能,java.sql包中提供了执行SQL语句,访问各种数据库的方法,并为各种不同的数据库提供统一的操作接口及类。

    2.操作步骤

    1. 加载JDBC驱动器,将JDBC驱动加载到classpath中。
    2. 加载JDBC驱动,并将其注册到DriverManager中。一般使用反射机制class.forName(String driverName)
    3. 建立数据库连接,取得Connection对象。一般通过DriverManager.getConnection(url,username,passwd)方法实现,其中url表示连接数据库的字符串,uaername表示连接数据库的用户名,passwd表示连接数据库的密码。
    4. 建立Statement对象或PrepareStatement对象。
    5. 执行SQL语句。
    6. 访问结构集ResultSet对象。
    7. 依次访问ResultSet、Statement、PreparedStatement、Connection对象关闭,释放掉所占用的资源。

    3.举例举出一个用访问MySQL的例子

    二、JDBC处理事务采用的方法

    1.事务:用户定义的一个数据库操作序列,这些操作要么全做,要么全部不做,是一个不可分割的工作单元。

    2.事务的特性:

    • 原子性——由数据库的恢复机制控制
    • 隔离性——由数据库的兵法控制机制控制
    • 一致性——由原子性、隔离性、持久性一起控制
    • 持久性——由数据库恢复机制控制

    3.事务的方法

    • 事务开始begin trans
    • 事务提交 commits,默认自动提交,但可以通过setAutoCommit(false)方法来禁止自动提交
    • 事务回滚 rollback
    • 事务结束 end trans

    4.JDBC有哪些事务的隔离级别?

                为了解决与“多个线程请求相同数据”相关的问题,事务之间通常会用锁相互隔离开。

    1. TEANSACTION_NONE JDB  不支持事务
    2. TRANSCTION_READ_UNCOMMITTED 未提交读——说明提交前一个事务可以看到另一个事务的变化。这样读“脏”数据、不可重复读和虚度都是允许的
    3. TRANSCTION_READ_COMMITTED 已提交读——说明读取为题教的数据是不允许的,这个级别仍然允许不可重复读和虚读
    4. TRANSCTION_READ_COMMITTED 可重读读——说明事务保证能再次读取相同的数据而不会失败,但是虚读仍然会出现
    5. 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来完成。

  • 相关阅读:
    https协议介绍
    最详尽的fidder抓取https请求
    最详尽的datagrip使用
    datagrip安装与破解
    二叉树
    使用nexus搭建maven私库
    markdown利器-小书匠
    java开发-flyway
    .NetCore 入门
    .Net Core 实体生成器
  • 原文地址:https://www.cnblogs.com/xiaoxiaohui2015/p/5814624.html
Copyright © 2011-2022 走看看