栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Servlet笔记七(JDBC)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Servlet笔记七(JDBC)

文章目录
  • 简介
  • Driver 接口
  • DriverManager 类
  • Connection 接口
  • Statement 接口
  • PreparedStatenent 接口
  • ResultSet 接口
  • 使用
    • JDBCTest
    • PrepareStatement 使用
    • JDBCUtils 封装


简介

JDBC 的全称是 Java 数据库连接(Java Database Connectivity),它是一套用于执行 SQL 语句的 Java API。应用程序可以通过这套 API 连接到关系型数据库,并使用 SQL 语句来完成对数据库中数据的查询、更新、新增和删除的操作。

JDBC 要求各个数据库厂商按照统一的规范来提供数据库驱动联系,所以用户就不必直接与底层的数据库交互,这使得代码的通用性更强。

JDBC 在应用程序与数据库之间起到了一个桥梁作用。当应用程序使用 JDBC 访问特定的数据库时,需要通过不同数据库驱动与不同得到数据库进行连接,连接后即可对数据库进行相应的操作。

Driver 接口

Driver 接口是所有 JDBC 驱动程序必须实现的接口,该接口专门提供给数据库厂商使用。需要注意的是,在编写 JDBC 程序时,必须要把所使用的数据库驱动程序或类库加载到项目的 classpath 中(这里指 MySQL 驱动 JAR 包)。

DriverManager 类

DriverManager类用于加载JDBC驱动并且创建与数据库的连接。在DriverManager类中,定义了两个比较重要的静态方法,如表所示。

Connection 接口

Connection接口代表Java程序和数据库的连接,只有获得该连接对象后才能访问数据库,并操作数据表。在Connection接口中,定义了一系列方法,其常用方法如表所示。

Statement 接口

Statement接口用于执行静态的SQL语句,并返回一个结果对象,该接口的对象通过
Connection实例的createStatement()方法获得。利用该对象把静态的SQL语句发送到数据库编译执行,然后返回数据库的处理结果。在Statement接口中,提供了3个常用的执行SQL语句的方法,具体如表9-3所示。

PreparedStatenent 接口

Statement 接口封装了 JDBC 执行 SQL 语句的方法,可以完成 Java 程序执行 SQL 语句的操作。然而,在实际开发过程中往往需要将程序中的变量作为SQL语句的查询条件,而使用 Statement 接口操作这些 SQL 语句会过于繁琐,并且存在安全方面的问题。针对这一问题,JDBC API 提供了扩展的 PreparedStatement 接口。PreparedStatement 是 Statement 的子接口,用于执行预编译的SQL语句。该接口扩展了带有参数SQL语句的执行操作,应用该接口中的SQL语句可以使用占位符 “?” 来代替其参数,然后通过setXxx() 方法为SQL语句的参数赋值。PreparedStatement接口中,提供了一些常用方法,具体如表所示。

ResultSet 接口

ResultSet 接口用于保存 JDBC 执行查询时返回的结果集,该结果集封装在一个逻辑表格中。在 ResultSet 接口内部有一个指向表格数据行的游标(或指针), ResultSet 对象初始化时,游标在表格的第 1 行之前,调用 next() 方 法可将游标移动到下一行。如果下一行没有数据,则返回 false。在应用程序中经常使用 next() 方法作为 while 循环的条件来迭代ResultSet 结果集。

ResultSet接口中的常用方法如表所示。

从表中可以看出,ResultSet 接口中定义了大量的 getXxx() 方法,而采用哪种 getXxx() 方法取决于字段的数据类型。程序既可以通过字段的名称来获取指定数据,也可以通过字段的索引来获取指定的数据,字段的索引是从 1 开始编号的。例如,数据表的第1列字段名为 id,字段类型为 int,那么既可以使用 getInt(1) 字段索引的方式获取该列的值,也可以使用getnt(“id”) 字段名称的方式获取该列的值。

使用

User 类

package com.xxx;

public class User {

    private int id;
    private String name;
    private String username;
    private String pass;
    private String email;

    public User() {
    }

    public User(int id, String name, String username, String pass, String email) {
        this.id = id;
        this.name = name;
        this.username = username;
        this.pass = pass;
        this.email = email;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + ''' +
                ", username='" + username + ''' +
                ", pass='" + pass + ''' +
                ", email='" + email + ''' +
                '}';
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPass() {
        return pass;
    }

    public void setPass(String pass) {
        this.pass = pass;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}
JDBCTest
package com.xxx;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class JDBCTest {

    public static void main(String[] args) {

        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        List users = new ArrayList<>();

        try{
            // 1. 注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            // 2. 通过 DriverManager 获取数据库连接
            String url = "jdbc:mysql://localhost:3306/javatask";
            String username = "root";
            String password = "root";
            conn = DriverManager.getConnection(url, username, password);
            // 3. 通过 Connection 创建 Statement 对象
            stmt = conn.createStatement();
            // 4. 使用 Statement 对象执行 Sql 语句
            rs = stmt.executeQuery("select * from user");
            // 遍历 ResultSet 结果集
            while(rs.next()){
                User u = new User();
                u.setId(rs.getInt("id"));
                u.setName(rs.getString("name"));
                u.setUsername(rs.getString("username"));
                u.setPass(rs.getString("pass"));
                u.setEmail(rs.getString("email"));
                users.add(u);
            }

        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }finally {
            // 6. 关闭资源
            if(rs != null){
                try {
                    rs.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
            if(stmt != null){
                try {
                    stmt.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
            if(conn != null){
                try {
                    conn.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
        }

        for(User u: users){
            System.out.println(u);
        }
    }
}

PrepareStatement 使用
package com.xxx;

import java.sql.*;
import java.util.Scanner;

public class PrepareStatmentTest {

    public static void main(String[] args) {

        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;

        try{

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

            String url = "jdbc:mysql://localhost:3306/javatask";
            String username = "root";
            String password = "root";
            conn = DriverManager.getConnection(url, username, password);

            // ? 是占位符
            pstmt = conn.prepareStatement("select * from user where id=?");
            System.out.println("请输入要查找的用户的id(整数)...");

            Scanner scan = new Scanner(System.in);
            int id = scan.nextInt();
            pstmt.setInt(1, id);
//            pstmt.setObject(1, id);
            rs = pstmt.executeQuery();

            while (rs.next()){
                System.out.println("id="+rs.getInt(1)
                        + ",name=" + rs.getString("name")
                        + ",pass="+rs.getString("pass"));
            }


        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            // 6. 关闭资源
            if(rs != null){
                try {
                    rs.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
            if(pstmt != null){
                try {
                    pstmt.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
            if(conn != null){
                try {
                    conn.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
        }

    }
}

JDBCUtils 封装
package com.xxx;

import java.sql.*;

public class JDBCUtils {

    public static Connection getConn() throws ClassNotFoundException, SQLException {

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

        String url = "jdbc:mysql://localhost:3306/javatask";
        String username = "root";
        String password = "root";
        Connection conn = DriverManager.getConnection(url, username, password);

        return conn;
    }
    // 关闭资源
    public static void release(Statement stmt, Connection conn){

        if(stmt != null){
            try {
                stmt.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if(conn != null){
            try {
                conn.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
    }

    public static void release(ResultSet rs, Statement stmt, Connection conn){

        if(rs != null){
            try {
                rs.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }

        release(stmt, conn);
    }
}

MyJDBCTest

package com.xxx;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

public class MyJDBCTest {

    public static void main(String[] args) {

        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        List users = new ArrayList<>();

        try {

            conn = JDBCUtils.getConn();
            stmt = conn.createStatement();
            rs = stmt.executeQuery("select * from user");

            while (rs.next()){

                User u = new User();
                u.setId(rs.getInt("id"));
                u.setName(rs.getString("name"));
                u.setUsername(rs.getString("username"));
                u.setPass(rs.getString("pass"));
                u.setEmail(rs.getString("email"));

                users.add(u);
            }

        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }finally {
            JDBCUtils.release(rs, stmt, conn);
        }

        for(User u: users){
            System.out.println(u);
        }
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/423944.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号