JDBC入门

文章介绍了JDBC的基本概念,包括它是一套操作数据库的接口,由数据库厂商提供驱动实现。文中详细展示了如何通过JDBC连接MySQL数据库,从注册驱动、获取连接到执行SQL语句的步骤,并对比了Statement和PreparedStatement的区别,强调了PreparedStatement在防止SQL注入方面的优势。
摘要由CSDN通过智能技术生成
  • JDBC基本概念
    1.Java DataBase Connextivity java语言操作数据库
    本质:java官方定义的一套操作关系型数据库的规则(接口)。各数据库厂商实现这套接口,提供数据库驱动jar包,真正执行的代码是jar包中的实现类。

  • 快速入门
    1.导入驱动jar包(maven)

<dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.28</version>
        </dependency>
    </dependencies>
	2.注册驱动
	3.获取数据库连接对象 connection
	4.定义sql
	5.获取执行sql语句的对象 statement
	6.执行sql,接受返回结果
	7.处理结果
	8.释放资源
    public static void main(String[] args) throws ClassNotFoundException, SQLException {

//        2.注册驱动
// 		 mysql5之后的驱动jar包可以省略注册驱动的步骤
        Class.forName("com.mysql.jdbc.Driver");
//        3.获取数据库连接对象 connection
        Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb","root","123456");
//        4.定义sql
        String sql = "select 1";
//        5.获取执行sql语句的对象 statement
        Statement stmt = connection.createStatement();
//        6.执行sql,接受返回结果
        int count = stmt.executeUpdate(sql);
//        7.处理结果
        System.out.println(count);
//        8.释放资源
        stmt.close();
        connection.close();

    }

详解各个对象:

  • DriverManager:驱动管理对象
// 获取数据库连接
方法:static Connection getConnection(String url,String user,String password)
参数
	url:指定连接的路径
		语法:jdbc:mysql://ip:端口号/
  • Connection:数据库连接对象
功能:
	1.获取执行sql的对象
		Statement createStatement()
		PreparedStatement prepareStatement(String sql)
	2.管理实务:
		开启事务:setAutoCommit()
		提交事务: commit()
		回滚事务: rollback()
  • Statement:执行sql的对象(静态sql)
1.execute(String sql):可以执行任意的sql
2.executeUpdate(String sql) :可以执行DML(insert,update,delete)语句,DDL(create,alter,drop)语句
*返回值:影响的行数
3.ResultSet executeQuery(String sql):执行DQL(select)语句
  • ResultSet: 结果集对象 封装查询的结果
			//ResultSet遍历结果集
			String sql = "select * from t_user";
            stmt = conn.createStatement();
            rs = stmt.executeQuery(sql);
			while (rs.next()){
                String user_name = rs.getString("user_name");
                System.out.println(user_name);
            }
  • PreparedStatement: Statement的子类 执行sql的对象(预编译sql)
//1.sql注入问题: 
//	在拼接sql时,有一些sql的特殊关键字参与字符串的拼接,会造成安全性问题
//例如:
	select * from user where username = "随便" and password = 'a' or  'a' = 'a'
	//其中'a' = 'a' 是一个恒等式

//2.解决sql注入问题:使用PreparedStatement对象解决
//3.预编译的sql:参数使用?作为占位符
	//定义sql时:
		select * from user where username = ? and password = ?;
	//获取prepareStatemenet 的sql对象:
		Connection.prepareStatement(String sql)
	//给?赋值
		setXxx(参数1,参数2//	执行sql 时不再需要传递sql

demo:

import java.sql.*;

/**
 * @author :yangzhipeng
 * @date : 2023/3/9 11:48
 * Description : prepareStatement解决sql注入问题
 */

public class prepareStatementDemo {
    Connection conn= null;
    PreparedStatement pstmt = null;
    ResultSet rs = null;

    public static void main(String[] args) {
        String username = "小明";
        String password = "'a' or  'a' = 'a'";
        new prepareStatementDemo().test(username,password);
    }
    public void test(String username,String password){
        try {
            conn = JDBCUtils.getConnection();
            //预编译的sql
            String sql = "select * from t_user where username =? and password =?";
            pstmt = conn.prepareStatement(sql);
            //给?赋值
            pstmt.setString(1,username);
            pstmt.setString(2,password);
            rs = pstmt.executeQuery();
            while (rs.next()){
                String user_name = rs.getString("user_name");
                System.out.println(user_name);
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }  finally {
            JDBCUtils.close(rs,pstmt,conn);
        }
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值