Java使用JDBC1

本文介绍了使用JDBC访问MySQL数据库的基本步骤,包括加载和注册驱动、获取连接、使用Statement执行SQL语句(DDL、DML、DQL)以及处理ResultSet结果集。同时,提供了具体的Java代码示例,并提到了JdbcUtil类的抽象和资源释放的重要性。
摘要由CSDN通过智能技术生成

1.开发需要使用的包

java.sql : 所有与 JDBC 访问数据库相关的接口和类
javax.sql : 数据库扩展包,提供数据库额外的功能。如:连接池
数据库的驱动: 由各大数据库厂商提供,需要额外去下载,是对 JDBC 接口实现的类

2. 使用

2.1 核心API
DriverManager 类1) 管理和注册数据库驱动
2) 得到数据库连接对象
Connection 接口一个连接对象,可用于创建 Statement 和 PreparedStatement 对象
Statement 接口一个 SQL 语句对象,是 Statement 的子接口
ResultSet 接口用于封装数据库查询的结果集,返回给客户端 Java 程序
2.2 加载和注册驱动
Class.forName加载和注册数据库驱动,数据库驱动由 mysql 厂商 "com.mysql.jdbc.Driver"
2.3 使用DriverManager类

使用方法:

Connection getConnection (String url, String user, String password)通过连接字符串,用户名,密码来得到数据 库的连接对象
Connection getConnection (String url, Properties info)通过连接字符串,属性对象来得到连接对象

参数说明

用户名登录的用户名
密码登录的密码
连接字符串 URL不同的数据库 URL 是不同的,mysql 的写法 jdbc:mysql://localhost:3306/数据库[?参数名=参数值]
驱动类的字符串名com.mysql.jdbc.Driver

URL详解

2.4 Statement接口

  1. JDBC访问数据库的步骤
    连接说明
    注册和加载驱动(可以省略) -> 获取连接 -> Connection 获取 -> Statement 对象 -> 使用 Statement 对象执行 SQL 语句 -> 返回结果集 -> 释放资源

  2. Statement的方法

int executeUpdate(String sql) 用于发送 DML 语句,增删改的操作,insert、update、delete 参数:SQL 语句 返回值:返回对数据库影响的行数
ResultSet executeQuery(String sql) 用于发送 DQL 语句,执行查询的操作。select 参数:SQL 语句 返回值:查询的结果集
  1. 释放资源
    需要释放的对象:ResultSet 结果集,Statement 语句,Connection 连接
    释放原则:先开的后关,后开的先关。ResultSet -> Statement -> Connection
    放在哪个代码块中:finally 块

2.5 ResultSet接口

作用:封装数据库查询的结果集,对结果集进行遍历,取出每一条记录。

boolean next()游标向下移动 1 行 返回 boolean 类型,如果还有下一条记录,返回 true,否则返回 false
数据类型 getXxx()通过字段名,参数是 String 类型。返回不同的类型 通过列号,参数是整数,从 1 开始。返回不同的类型

关于 ResultSet 接口中的注意事项:

  1. 如果光标在第一行之前,使用 rs.getXX()获取列值,报错:Before start of result set
  2. 如果光标在最后一行之后,使用 rs.getXX()获取列值,报错:After end of result set
  3. 使用完毕以后要关闭结果集 ResultSet,再关闭 Statement,再关闭 Connection

3.案例

3.1 得到连接对象
package JDBC_use;

import java.lang.ProcessHandle.Info;
import java.sql.Connectio
n;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

public class Demo1Connect {
    public static void conByUrl(String url){
        try(Connection connection = DriverManager.getConnection(url, "root", "***")){
            System.out.println(connection);
        }catch(SQLException e){
            e.printStackTrace();
        }
    }
    public static void conByInfo(String url){
        try{
            Properties Info = new Properties();
            Info.setProperty("user", "root");
            Info.setProperty("password", "***");
            Connection connection = DriverManager.getConnection(url, Info);
            System.out.println(connection);
        }catch(SQLException e){
            e.printStackTrace();
        }
    }
    public static void main(String[] args){
        String url = "jdbc:mysql://localhost:3306/learn_sql";
        conByInfo(url);
    }
}
3.2 执行DDL(Data Definition Language)操作

使用JDBC在Mysql中创建学生表

package JDBC_use;

import java.sql.Statement;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Connection;
public class DemoCreate {
    public static void main(String[] args){
        Connection con = null;
        Statement state = null;
        try{
            //1.创建连接
            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/learn_sql", "root", "***");
            //2.得到语句对象
            state =  con.createStatement();
            state.executeUpdate("create table if not exists student (id INT PRIMARY KEY AUTO_INCREMENT," + 
                                "name varchar(20) not null, gender boolean, birthday date)");
            System.out.println("创建成功");
        }catch(SQLException e){
            e.printStackTrace();
        }finally{
            if(con != null){
                try{con.close();}
                catch(SQLException e){
                    e.printStackTrace();
                }
            }

            if(state != null){
                try{
                    state.close();
                }catch(SQLException e){
                    e.printStackTrace();
                }
            }
        }
    }    
}

3.3 执行DML(Data Manipulation Language)操作

package JDBC_use;

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


public class Demo5DML {
    public static void main(String[] args){
        Connection con = null;
        Statement sta = null;
        try{
            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/learn_sql", "root", "***");
            sta = con.createStatement();
            int count = 0;
            count += sta.executeUpdate("insert into student values (null, '孙悟空', 1, '1993-03-24'), " 
            + "(null, '白骨精', 0, '1995-03-24')," 
            + "(null, '猪八戒', 1, '1993-03-24'),"
            + "(null, '嫦娥', 0, '1993-03-11')");
            System.out.println("成功更新" + count + "条记录");
        }catch(SQLException e){
            e.printStackTrace();
        }finally{
            if(con != null){
                try{con.close();}
                catch(SQLException e){
                    e.printStackTrace();
                }
            }

            if(sta != null){
                try{sta.close();}
                catch(SQLException e){
                    e.printStackTrace();
                }
            }
        }
    }
}

3.3 执行DQL(Data Query Language)操作

package JDBC_use;

import java.sql.*;
public class DemoDQL {
    public static void main(String[] args){
        Connection con = null;
        Statement sta = null;
        ResultSet rs = null;
        try{
            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/learn_sql", "root", "***");
            sta = con.createStatement();
            rs = sta.executeQuery("select * from student");
            while(rs.next()){
                int id = rs.getInt("id");
                String name = rs.getString("name");
                boolean gender = rs.getBoolean("gender");
                Date birthday = rs.getDate("birthday");
                System.out.println("id:" + id + " name:" + name + " gender:" + gender + " birthday:" + birthday);
            }
        }catch(SQLException e){
            e.printStackTrace();
        }finally{
            try{
                rs.close();
                con.close();
                sta.close();
            }catch(SQLException e){
                e.printStackTrace();
            }
        }
    }
}

4. JdbcUtil类

很明显,上述的代码太过冗余,我们需要将对应的代码抽象出来

package JDBC_use;
import java.sql.*;
public class JdbcUtils {
    private static final String USER = "root";
    private static final String PWD = "***";
    private static final String URL = "jdbc:mysql://localhost:3306/learn_sql";
    private static final String DRIVER = "com.mysql.jdbc.Driver";

    //注册驱动
    static{
        try{
            Class.forName(DRIVER);
        }catch(ClassNotFoundException e){
            e.printStackTrace();
        }
    }

    public static Connection getConnection(){
        Connection con = null;
        try{
            con = DriverManager.getConnection(URL, USER, PWD);
        }catch(SQLException e){
            e.printStackTrace();
        }
        return con;
    }

    public static void close(Connection conn, Statement sta){
        if(sta != null){
            try{
                sta.close();
            }catch(SQLException e){
                e.printStackTrace();
            }
        }
        if(conn != null){
            try{
                conn.close();
            }catch(SQLException e){
                e.printStackTrace();
            }
        }
    }

    public static void close(Connection conn, Statement sta, ResultSet rs){
        if(rs != null){
            try{
                rs.close();
            }catch(SQLException e){
                e.printStackTrace();
            }
        }
        close(conn, sta);
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值