JDBC知识

1 jdbc是什么?

Java DateBase connectivity,java数据库连接,java语言连接数据库
JDBC本质:sun公司定义了一套操作所有关系型数据库的规则(接口),各个数据库厂商去实现这套数据库,提供数据库驱动jar包我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。

2 使用步骤

1.导入驱动jar包
2.注册驱动   -> Class.forName
3.获取数据库连接对象connection -> DriverManager.getConnection
4.定义SQL语句
5.执行数据库语句的对象 Statement -> conn.createStatement
6.执行数据库,接受返回的结果 -> stmt.execute
7.处理结果
8.释放资源 stmt/conn.close

1.1 DriverManager: 驱动管理对象,导入jar包,注册驱动,写代码时使用:class.forName(“com.mysql.Driver”),该类中存在静态代码块

1.2 Connection: 获取连接数据库(url/username/password)

1.3 Statement: 执行数据库的对象, 执行SQL语句

1.4 ResultSet: 返回结果对象, 在while循环中使用循环来遍历结果集

package com.jun.jdbc.resultset;
 
import java.io.FileInputStream;
import java.sql.*;
import java.util.Properties;
 
/**
 * select语句返回ResultSet,取出结果
 */
public class ResultSet01 {
    public static void main(String[] args) throws Exception {
        //通过Properties对象获取配置文件信息
        Properties properties = new Properties();
        properties.load(new FileInputStream("src\\mysql.properties"));
        //获取到相关值
        String user = properties.getProperty("user");
        String password = properties.getProperty("password");
        String driver = properties.getProperty("driver");
        String url = properties.getProperty("url");
        Class.forName(driver);
        Connection connection = DriverManager.getConnection(url, user, password);
        //得到Statement
        Statement statement = connection.createStatement();
        //sql语句
        String sql ="select id,name,sex,borndate from actor";
        //执行sql语句,该语句返回单个,ResultSet对象
        /*
        +----+------+-----+---------------------+
        | id | name | sex | borndate            |
       +----+------+-----+---------------------+
       |  1 | tom  | 男  | 1945-05-06 00:00:00 |
       |  2 | jack | 男  | 1986-06-07 00:00:00 |
       +----+------+-----+---------------------+
         */
        ResultSet resultSet = statement.executeQuery(sql);
        //使用while取出数据
        while (resultSet.next()){//让光标向后移动,没有更多就返回false
            int id = resultSet.getInt(1);//得到第一行
            String name = resultSet.getString(2);//得到第二行
            String sex = resultSet.getString(3);
            Date date = resultSet.getDate(4);
            System.out.println(id+"\t"+name+"\t"+sex+"\t"+date);
        }
        //关闭连接
        resultSet.close();
        statement.close();
        connection.close();
    }
}
View Code

1.5 PreparedStatement:执行数据库的对象

  • 简化Statement中的操作
  • 提高执行语句的性能
  • 可读性和可维护性更好
  • 安全性更好。
  • 使用PreparedStatement能够预防SQL注入攻击,所谓SQL注入,指的是通过把SQL命令插入到Web表单提交或者输入域名或者页面请求的查询字符串,最终达到欺骗服务器,达到执行恶意SQL命令的目的。注入只对SQL语句的编译过程有破坏作用,而执行阶段只是把输入串作为数据处理,不再需要对SQL语句进行解析,因此也就避免了类似select * from user where name='aa' and password='bb' or 1=1的sql注入问题的发生。

Statement 和 PreparedStatement之间的关系和区别.

  • 关系:PreparedStatement继承自Statement,都是接口
  • 区别:PreparedStatement可以使用占位符,是预编译的,批处理比Statement效率高
package com.github.feifuzeng.middleware.mybatis.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class PrepareStatementSimpleDemo {

    public static void main(String[] args) throws Exception {

        /** 1. init PreparedStatement*/
        Class.forName("com.mysql.jdbc.Driver");
        String url = "jdbc:mysql://localhost:3306/db_test?useSSL=false";
        String user = "root";
        String password = "root";
        Connection connection = DriverManager.getConnection(url, user, password);
        String sql = "update user set username=? where id = ?";
        PreparedStatement preparedStatement = connection.prepareStatement(sql);

        /** 2. prepare param*/
        preparedStatement.setString(1, "feifz");
        preparedStatement.setInt(2, 2);

        /** 3. execute update*/
        int result = preparedStatement.executeUpdate();
        System.out.printf("更新记录数:"+result+"\n");

        /** 4. execute select*/

        String sql2 = "select * from user";
        ResultSet resultSet = preparedStatement.executeQuery(sql2);
        while (resultSet.next()) {
            int id = resultSet.getInt("id");
            String username = resultSet.getString("username");
            String dept = resultSet.getString("dept");
            System.out.println("id:"+id +"username->"+ username + ",dept-> " + dept );
        }


    }
}
View Code

 

 

 



 

posted @ 2022-11-21 09:57  NingShare  阅读(15)  评论(0编辑  收藏  举报