JDBC简介

JDBC介绍

根据Oracle的声明,JDBC是一个注册了商标的术语,而并非Java Database Connectivity的首字母缩写,而是对ODBC(微软开创的标准数据库API)的致敬——《Java核心技术 卷Ⅱ》

JDBC和ODBC的核心思想:根据API编写的程序都可以与驱动管理器进行通信,而驱动管理器则通过驱动程序与实际的数据库进行通信。

JDBC的典型用法

JDBC
三层应用模型将可视化再业务逻辑与原始数据中分离出来,这样我们可以在不同的客户端来访问相同的数据,运用相同的业务逻辑。

JDBC配置

1.驱动包

下载方法:

  • 最直接的下载方法:MySQL官网
  • maven项目中可以加入各个版本的依赖:MVN库

2.注册驱动器类

运行需要连接数据库的程序时,必须要在程序中注册驱动器。一般有以下几种方式。

  1. 最常用的方式

    Class.forName("com.mysql.jdbc.Driver");
    

    这行代码代表的意思是告诉JVM加载MySQL的Driver类,在JDBC规范中要求在加载前要向DriverManager注册,我们不难发现com.mysql.jdbc.Driver类中在静态代码块中注册过。

    static {
            try {
                DriverManager.registerDriver(new Driver());
            } catch (SQLException var1) {
                throw new RuntimeException("Can't register driver!");
            }
        }
    

    因此再平常的使用中只需要告诉Java虚拟机该找到驱动类并加载即可,不需要自己注册。

  2. 在程序中也可以向System添加属性:

    System.setProperty("jdbc.driver","com.mysql.jdbc.Driver");
    
  3. 当我们需要在命令行中启动程序,而程序中没有注册驱动类的代码时,我们可以这么做

    java -Djdbc.drivers=com.mysql.jdbc.Driver ProgrameName
    

3.连接到数据库

连接数据库时,必不可少的需要告诉DriverManager去连接,所以当我们调用DriverManager的静态方法

Connection getConnection(String url, String user, String password) 
	throws SQLException

我们提供三个参数:

  1. url,其中包括主机名端口号数据库名称。例如链接MySQL的URL就是:jdbc:mysql://DBhostname:3306/database 其中DBhostname为主机名,一般我们写IP;3306为MySQL的默认端口;database指的就是MySQL中创建的数据库名称。
  2. user指的是用于登陆数据库的用户名,如果没有设置就什么都不填。
  3. password,顾名思义就是用于登陆数据库的密码,没有也可以什么都不写。

在配置过程中可以直接写入接口中,好点的方法是把这三个参数设置为不变的常量,即用final static修饰词,当我们需要修改时方便修改。
在项目中更好的方式可以我们需要的属性放到xxx.properties资源文件中,用法就是首先new出java.util.Properties,再调用load(InputStream inStream),将打开的properties文件流传入。最后想拿什么属性调用getProperty()即可,当然如果需要设置参数时调用setProperty(String key, String value)传入键-值对。

JDBC操作

1.API

当我们连接到数据库时首先要拿到可以执行语句的载体Statement:Statement sta = conn.createStatement();
但有更好的是准备语句PrepareStatement psta = conn.prepareStatement()减少对数据库连接资源的占用。

  1. 查询
    查询数据库时可以调用statement.executeQuery() ,也可以调用execute不过二者的区别是前者当第一个结果是对象就返回结果集,当第一个结果是更新数就返回更新了多少行,后者返回boolean值只反应有没有结果。
    结果集ResultSet每一次next()就是一行结果,没有数据时就返回false。值得注意的是结果集中是从1开始计数。如果想拿到具体的值可以调用getString(),getDouble,getInt(),getBlob()等分别拿到相应的值。
  2. 更新
    更新,删除,增加数据更喜欢用statement.executeUpdate() 因为它返回的是int值表示多少行数据发生了变化,如果变化行数很大就调用statement.executeLargeUpdate()

2.元数据

JDBC可以拿到三类元数据:数据库,结果集和预备语句参数。

  1. 数据库的元数据直接从实例化的Connection对象中调用getMetaData()拿到DatabaseMetaData对象 DatabaseMetaData dbMetaData = conn.getMetaData(); 可以拿到数据库的相关参数包括数据能打开的最多Statement数目及其包含的SQL语句字符长度。
  2. 结果集的元数据需要从结果集对象ResultSet中拿到 ResultSetMetaData rsMetaData = rs.getMetaData(); 其中包含了大量的执行SQL语句后的结果信息,可以拿到列名,列内容。
  3. 预备语句元数据自然想到的就从预备语句对象中取 ResultSetMetaData sta = statement.getMetaData();

3.事物

这里的事物与数据库中的事物概念相同,都是把一个或多个SQL语句作为一个事物,在一组语句执行成功时commit,而当一个事物中有一个语句失败就rollback。

默认情况下,数据库处于自动提交模式,每执行一个SQL就被提交到数据库。一旦提交给数据库就无法回滚,所以在处理事物时,我们需要关闭这个功能:connection.setAutoCommit(false)
执行了一条或多条语句时再调用connection.commit()提交。回滚调用connection.rollback()

当我们需要批量处理数据库时,例如批量的插入,更新或删除数据,表或数据库。创建Statement对象后调用addBatch()方法将我们想要的语句放入完成后,最后提交executeBatch()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值