《JavaEE》第四周day1学习笔记-JDBC

一、JDBC

(一)概念


JDBC:Java DataBase Connectivity,Java数据库连接;
Java连接数据库的驱动接口,由数据库厂商负责实现,使用时需要导入相应厂商的jar包。
在这里插入图片描述

(二)JDBC API


常用的JDBC API包含

1.DriverManager类

用于管理一组JDBC驱动程序的基本服务。

2.Connection接口

与特定数据库的连接(会话)。 执行SQL语句并在连接的上下文中返回结果。

3.ResultSet接口

表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。

4.Statement接口

用于执行静态SQL语句并返回其生成的结果的对象。

(三)JDBC基本步骤(八步)


1.导入数据库驱动jar包

IDEA:Project Structure→Modules→Dependencies→“+”→选择jar包→【Apply】。

2.注册驱动

方法1:通过反射(Class.forName)实现
方法2:通过驱动管理器(DriverManager)的注册驱动(registerDriver)方法实现,传参为MySQL的驱动类(Driver()))。

3.获取连接对象

创建Connection的对象,通过驱动管理器的获取连接(getConnection)方法返回一个连接对象,传参为(数据库URL、用户名、密码)。

4.构建SQL语句

SQL语句可以在数据库可视化工具中测试,再放入代码中,避免非Java错误。

5.创建封装SQL语句的容器(Statement、PreparedStatement)

方法1:通过连接对象的createStatement方法创建容器,传参为空;
方法2:通过连接对象的prepareStatement方法创建预编译容器,传参为含?的SQL语句;
在获取结果集之前需要通过预编译容器对象的set方法实现?与变量之间的转换关系!
注意:preparedStatement可以提升效率,防止SQL注入攻击;preparedStatement不再匹配sql中的变量!!!

6.执行容器,并获取返回结果

类型1:执行容器对象的execute方法,传参为SQL语句;
类型2:创建整型对象,接收容器对象executeUpdate的影响值(整型),Statement传参为SQL语句,PreparedStatement传参为空;
类型3:创建ResultSet对象,接收容器对象executeQuery的结果集,Statement传参为SQL语句,PreparedStatement传参为空;
注意:切勿忘记传参为空的语句

7.处理结果

当存在ResultSet对象(结果集)时,通过next()方法实现从起始位置至结束位置的遍历,并通过get(字段号)方法实现数据的提取。

8.释放资源

结果集、SQL容器、数据库连接均需要释放。

(四)JDBC工具类


1.连接类
将【注册驱动】、【获取连接对象】以及【释放资源】封装至数据库连接类
注册驱动:通过调用配置类对象方法实现参数输入;
获取连接对象:返回一个连接对象;
释放资源:判断结果集、SQL容器、数据库连接是否为空,否则调用.close方法关闭对象。
2.配置类
参数传递通过Properties对象的load方法,获取“类名.class.getClassLoader().getResourceAsStream(.properties文件)”的返回输入流(InputStream),得到Properties对象,通过Properties对象的getProperty方法实现查询。

public class DBconfig {
    private static String dbConfigFile = "conf.properties";
    private static Properties props=null;
    static {
        props = new Properties();
        InputStream is =null;
        try {
            is= DBconfig.class.getClassLoader().getResourceAsStream(dbConfigFile);
            props.load(is);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if(is!=null) is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    /**
     * 根据键获取值
     * @param key 键
     * @return
     */
    public static String getValue(String key){
        return props.getProperty(key);
    }
}

发布了31 篇原创文章 · 获赞 0 · 访问量 814

猜你喜欢

转载自blog.csdn.net/u010761121/article/details/103466088