学习java—第三十八天学习笔记

113 阅读5分钟

2019.8.23 NIIT第三十八天

/今天讲JDBC了!/

数据库驱动

中间件--把连接数据库的操作整合,方便程序员连接数据库

java连接数据库原理

java中,数据库驱动都被打成jar包,我们只需要导入jar包就可以连接数据库

JDBC

java database connection java与数据库的连接

  1. 准备数据
  2. 新建java项目
  3. 导入数据库驱动jar包
  4. 建立连接
  5. 测试数据
create database mydb;
#使用数据库
use mydb;
###创建分类表
create table category(
  cid int PRIMARY KEY AUTO_INCREMENT  ,
  cname varchar(100)
);
#初始化数据
insert into category (cname) values('家电');
insert into category (cname) values('服饰');
insert into category (cname) values('化妆品');

连接数据库的4个参数 IP地址,端口号,用户名,密码

//url的格式: // jdb使用jdbc驱动(除了jdbc驱动,还有odbc驱动(微软提供,基本不太用)) //mysql指的是使用的数据库 // localhost机器ip地址,可以localhost 192.168.2.115 // 3306为数据库的端口号,如果是3306,也可以省略 // mydb是指数据库名!不是连接名

String url="jdbc:mysql://localhost:3306/mydb";

package com.igeek1;

import org.junit.jupiter.api.Test;

import java.sql.*;

public class TestMySqlConn {
    @Test
    public void m1() throws ClassNotFoundException, SQLException {
        //  连接步骤
        //1、加载驱动,通过反射创建驱动对象
        Class.forName("com.mysql.jdbc.Driver");
        //2、使用jdb中的DriverManager类连接Driver驱动
        //url的格式:
        // jdbc         使用jdbc驱动(除了jdbc驱动,还有odbc驱动(微软提供,基本不太用))
        // localhost    机器ip地址,可以localhost 192.168.2.115
        // 3306         为数据库的端口号,如果是3306,也可以省略
        //  mydb        是指数据库名!不是连接名
        String url="jdbc:mysql://localhost:3306/mydb";
        //返回一个可以操作数据库的连接 Connection对象,用于连接数据库
        Connection conn= DriverManager.getConnection(url,"root","root");
        //3、编写sql语句
        String sql="select * from category";
        //4、使用执行SQL语句的执行器,执行sql语句 java.sql.Statement
        //从连接器中拿到执行器
        Statement st=conn.createStatement();
        //执行完sql后,获取返回的结果,把返回的结果放入结果集 java.sql.ResultSet(类似集合功能)
        ResultSet rs=st.executeQuery(sql);
        //5、从结果集中获取数据
        while (rs.next()){
            //如果结果集中有下一条数据
            System.out.println(rs.getInt("cid")+"\t"+rs.getString("cname"));
        }
        //6、关闭数据库连接
        //关闭statemen对象时,如果有ResultSet则一并关闭
        st.close();
        conn.close();
    }
}

JDBC API详解--注册驱动

  • 注册驱动 代码:
Class.forName("com.mysql.jdbc.Driver");

JDBC规范定义驱动接口:java.sql.Driver,MySql驱动包提供了实现类: com.mysql.jdbc.Driver DriverManager工具类,提供注册驱动的方法 registerDriver(),方法的参数是java.sql.Driver,所以我们可以通过如下语句进行注册: DriverManager.registerDriver(new com.mysql.jdbc.Driver()); 以上代码不推荐使用,存在两方面不足

  1. 硬编码,后期不易于程序扩展和维护
  2. 驱动被注册两次。 通常开发我们使用Class.forName() 加载一个使用字符串描述的驱动类。 如果使用Class.forName()将类加载到内存,该类的静态代码将自动执行。 通过查询com.mysql.jdbc.Driver源码,我们发现Driver类“主动”将自己进行注册

0.0 注意:jdbc4.0以上的版本已经可以隐式加载驱动,因为DriverManager的getConnection()方法中会自动判断是否加载驱动,如果没有,会自动加载驱动

//java连接MySQL时传入数据的字符集设置,需要设置URL,同时设置用户名和密码

String url="jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8&user=root&password=root";
Connection conn= DriverManager.getConnection(url);

JDBC API详解--获得语句执行者

2.4.1 概述 String sql = "某SQL语句"; 获取Statement语句执行平台:Statement stmt = con.createStatement();

常用方法:

  • int executeUpdate(String sql); --执行insert update delete语句.
  • ResultSet executeQuery(String sql); --执行select语句.
  • boolean execute(String sql); --执行select返回true 执行其他的语句返回false. 操作数据的两个方法
 @Test
    public void m1() throws ClassNotFoundException, SQLException {
        String url="jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8&user=root&password=root";
        Connection conn= DriverManager.getConnection(url);

        String sql="update category set cname='动画' where cid>3";
        //4、使用执行SQL语句的执行器,执行sql语句 java.sql.Statement
        //从连接器中拿到执行器
        Statement st=conn.createStatement();
        //执行完sql后,获取返回的结果,把返回的结果放入结果集 java.sql.ResultSet(类似集合功能)
        int line=st.executeUpdate(sql);
        System.out.println(line);
        //6、关闭数据库连接
        //关闭statemen对象时,如果有ResultSet则一并关闭
        st.close();
        conn.close();

execute如果是查询,则返回true/返回一条结果返回false,返回多条结果返回true 一般用于执行DDL,DCL语言,存储过程等,使用非crud SQL时可以使用execute方法

JDBC API详解--结果集对象

概述 ResultSet实际上就是一张二维的表格 |-----| |beforeFirst| |表数据| |afterLast|

我们可以调用其boolean next()方法指向某行记录,当第一次调用next()方法时,便指向第一行记录的位置,这时就可以使用ResultSet提供的getXXX(int col)方法(与索引从0开始不同个,列从1开始)来获取指定列的数据:

  • rs.next();//指向第一行
  • rs.getInt(1);//获取第一行第一列的数据,数据从一开始

获取结果集数据

常用方法:

  • Object getObject(int index) / Object getObject(String name) 获得任意对象
  • String getString(int index) / Object getObject(String name) 获得字符串
  • int getInt(int index) / Object getObject(String name) 获得整形,当不知道列名的时候,可以根据字段的位置来写参数,字段从1开始
  • double getDouble(int index) / Object getObject(String name) 获得双精度浮点型

不管什么类型的数据,都可以使用getString()获取值

JDBC API详解--释放资源

与IO流一样,使用后的东西都需要关闭! 关闭的顺序是先得到的后关闭,后得到的先关闭。

if(conn!==null){
	if(st!=null){
		st.close;
	}
	conn.close
}