Javaweb学习笔记1(JDBC基本操作)

JDBC

jdbc中文名叫java数据库连接

创建项目

创建项目,引入jar包
我的jdk是1.8的,所以用的比较老的jar包
官网下载
https://downloads.mysql.com/archives/c-j/

导入jar包,并构建好,怎么构建

在这里插入图片描述

在数据库里面建立好一个库,我命名为java,建个表test加点数据进去
在这里插入图片描述

代码实现

分为四个步骤

  • 加载驱动
  • 获得连接
  • 基本操作
  • 释放资源

实现的代码

package com.jdbctest;

import org.junit.Test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;


public class JDBCDemo1 {
    // 使用junit的test来调试
    @Test

    public void demo1() throws Exception{
        // 加载驱动
        Class.forName("com.mysql.jdbc.Driver");

        // 获得连接,把结果放到Connection类型的对象里面,后面的两个参数是数据库的用户名和密码
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/java","root","");
        // 基本操作
            // 获取sql语句的对象
        Statement statement = con.createStatement();
            // 编写sql语句
        String sql = "select * from test";
            // 执行sql语句,把结果放到ResultSet类型的对象里面
        ResultSet res = statement.executeQuery(sql);
            // 遍历结果集,打印出id,username,passwd
        while (res.next()){
            System.out.print(res.getString("id")+' ');
            System.out.print(res.getString("username")+' ');
            System.out.print(res.getString("passwd"));
            System.out.println();
        }
        // 释放资源,依次释放
        res.close();
        statement.close();
        con.close();
    }
}

查询成功!

在这里插入图片描述
在这里插入图片描述

JDBC的API详解

DraverManager

一个驱动管理类
作用:

  • 注册驱动
  • 获得与数据库的连接
注册驱动

registerDriver()
在这里插入图片描述
开发过程中是不用这个来注册的

因为这个方法的参数是一个Driver类,而实例化Draver类的时候就会自动注册了
如果手动在去注册的话就会注册两次了
在这里插入图片描述

平常的开发中,我们通常使用Class.forName("com.mysql.jbdc.Driver");
在这里插入图片描述
这个forName()的作用是:

Class.forName 方法的作用,就是初始化给定的类。而我们给定的 MySQL 的 Driver 类中,它在静态代码块中通过 JDBC 的 DriverManager 注册了一下驱动。

获得与数据库的连接

getConnection(url,user,passwd)
在这里插入图片描述
参数

  • url:一种形式的数据库URL
  • user:数据库用户名
  • password:用户的密码

主要说下这个url:

jdbc:mysql://localhost:3306/java
  • jdbc:连接数据库的协议
  • mysql:jdbc的一个子协议,用于区分数据库
  • localhost:表示mysql数据库服务器的主机地址,如果在本地就是localhost,如果是外网的就填外网的ip
  • 3306:mysql的端口号,可以在配置文件里面修改的
  • java:所连接数据库的名称

如果连接的是本机而且端口号没去改,localhost:3306还可以省略掉

jdbc:mysql:///java

Connection

与数据库的一个连接对象

作用:

  • 创建执行sql语句的对象
  • 管理事务
创建执行sql语句的对象

createStatement()
创建一个对象来将sql语句发送到数据库,返回的Statement类型的对象就可以用来执行sql语句
在这里插入图片描述
除了这个createStatement(),还有两个方法也有类似的作用

  • CallableStatement()
    在这里插入图片描述
  • PreparedStatement()
    !

区别:

  • createStatement():执行sql
  • CallableStatement():执行数据库的存储过程
  • PreparedStatement():执行sql,可以对sql进行预处理防止sql注入

后期主要都是用 PreparedStatement()来创建对象

事务管理

要进行事务管理就要先关闭自动提交
在这里插入图片描述
提交事务的方法:commit()
在这里插入图片描述
回滚事务:rollback
在这里插入图片描述

Statement

主要作用是用来执行sql语句
作用

  • 执行sql语句
  • 执行批处理
执行sql语句
  • execute()
    在这里插入图片描述

  • executeQuery()
    在这里插入图片描述

  • executeUpdate()
    在这里插入图片描述

区别:

  • boolean execute():可以执行查询修改添加删除的sql语句
    返回值:如果第一个结果为ResultSet对象,则返回true ;如果其为更新计数或者不存在任何结果,则返回false抛出
    简单来说就是如果执行查询语句就返回true其他的返回false

  • ResultSet executeQuery()只能用于查询语句,查询到的结果一般是表格状的,会封装到ResultSet里面

  • int executeUpdate():执行修改添加删除语句
    返回值:插入3条记录就返回3,删除5条记录就返回5

常用的是后面两个语句

执行批处理
  • addBatch():添加到批处理
    在这里插入图片描述
  • clearBatch():清空批处理
    在这里插入图片描述
  • executeBatch():把一批sql语句传给mysql执行,返回更新了的计数组成数组
    在这里插入图片描述

Result

select语句执行后得到的结果集(只有select才行)

结果集的遍历
  • next():让指针跳到下一条记录
    在这里插入图片描述
    最开始指针是指向记录外面,执行了next后指针就指向了第一个数据
    指针一直往下跳,只要指针的指向有数据就返回true,当执行了next后没有记录了,就会返回false
    如下图,执行了四次next,第五次next就没有数据了,指针指向了空,返回了false,这样就循环了四次
    在这里插入图片描述
结果集的获取

get数据类型()来获取结果集

  • getInt()
  • getLong()
  • getString()
  • getObject()
    等等

这里的getObject()可以获取任意类型的值

这一类的getXxx()的方法一般都有一个重载的方法,开发中通常使用字段名的getXxx(),用字段名更精准,字段的序号容易改变

  • getXxx(int columnindex):字段的序号
  • getXxx(String columnName):字段名

资源释放

JDBC程序执行结束后,将与数据库进行交互的对象释放掉,通常是

  • Resultset
  • Statement
  • Connection

这几个对象中尤其是Connection对象是非常稀有的。数据库的连接是有限制的,如果一次性有太多的连接,那么就不能再建立连接了,所以这个对象一定要做到尽量晚创建,尽早释放掉。

  • 要把资源释放写入到finally的代码块里面(finally表示一定会被执行的代码块)
    在这里插入图片描述
  • 资源释放的规范操作
//在开头先声明一下变量
 public void demo() {
        Connection conn = null;
        Statement stmt = null;
。
。
。
finally {
	// 释放result
    if (res != null) {
        try {
            res.close();
        } catch (SQLException sqlEx) { // ignore }
		// 手动设空,让java回收机制更快的回收掉,提高效率	
        rs = null;
    }
	// 释放statement
    if (stmt != null) {
        try {
            stmt.close();
        } catch (SQLException sqlEx) { // ignore }
        stmt = null;
    }
	// 释放connection
	if (con != null) {
	        try {
	            con.close();
	        } catch (SQLException sqlEx) { // ignore }
	        con = null;
	    }
    
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

huamanggg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值