JDBC入门

内容纲要

JDBC的概述

  • JDBC全程为: java DataBase Connectivity(java数据库连接)

    JDBC使用步骤

  • 搭建开发环境
  • 编写程序,在程序中加载数据库驱动
  • 建立连接
  • 创建用于向数据库发送SQL的Statement对象
  • 从代表结果集的ResultSet中取出数据
  • 断开与数据库的连接,并释放相关资源
public void demo2(){
    Connection conn = null;
    Statement stmt = null;
    ResultSet rs = null;
    try {
        // 1.加载驱动
//          DriverManager.registerDriver(new Driver());// 会导致驱动注册两次。
        Class.forName("com.mysql.jdbc.Driver"); 
        // 2.获得连接
        conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbctest", "root", "abc");
        // 3.创建执行SQL语句的对象,并且执行SQL
        // 3.1创建执行sql的对象
        String sql = "select * from user";
        stmt = conn.createStatement();
        // 3.2执行sql
        rs = stmt.executeQuery(sql);
        while(rs.next()){
            int uid = rs.getInt("uid");
            String username = rs.getString("username");
            String password = rs.getString("password");
            String name = rs.getString("name");

            System.out.println(uid+"   "+username+"   "+password+"   "+name);
        }

    } catch (Exception e) {
        e.printStackTrace();
    }finally{
        // 4.释放资源
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException sqlEx) { // ignore 

            }

            rs = null;
        }

        if(stmt != null){
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            stmt = null;
        }
        if(conn != null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            conn = null;// 垃圾回收机制更早回收对象。
        }
    }
}

DriverManager :驱动管理类

主要作用:
一、注册驱动
实际开发中注册驱动会使用如下的方式:
Class.forName("com.mysq.jdbc.Driver");
因为之前的方式会导致驱动注册两次。
二、获得连接
Connection getConnection(String url,String username,String password);
url写法: jdbc:mysq://localhost:3306/databasename
jdbc :协议
mysql :子协议
localhost:主机名
3306 :端口号
url简写: jdbc:mys:/://jdbc

Connection :连接对象
主要作用:
一、创建执行SQL语句的对象
Statement createStatement() : 执行SQL语句,有SQL注入的漏洞存在。
PreparedStatement prepareStatement(String sq) : 预编译SQL语询,解决SQL注入的漏洞。
CallableStatement prepareCall(String sql) : 执行SQL中存储过程
二、进行事务的管理
setAutoCommit(boolean autoCommit) :设置事务是否自动提交。
commit() :事务提交
rollback() :事务回滚

===========================

Statement : 执行SQL
主要作用:
一、执行SQL语询
boolean execute(String sql) :执行SQL,执行select语句返回true,否则返回false
ResultSet executeQuery(String sql) :执行SQL中的select语句
int executeUpdate(String sql) :执行SQL中的insert/update/delete语句
二、执行批处理操作
addBatch(String sql) :添加到批处理
executeBatch) :执行批处理
clearBatch) :清空批处理
ResultSet :结果集
结果集:其实就是查询语句( select )语句查询的结果的封装。
主要作用:
结果集获取查询到的结果的。
next() :针对不同的类型的数据可以使用getXXX()获取数据,通用的获取数据的方法:getObject();

JDBC的资源释放

  • Jdbc程序运行完后,切记要释放程序在运行过程中,创建的那些与数据库进行交互的对象,这些对象通常是ResultSet, Statement和Connection对象。
  • 特别是Connection对象,它是非常稀有的资源,用完后必须马上释放,如果Connection不能及时、正确的关闭,极易导致系统宕机。Connection的使用原则是尽量晚创建,尽量早的释放。

    JDBC的CRUD操作

  • 向数据库中保存记录
  • 修改数据库中的记录
  • 删除数据库中的记录
  • 查询数据库中的记录

    JDBC的SQL注入漏洞的解决

    PreparedStatement是Statement的子接口,它的实例对象可以通过调用Connection.preparedStatement(sq)方法获得,相对于Statement对象而言:
    -- PreperedStatement可以避免SQL注 入的问题。
    -- Statement会使数据库频繁编译SQL ,可能造成数据库缓冲区溢出。
    PreparedStatement可对SQL进行预编译,从而提高数据库的执行效率。
    -- 并且PreperedStatement对于sq|中的参数,允许使用占位符的形式进行替换,简化sq|语句的编写

    PreparedStatement的使用

  • 保存数据
  • 修改数据
  • 删除数据
  • 查询数据

    数据库连接池


THE END
分享
二维码
< <上一篇
下一篇>>