JDBC对象详解DriverManager&Connection&Statement

1.DriverManager

驱动管理对象

  功能:

(1)注册驱动,告诉程序该使用哪个数据库驱动jar

static void registerDriver(Driver driver):注册与给定的驱动程序 DriverManager

写代码使用:Class.forName("com.mysql.jdbc.Driver"); 

将Driver类加载进内存,就有一些代码会被自动执行(Driver类中有一些静态代码块的存在)

通过查看源码发现:在com.mysql.jdbc.Driver类中存在静态代码块

注意:MySQL5之后的驱动jar包可以省略注册驱动的步骤,因为在这个java.sql.Driver中已经写好了。

(2)获取数据库连接

  •  方法: static Connection getConnection(String url, String user, String password)
  • 参数:
    • url:指定连接的路径,语法:jdbc:mysql://ip地址(域名):端口号/数据库名称,即:JDBC:子协议:子名称//主机名:端口/数据库名?属性名=属性值&…
      • 例子:jdbc:mysql://localhost:3306/db3
      • 如果连接的是本机的mysql服务器,并且mysql服务默认的端口是3306,则url可以简写为:jdbc:mysql:///数据库名称
    • user:用户名
    • password:密码
	String url = "jdbc:mysql://localhost:3306/jdbcStudy?useUnicode=true&characterEncoding=utf8&useSSL=false";
	// mysql端口默认3306
	// 协议://主机地址:端口号/数据库名?参数1&参数2&参数3
	 
	// oracle默认端口1521
	// jdbc:oracle:thin:@localhost:1521:sid

2.Connection

数据库连接对象

代表了当前的代码与数据库之间的桥梁

功能:

(1)获取执行sql的对象,创建一个Statement对象,用于将SQL语句发送到数据库。

  • Statement createStatement()   
  • PreparedStatement prepardStatement(String sql)

(2)管理事务

  • 开启事务:void setAutoCommit(boolean autoCommit)   调用该方法设置参数为false,即开启事务
  • 提交事务:void commit()  
  • 回滚事务:void rollback()

3.Statement

执行Sql的对象

jdbc中的statement对象用于向数据库发送SQL语句,想完成对数据库的增删改查,只需要通过这个对象向数据库发送增删改查语句即可

  • Statement对象的executeUpdate方法,用于向数据库发送增删改查的sql语句。
  • executeUpdate执行完后,将会返回一个整数(即增删改查语句导致了数据库几行数据发生了变化)。
  • Statement.executeQuery方法用于向数据库发送查询语句,executeQuery方法返回代表查询结果的ResultSet对象。
	statement.executeQuery(); // 查询操作返回ResultSet
	statement.execute(); // 执行任何sql
	statement.executeUpdate(); // 更新,插入,删除,都是用这个,返回一个受影响的行数
	statement.executeBatch(); // 批量执行多个sql

CRUD操作-create

 使用executeUpdate(String sql)方法完成数据添加操作,示例如下:

	Statement st = conn.createStatement();
	String sql = "insert into user(...) values(...)";
	int num = st.executeUpdate(sql);
	if(num>0){
		System.out.println("插入成功!!!");
	}

CRUD操作-delete

使用executeUpdate(String sql)方法完成数据删除操作,示例操作:

	Statement st = conn.createStatement();
	String sql = "delete from user where id=1";
	int num = st.executeUpdate(sql);
	if(num>0){
		System.out.println("删除成功!!!");
	}

CRUD操作-update

使用executeUpdate(String sql)方法完成数据更新操作,示例操作:

	Statement st = conn.createStatement();
	String sql = "update user set name='' where name=''";
	int num = st.executeUpdate(sql);
	if(num>0){
		System.out.println("修改成功!!!");
	}

CRUD操作-read

使用executeQuery(String sql)方法完成数据查询操作,示例操作:

	Statement st = conn.createStatement();
	String sql = "select * from user where id=1";
	ResultSet rs = st.executeQuery(sql);
	while(rs.next()){
		// 根据获取列的数据类型,分别调用rs的相应方法映射到java对象中
	}

  代码实现

(1)提取工具类

db.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&characterEncoding=utf8&useSSL=false
username=root
password=123456

注意:这里有个坑,一定要把db.properties放在src目录下,不然classload的范围有局限,导致一直加载不到

JdbcUtils.java

package cn.company.jdbc.utils;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class JdbcUtils {
    private static String driver = null;
    private static String url = null;
    private static String username = null;
    private static String password = null;

    static {
        try {
            InputStream inputStream = JdbcUtils.class.getClassLoader().getResourceAsStream("db.properties");
            System.out.println(inputStream);
            Properties properties = new Properties();
            properties.load(inputStream);

            driver = properties.getProperty("driver");
            url = properties.getProperty("url");
            username = properties.getProperty("username");
            password = properties.getProperty("password");
            System.out.println(url);

            // 驱动只用加载一次
            Class.forName(driver);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // 获取连接
    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(url,username,password);
    }

    // 释放连接
    public static void releaseConnection(Connection connection, Statement statement, ResultSet resultSet)
        throws SQLException {
        if (resultSet != null) {
            resultSet.close();
        }

        if (statement != null) {
            statement.close();
        }

        if (connection != null) {
            connection.close();
        }

    }
}

(2)编写增删改的方法,executeUpdate
增:

package cn.company.jdbc;

import cn.company.jdbc.utils.JdbcUtils;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class TestInsert {
    public static void main(String[] args) throws SQLException {
        Connection connection = null;
        Statement statement = null;
        ResultSet resultSet = null;

        try {
            connection = JdbcUtils.getConnection();  // 获取数据库连接
            statement = connection.createStatement();
            String sql = "INSERT INTO users VALUES(4,'kuanghen','123456','2435579944@qq.com','2020-02-01')";
            int i = statement.executeUpdate(sql);
            if (i > 0) {
                System.out.println("插入成功!");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JdbcUtils.releaseConnection(connection, statement, resultSet);
        }

    }
}

  数据库jdbcStudy的users表中增加了一条信息

 删:

package cn.company.jdbc;

import cn.company.jdbc.utils.JdbcUtils;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class TestDelete {
    public static void main(String[] args) throws SQLException {
        Connection connection = null;
        Statement statement = null;
        ResultSet rs = null;
        try {
            connection = JdbcUtils.getConnection();
            statement = connection.createStatement();
            String sql = "DELETE FROM users WHERE id='4'";
            int i = statement.executeUpdate(sql);
            if (i > 0) {
                System.out.println("删除成功!");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JdbcUtils.releaseConnection(connection, statement, rs);
        }
    }
}

  改:

package cn.company.jdbc;

import cn.company.jdbc.utils.JdbcUtils;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class TestUpdate {
    public static void main(String[] args) throws SQLException {
        Connection conn = null;
        Statement statement = null;
        ResultSet rs = null;

        try {
            conn = JdbcUtils.getConnection();
            statement = conn.createStatement();
            String sql = "update users set name='kuangshen',email='123@163.com' WHERE id='1'";
            int i = statement.executeUpdate(sql);
            if (i > 0) {
                System.out.println("修改成功!");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JdbcUtils.releaseConnection(conn, statement, rs);
        }
    }
}

  修改结果:

 查:

package cn.company.jdbc;

import cn.company.jdbc.utils.JdbcUtils;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class TestSelect {
    public static void main(String[] args) throws SQLException {
        Connection conn = null;
        Statement statement = null;
        ResultSet rs = null;
        try {
            conn = JdbcUtils.getConnection();
            statement = conn.createStatement();
            String sql = "select * from users";
            ResultSet resultSet = statement.executeQuery(sql);
            while (resultSet.next()) {
                System.out.println("id="+resultSet.getObject("id") + 
                    ",name="+resultSet.getObject("name"));
                System.out.println("---------");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JdbcUtils.releaseConnection(conn,statement, rs);
        }
    }
}

  

4.Resultset

结果集对象

封装查询结果

(1)next():游标向下移动一行

(2)getXxx(参数):获取数据

  Xxx:代表数据类型,如getInt() 会返回int型值,getString()  会返回String类型

  参数有两种情况:

    可以接受int:代表列的编号,从1开始。如,getString(1)

    可以接受String:代表列的名称。如:getDouble("name")

5.PreparedStatement

执行sql的对象(功能比Statement强)

 

posted @ 2020-12-01 10:36  GumpYan  阅读(238)  评论(0编辑  收藏  举报