【笔记】JDBC的使用

目录

源码在码云上

0.jdbc的入门使用

1.查询数据库

2.将结果进行封装

3.查询单个用户, 输出到控制台

1.JDBC操作数据库

1.查询所有用户信息

2.根据id查询用户信息

3.新增用户信息

4.修改用户信息

5.删除用户信息

2.抽取JDBCUtils

3.登录案例演示sql注入

sql注入

使用prepareStatement()

4.使用prepareStatement()进行增删改查

1.add

2.update

3.delete

4.findAll

5.findUserById

5.转账案例演示事务


源码在码云上

传送门:jdbc_demo

0.jdbc的入门使用

1.查询数据库

new Driver()是导包mysql驱动里面的。import com.mysql.jdbc.Driver;

不需要释放资源

Exception in thread "main" java.sql.SQLException: Before start of result set

取数据传入的参数写错了

 String url = "jdbc:mysql://localhost:3306/jdbc_demo";
 String url = "协议:子协议://主机:端口号    /数据库";
package com.jcli;

import com.mysql.jdbc.Driver;

import java.sql.*;

/**
 * 查询所有的用户, 输出到控制台
 * - 在java项目模块下,导入mysql驱动包
 * - 注册驱动
 * - 获得连接
 * - 创建执行sql语句对象
 * - 执行sql语句,处理结果
 * - 释放资源
 */
public class Test01_select {
    public static void main(String[] args) throws SQLException {
        //- 在java项目模块下,导入mysql驱动包
        //- 注册驱动
        DriverManager.registerDriver(new Driver());//此处导包
        //- 获得连接
        String url = "jdbc:mysql://localhost:3306/jdbc_demo";
        String user = "root";
        String password = "root";
        Connection connection = DriverManager.getConnection(url, user, password);
        //- 创建执行sql语句对象
        Statement statement = connection.createStatement();
        //- 执行sql语句,处理结果
        String sql = "select * from user";
        ResultSet resultSet = statement.executeQuery(sql);
        // 游标下移,并且判断当前游标指向的行是否有记录(数据),如果有就返回true,否则返回false
        while (resultSet.next()) {
            //取数据
            System.out.println(resultSet.getObject("id"));
            System.out.println(resultSet.getObject("username"));
            System.out.println(resultSet.getObject("password"));
            System.out.println(resultSet.getObject("nickname"));
            System.out.println("-------------------------------------");
        }
        //- 释放资源
        resultSet.close();
        statement.close();
        connection.close();
    }

}

2.将结果进行封装

防止null值

3.查询单个用户, 输出到控制台

直接写驱动类名会自动生成路径,idea中

所以sql语句中属性用单引号是因为这样吗

1.JDBC操作数据库

//    1.注册驱动
//    2.获得连接
//    3.创建sql语句执行体
//    4.执行sql语句,处理结果
//    5.释放资源

1.查询所有用户信息

package com.jcli.Test02_CRUD;

import com.jcli.bean.User;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;

/**
 * 查询所有用户信息
 */
public class Test02_findAll {
    public static void main(String[] args) throws Exception {
        //1.注册驱动
Class.forName("java.sql.Driver");
        //2.获得连接
        String url = "jdbc:mysql://localhost:3306/jdbc_demo";
        Connection connection = DriverManager.getConnection(url, "root", "root");
        //    3.创建sql语句执行对象
        Statement statement = connection.createStatement();
        //    4.执行sql语句,处理结果
        String sql = "select * from user";
        ResultSet resultSet = statement.executeQuery(sql);
        //    5.创建ArrayList集合,存储user对象
        ArrayList<User> list = new ArrayList<>();
        //    6.循环取数据
        while (resultSet.next()){
            //    7.取数据
            int id = resultSet.getInt("id");
            String username = resultSet.getString("username");
            String password = resultSet.getString("password");
            String nickname = resultSet.getString("nickname");
            //    8.创建user对象
            User user = new User();
            //    9.赋值
            user.setId(id);
            user.setUsername(username);
            user.setPassword(password);
            user.setNickname(nickname);
            //    10.把user对象添加到集合
            list.add(user);
        }

        //    11.释放资源
        resultSet.close();
        statement.close();
        connection.close();
        //    12.打印集合
        for (User user : list) {
            System.out.println(user);
        }

    }
}

2.根据id查询用户信息

3.新增用户信息

4.修改用户信息

5.删除用户信息

为啥会退出错误

2.抽取JDBCUtils

//静态代码块
//    加载db.properties配置文件中的数据
//    1.创建properties对象
//    2.加载配置文件
//    3.给成员变量赋值
//    4.注册驱动
​
//获得连接
​
//释放资源
//测试
//    1.注册驱动,获得连接
//    2.创建执行sql语句体
//    3.执行sql语句,处理结果
//    4.释放资源

查询所有

修改用户信息

3.登录案例演示sql注入

在控制台输入用户名和密码,查询数据库,如果数据库存在当前用户,显示登录成功!

如果数据库不存在当前用户,显示登录失败!

就是用户输入账号密码去数据库查询,找到则登录成功

sql注入

原因:因为sql语句是简单的字符串拼接,所以拼接后sql语句的格式可能会改变 解决方案:使用预编译sql语句对象,对sql语句进行预编译,从而固定sql语句的格式 setXXX(参数位置,参数的值)

//- 用户输入用户名和密码
//- 注册驱动,获得连接
//- 创建执行sql语句对象
//- 执行sql语句,处理结果(判断是否登录成功,其实就是判断User对象是否为null)
//- 释放资源 

使用prepareStatement()

4.使用prepareStatement()进行增删改查

//    1.注册驱动,获得连接
//    2.预编译sql语句,得到预编译对象
//    3.为sql语句设置参数
//    4.执行sql语句,数量结果
//    5.释放资源

1.add

2.update

3.delete

4.findAll

5.findUserById

5.转账案例演示事务

  • 管理事务的功能类:Connection接口

    • 开启事务:setAutoCommit(boolean autoCommit); 参数为false,则手动开启事务。

    • 提交事务:commit();

    • 回滚事务:rollback();

  • zs给ls转100, 使用事务进行控制

//- 1.注册驱动,获得连接
//- 2.开启事务
//- 3.预编译sql语句,得到预编译对象
//- 4.设置sql语句参数
//- 5.执行sql语句,处理结果
//- 6.提交事务或者回滚事务
//- 7.释放资源


 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值