JDBC复习1

1.什么是JDBC

JDBC是java数据库连接技术的简称(Java DataBase Connectivity)

jdbc是接口,jdbc驱动才是接口的实现,负责连接各种不同的数据库。jdbc的API由Sun公司提供,要遵循其规范

PS:驱动就是比如你买个鼠标,并不能直接用,需要插入电脑并安装驱动程序才可以使用。这里你有个JDBC,但是你得有jdbc驱动才可以和数据库建立连接

2.组成JDBC的类和接口

java.sql

  类:DrivaerManager --------由sun公司提供,载入不同的jdbc驱动(由数据库厂商提供)

  接口:

    Connection(连接数据库)

    Statement和PreparedStatement:执行sql语句。要搞清楚两者的用法和区别

    ResultSet:

javax.sql

  接口:DataSource

3.关于Statement和PreparedStatement的区别与使用

  1. 二者都是执行sql语句的载体,PreparedStatement是Statement的一个子接口。使用PreparedStatement可以防止SQL攻击,提高可读性和效率,建议使用

  2.Statement执行sql语句提供了以下常用方法:executUpdate(可执行sql中的增删改,还可以用于判断是否数据库更新成功),executeQuery(执行sql语句的查询语句)

  3.关于PreparedStatement的使用

1     string sql = "select * from people p where p.id = ? and p.name = ?";  //1.编写sql语句,"?"代表占位符,参数
2     preparedstatement ps = connection.preparestatement(sql);        //2.获取执行sql语句的载体
3     ps.setint(1,id);             //3.设置占位符,提供了setInt,setString,setDouble等
4     ps.setstring(2,name);    
5     ResultSet rs = ps.executequery();

  4.关于statement的使用    

1     Statement stmt = connection.Statement();  //获取Statement
2     string sql = "select * from people p where p.id = 1 and p.name = '张三' ";
3     ResultSet rs = stmt.executeQuery(sql);

  5.看了不少资料说了很多,都是建议有一点开发水平的程序员都使用PreparedStatement。

   好处有很多,有jdbc模板,方便维护,防止sql注入攻击,预编译处理等等,至于其中的原因,会在后面转载几篇大佬的文章来学习学习

4.关于结果集ResultSet

1 ResultSet.next(); // 将游标由当前位置移动到下一行
2 ResultSet.getString(String columnName); // 获取指定字段的String类型值 3 ResultSet.getString(int columnIndex); // 获取指定索引的String类型值 4 ResuleSet.previous(); // 将游标由当前位置移动到上一行

/*

 *参数columnIndex表示列的索引,列索引从1开始,而不是0,

 *这第一点与数组不同。如果你清楚当前列的数据类型,那么可以使用getInt()之类的方法来获取

 *如果你不清楚列的类型,那么你应该使用getObject()方法来获取。

*/

5. 把数据库连接关闭这种重复度很高的代码抽取出来(三种方式)

第一种方式(我用的最多)

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

/**
 * 提供获取连接和释放资源的方法
 */
public class JDBCUtils_V1 {

    /**
     * 获取连接方法
     */
    public static Connection getConnection() {
        Connection conn = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/web08", "root", "root");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return conn;
    }

        /*
         *释放资源
        */
    public static void release(Connection conn, PreparedStatement pstmt, ResultSet rs) {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (pstmt != null) {
            try {
                pstmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

    }
}                

第二种方式--通过读取配置文件

在src目录下新建一个db.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3307/test?useUnicode=true&characterEncoding=utf8
username=root
password=123456
package cn.itheima.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ResourceBundle;

/**
 * 提供获取连接和释放资源的 方法
 */
public class JDBCUtils_V2 {
    private static String driver;
    private static String url;
    private static String username;
    private static String password;
    
    /**
     * 静态代码块加载配置文件信息
     */
    static{
        ResourceBundle bundle = ResourceBundle.getBundle("db");
        driver = bundle.getString("driver");
        url = bundle.getString("url");
        username = bundle.getString("username");
        password = bundle.getString("password");
    }

    /**
     * 获取连接方法
     */
    public static Connection getConnection() {
        Connection conn = null;
        try {
            Class.forName(driver);
            conn = DriverManager.getConnection(url, username, password);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return conn;
    }

    public static void release(Connection conn, PreparedStatement pstmt, ResultSet rs) {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (pstmt != null) {
            try {
                pstmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

    }
}

第三种方式--也是通过读取配置文件

package cn.itheima.jdbc;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
import java.util.ResourceBundle;

/**
 * 提供获取连接和释放资源的 方法*/
public class JDBCUtils_V3 {
    private static String driver;
    private static String url;
    private static String username;
    private static String password;

    /**
     * 静态代码块加载配置文件信息
     */
    static {
        try {
            // 1.通过当前类获取类加载器
            ClassLoader classLoader = JDBCUtils_V3.class.getClassLoader();
            // 2.通过类加载器的方法获得一个输入流
            InputStream is = classLoader.getResourceAsStream("db.properties");
            // 3.创建一个properties对象
            Properties props = new Properties();
            // 4.加载输入流
            props.load(is);
            // 5.获取相关参数的值
            driver = props.getProperty("driver");
            url = props.getProperty("url");
            username = props.getProperty("username");
            password = props.getProperty("password");
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    /**
     * 获取连接方法
     */
    public static Connection getConnection() {
        Connection conn = null;
        try {
            Class.forName(driver);
            conn = DriverManager.getConnection(url, username, password);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return conn;
    }

    public static void release(Connection conn, PreparedStatement pstmt, ResultSet rs) {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (pstmt != null) {
            try {
                pstmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

    }
}

猜你喜欢

转载自www.cnblogs.com/zengcongcong/p/10366307.html
今日推荐