JDBC的介绍与使用

一、JDBC是什么

JDBC,全称是Java Database Connectivity,它是一套统一的基于Java语言的关系数据库编程接口规范,该规范允许你把SQL语句作为参数通过JDBC接口发送给远端数据库,远端数据库接受到你的SQL后进行语法分析、验证,然后执行、响应。
用于Java编程语言和数据库之间的数据库无关连接的标准Java API,换句话说:JDBC是用于在Java语言编程中与数据库连接的API

二、JDBC API的使用

  1. 导入jdbc连接jar包,如果本地MYSQL是5.x版本请使用5.x的驱动包
mysql-connector-java-8.0.18

  1. 注册驱动
#方案一 注册驱动
DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());
#方案二 通过反射加载驱动
Class.forName("com.mysql.cj.jdbc.Driver()");

  1. 获取连接
#jdbc.properties
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mydatabase
username=root
password=root
#方式一
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/库名?serverTimezone=UTC","root","mysqlroot");
#方式二
#创建Properties对象
Properties info = new Properties();
#加载本地properties文件
info.load(new FileInputStream("jdbc.properties"));
string user = info.getProperty("user");
String passworld = info.getProperty("passworld");
String driver = info.getProperty("driver");
String url = info.getProperty("url");
#获取连接	
Connection connection = DriverManager.getConnection(url,user,passworld);

  1. 创建执行SQL语句的命令对象
// 使用Statement 创建执行对象,适用于执行一次或不带参数的 SQL,存在 SQL 注入风险 -->
Statement statement = connection.createStatement();
// 使用PreparedStatement 创建预编译执行对象,适用于复杂 SQL 创建,没有SQL 注入风险
PreparedStatement statement = connection.prepareStatement(sql);
String sql = "select count(*) from admin where username=? and password=?";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setString(1, username);//设置第一个占位符的值
statement.setString(2, password);//设置第二个占位符的值

  1. 执行操作
// 只针对增删改返回受影响的行数
int update = statement.executeUpdate(sql);
// 查询返回结果集
ResultSet rs = statement.executeQuery();
// 执行任意sql语句,返回boolean
boolean bol= statement.execute();

  1. ResultSet结果对象接口
  • next();下移一行,返回当前行是否有值

  • prevlous();上移一行,返回当前行是否有值

  • getXX(列索引列名|别名);返回对应列的值,接收类型为XX

  • getObject(列索引列名|别名);返回对应列的值,接收类型为Object

  1. ResultSetHandler接口
  • BeanHandler:将结果集的第一行,封装成对象,并返回 new BeanHandler<>(xx.class)
  • BeanListHandler:将结果集中的所有行,封装成对象的集合,并返回 new BeanListHandler<>(xx.class)
  • ScalarHandler:将结果集中的第一行第一列,以Object形式返回 new ScalarHandler()

  1. QueryRunner类使用
QueryRunner queryRunner = new QueryRunner();
String sql = "select * from emp";
Object[] objects = queryRunner.query(connection, sql, new ArrayHandler());
for (Object object : objects) {
    if (object != null) {
        System.out.print(object.toString());
    }
}
#update(connection,sql,params);执行任何增删改语句
#params 为参数
#query(connection sql,ResultSetHandler,params);执行任何查询语句
#ResultSetHandler 返回结果对象关系映射器

三、具体示例

import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;
 
public class JDBCUtil {
    //静态代码块
    static {
        ClassLoader classLoader = JDBCUtil.class.getClassLoader();
        InputStream resourceAsStream = classLoader.getResourceAsStream("jdbc.properties");
        Properties properties = new Properties();
        try {
            properties.load(resourceAsStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
        driver = properties.getProperty("driver");
        url = properties.getProperty("url");
        username = properties.getProperty("username");
        password = properties.getProperty("password");
    }
 
    private static String driver;
    private static String url;
    private static String username;
    private static String password;
    
    //获取连接
    public static Connection getConnection()  {
        //Driver driver;
        Connection connection=null;
        //String url="jdbc:mysql://localhost:3306/user";
        try {
           // driver = new Driver();
           // DriverManager.registerDriver(driver);
            Class.forName(driver);
           connection= DriverManager.getConnection(url, username, password);
        } catch (Exception e) {
            e.printStackTrace();
        }
 
        return connection;
    }
    //关闭连接
    public static void close(Connection connection, PreparedStatement preparedStatement, ResultSet resultSet) {
        if(connection!=null)
        {
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(preparedStatement!=null)
        {
            try {
                preparedStatement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(resultSet!=null)
        {
            try {
                resultSet.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    //登录测试
    public static void login(){
          Connection connection = JDBCUtil.getConnection();
          String sql="select  * from  user where account=? and password=?";
          PreparedStatement preparedStatement = connection.prepareStatement(sql);
          preparedStatement.setString(1,account);
          preparedStatement.setString(2,password);
          ResultSet resultSet = preparedStatement.executeQuery();
          if (resultSet.next())
          {
            String name=resultSet.getString("account");
            System.out.println(name+"登录成功!");
          }
          else
          {
            System.out.println("登录失败!");
          }
          JDBCUtil.close(connection, preparedStatement, resultSet);
    }

    public static void main(String[] args){
        JdbcUtil.login();
    }
}
    
posted @ 2023-06-29 21:38  小小码夫  阅读(54)  评论(0)    收藏  举报