JDBC的简单使用

目录

1.JDBC中的核心API

2.JDBC工具类使用

3.SQL注入攻击


1.JDBC中的核心API

  • java.sql.DriverManager类:数据库驱动的管理类,管理数据库的驱动程序。

  • java.sql.Connection接口:表示数据库的连接对象,负责和数据库取得连接。

  • java.sql.Statment接口:执行SQL语句的对象,将Java中的SQL语句传递给数据库,让数据库执行SQL语句。

  • java.sql.ResultSet接口:表示数据表的查询结构集对象,执行的SQL语句是select,ResultSet就是我们查询的结果

强调问题:以上接口的实现类,都是由数据库驱动实现。接口调用这些实现类的方法重写!

2.JDBC工具类使用

1.优化为读取配置文件

//com.mysql.cj.jdbc.Driver 最新的 8.0  //com.mysql.jdbc.Driver 5.0版本
jdbc.driverClassName=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/school
jdbc.username=root
jdbc.password=333

使用properties作为配置文件使用,存储的就是数据库连接的四大信息,是Key=Value形式。
配置文件必须放在src下面

2.JDBC工具类

public class DBCUtil {
    static String driver;
    static String url;
    static String username;
    static String password;

    static {
        //Properties extends Hashtable<Object,Object>
        Properties p = new Properties();
        InputStream in = DBCUtil.class.getClassLoader().getResourceAsStream("jdbc.properties");
        try {
            //--2.2加载配置文件
            p.load(in);
            driver = p.getProperty("jdbc.driverClassName");
            url = p.getProperty("jdbc.url");
            username = p.getProperty("jdbc.username");
            password = p.getProperty("jdbc.password");
            Class.forName(driver);
            //inStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
    }
//连接
    public static Connection getConnection() throws SQLException {
        Connection connection = DriverManager.getConnection(url, username, password);
        return connection;
    }

//关闭
    public static void close(ResultSet resultSet, Connection connection, Statement statement) throws SQLException {
        if (resultSet != null) {
            resultSet.close();
        }
        if (connection != null) {
            connection.close();
        }
        if (statement != null) {
            statement.close();
        }
    }

}

3.SQL注入攻击

java.sql.PreparedStatement接口:继承Statement接口,也是一个执行SQL语句的象。

Prepared Statement接口特性:

  • 将SQL语句预编译并存储,可以反复的高效的执行。

  • 高效执行:必须是同一个查询语句才高效

  • 执行SQL语句,可以有效的防止SQL语句的注入

 public void queryUserInfoByNameAndPwd(String name, String password) throws SQLException {
        Connection connection = JDBCUtils01.getConnection();
        //?号是占位符
        String sql = "select * from userinfo where username=? and password=?;";
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        // 索引从1开始
        preparedStatement.setObject(1, name);
        preparedStatement.setObject(2, password);

        //执行
        ResultSet resultSet = preparedStatement.executeQuery();

        List<UserInfo> list = new ArrayList<>();
        while (resultSet.next()) {
            UserInfo userInfo = new UserInfo();
            userInfo.setId(resultSet.getInt("id"));
            userInfo.setUsername(resultSet.getString("username"));
            userInfo.setPassword(resultSet.getString("password"));
            list.add(userInfo);
        }
        JDBCUtils01.close(resultSet,preparedStatement,connection);
    }

4.JDBC涉及的知识

1.Properties类的用法总结

Properties类的用法总结_源码复兴号的博客-CSDN博客

2.类加载器

Java - 类加载器_从零开始的JAVA世界的博客-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值