0
点赞
收藏
分享

微信扫一扫

JDBC入门使用

elvinyang 2022-01-20 阅读 26

JDBC简介(JAVA DATABASE CONNECTION)
使用Java语言操作关系型数据库的一套API
在这里插入图片描述

JDBC快速入门:

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

//JDBC快速入门
public class JDBCDemo {
    public static void main(String[] args) throws Exception {
        //1.注册驱动,加载类名,此处需要抛出异常Exception
        Class.forName("com.mysql.cj.jdbc.Driver");
        //2.获取连接,//之前是固定格式,后面加所要连接数据库的电脑ip和端口
        String url="jdbc:mysql://127.0.0.1:3306/db1";
        String root="root";
        String password="admin";
        Connection connection = DriverManager.getConnection(url, root, password);
        //3.定义SQL
        String sql="UPDATE account  SET money=100 where id=1;";
        //4. 获取执行sql的对象Statement
        Statement statement = connection.createStatement();
        //5. 执行sql,返回影响的行数
        int index=statement.executeUpdate(sql);
        //6. 处理结果
        System.out.println(index);
        //7. 释放资源
        statement.close();
        connection.close();
    }
}

JDBCAPI详解

  • DriveManager(驱动管理类)
    -作用:注册驱动;获取数据库连接
    在这里插入图片描述

  • Connection(数据库连接对象)作用
    获取执行SQL的对象:
    a.普通执行SQL对象
    Statement createStatement()
    b.预编译SQL的执行SQL对象:防止SQL注入
    PreparedStatement preparement(sql)
    c. 执行存储过程的对象
    CallableStatement prepareCall(sql)

管理事务
a.Mysql事务管理:
开启事务:begin;/Start transaction
提交事务:commit
回滚事务:rollback
Mysql默认自动提交事务
b.JDBC 事务管理
开启事务:SetAutoCommit(bool),true自动提交
提交事务:commmit();
回滚事务:rollback();

  • Statement
    作用:执行SQL语句
    a.int executeUpdate(sql):执行DML,DDL语句
    返回值:DML饭返回影响的行数,DDL可能返回0
    b. ResultSet executeQuery(sql):执行DQL语句
    返回值:ResultSet结果集对象。
  • ResultSet
    ResultSet(结果集对象)
    封装了DQL查询语句的结果
  //创建容器
        ArrayList<Account> accounts = new ArrayList<Account>();
        //注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        //获取链接
        String url = "jdbc:mysql:///db1?useSSL=false";
        String root = "root";
        String password = "admin";
        Connection connection = DriverManager.getConnection(url, root, password);
        //写sql查询语句
        String sql = "Select *FROM account";
        //创建执行对象
        Statement statement = connection.createStatement();
        //执行sql语句
        ResultSet resultSet = statement.executeQuery(sql);
        //遍历数据
        while (resultSet.next()) {
            //创建对象,并将查出的数据封装到对象中
            Account account=new Account();
            account.setId(resultSet.getInt("id"));
            account.setName( resultSet.getString("name"));
            account.setMoney(resultSet.getDouble("money"));
            accounts.add(account);
        }
        //遍历account对象集合
        for (Account account:accounts) {
            System.out.println("学生ID:"+account.getId()+"学生金钱:"+account.getMoney()+"学生姓名:"+account.getName());
        }
        //释放资源
        resultSet.close();
        statement.close();
        connection.close();
  • PreparedStatement
    预编译SQL语句并执行:预防SQL注入问题
    SQL注入:通过操作输入来修改事先定义好的SQL语句,用以达到执行代码对服务器进行攻击的方法。
/*
类名:PreparedStatementDemo
功能:解决SQL注入问题
实现过程:
1、获取PreparedStatement对象(sql中的参数值使用?代替)
通过COnnection对象获取PreparedStatement对象,并传入对应的sql语句
2、设置参数值:setInt(?索引,值)
3、执行sql
executeUpdate()/executeQuery():不需要传递参数值
 */
public class PreparedStatementDemo {
    public static void main(String[] args) throws  Exception{
        //加载驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        String url="jdbc:mysql:///db1?useSSL=false";
        String root="root";
        String admin="admin";
        //获取连接
        Connection connection = DriverManager.getConnection(url, root, admin);
//        String name="聂宝根";
//        String pass="123";
        //定义SQL语句
        String sql="select * from tb_login where user_account=? and user_password=?";
        //创建执行对象
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        //创建执行对象,参数1,?的位置编号;参数2:变量的值
        preparedStatement.setString(1,"聂宝根");
        preparedStatement.setString(2,"12");
        //执行sql语句
        ResultSet resultSet = preparedStatement.executeQuery();
        if(resultSet.next())
        {
            System.out.println("登陆成功");
        }
        else
        {
            System.out.println("登陆失败");
        }
        resultSet.close();
        preparedStatement.close();
        connection.close();

    }

PreparedStatement的原理:

  • 好处:预编译SQL,性能更高;可以防止SQL注入
  • PreparedStatement预编译功能开启:useServerPrepStmts=true
  • 配置Mysql执行日志(重启MYsql服务后生效)
  • PreparedStatement原理
    在获取PreparedStatement对象时,将sql语句发送给mysql服务器
    进行检查,编译
    执行时就无需检查、编译,提高了速度
/*
类名:PreparedStatementDemo
功能:解决SQL注入问题
实现过程:
1、获取PreparedStatement对象(sql中的参数值使用?代替)
通过COnnection对象获取PreparedStatement对象,并传入对应的sql语句
2、设置参数值:setInt(?索引,值)
3、执行sql
executeUpdate()/executeQuery():不需要传递参数值
 */
public class PreparedStatementDemo {
    public static void main(String[] args) throws  Exception{
        //加载驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        String url="jdbc:mysql:///db1?useSSL=false&";
        String root="root";
        String admin="admin";

        //获取连接
        Connection connection = DriverManager.getConnection(url, root, admin);
//        String name="聂宝根";
//        String pass="123";
        //定义SQL语句,开启预编译
        String sql="select * from tb_login where user_account=? and user_password=?useServerPrepStmts=true";
        //创建执行对象
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        //创建执行对象,参数1,?的位置编号;参数2:变量的值
        preparedStatement.setString(1,"聂宝根");
        preparedStatement.setString(2,"12");
        //执行sql语句
        ResultSet resultSet = preparedStatement.executeQuery();
        if(resultSet.next())
        {
            System.out.println("登陆成功");
        }
        else
        {
            System.out.println("登陆失败");
        }
        resultSet.close();
        preparedStatement.close();
        connection.close();

    }

数据库连接池技术
基本概念:
在这里插入图片描述
数据库连接池的实现:
在这里插入图片描述
Druid使用步骤:
Druid的下载
阿里仓库下载:https://mvnrepository.com/artifact/com.alibaba/druid/1.1.12

  1. 导入jar包 druid-1.1.12.jar
  2. 定义配置文件
  3. 加载配置文件
  4. 获取数据库连接池对象
  5. 获取连接
    在这里插入图片描述
举报

相关推荐

JDBC入门:JDBC概述

Jdbc入门

JDBC的入门

JDBC快速入门

JDBC入门基础

0 条评论