1.4JDBC

作者: 那个菜鸡姓朱 | 来源:发表于2020-02-02 16:52 被阅读0次

    JDBC

    1.概念:Java Database Connectivity Java数据库连接,Java语言操作数据库

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

    2.快速入门:
    步骤:
    1)导入驱动jar包 mysql-connector-java-版本号-bin.jar
    2)注册驱动
    3)获取数据库连接对象Connetion
    4)定义sql
    5)获取执行sql语句的对象Statement
    6)执行sql,接收返回结果
    7)处理结果
    8)释放资源

    3.详解各个对象:
    1.DriverManager:驱动管理对象
    功能:
    1)注册驱动:告诉程序该使用哪一个数据库驱动jar

    2)获取数据库连接
    方法:static Connection getConnection (String url,String user,String password)
    参数:
    url:指定连接的路径
    语法:jdbc:mysql://ip地址:端口号/数据库名称
    注:如果连接的是本机的mysql,并且mysql默认端口号是3306,则url可以简写为:jdbc:mysql:///数据库名称
    user:用户名
    password:密码

    2.Connection:数据库连接对象
    功能:
    1)获取执行sql的对象
    Statement createStatement()
    PreparedStatement preparestatement (String sql)

    2)管理事务
    开启事务:setAutoCommit(boolean autocommit):调用该方法设置参数为false,即开启事务
    提交事务:commit()
    回滚事务:rollback()

    3.Statement :执行sql对象
    执行sql
    ①boolean execute(String sql):可以任意执行sql (了解)
    ②int executeUpdate(String sql):执行DML(insert、update、delete)语句、DDL(create、alter、drop)语句
    返回值:影响的行数
    ③ResultSet executeQuery(String sql):执行DQL(select)语句

    4.ResultSet:结果集对象,封装查询结果
    boolean next():游标向下移动一行,判断当前行是否是最后一行末尾(是否有数据),如果是则返回false,如果不是则返回true。
    getxxx:获取数据 (xxx代表数据类型)
    1)int:代表的编号,从1开始 如:getString(1)
    2)String :代表列名称 如:getDouble(“balance”)

    5.PreparedStatement:执行sql的对象
    1)sql注入问题:在拼接sql时,有一些sql的特殊关键字参与字符串的拼接,会造成安全性的问题
    ①输入用户随便,输入密码:a' or 'a'='a'
    ②sql:select * from user where username =''fhds' and password ='a' or 'a' ='a'
    2)解决sql注入问题:使用PreparedStatement对象来解决
    3)预编译的SQL:参数使用?作为占位符
    4)步骤:
    1)导入驱动jar包 mysql-connector-java-版本号-bin.jar
    2)注册驱动
    3)获取数据库连接对象Connetion
    4)定义sql
    注意:sql的参数使用?作为占位符。如:select * from user where username = ? and password = ?;
    5)获取执行sql语句的对象PreparedStatement Connection.preparedStatement (String sql)
    6)给?赋值:
    方法setXxx(参数1,参数2)
    参数1:?的位置编号 从1开始
    参数2:?的值
    7)执行sql,接收返回结果
    8)处理结果
    9)释放资源

    抽取JDBC工具类:JDBCUtils(简写)

    JDBC控制事务:

    1.事务:一个包含多个步骤的业务操作。如果这个业务操作被事务管理,则这多个步骤要么同时成功,要么同时失败。
    2.操作:
    1)开启事务
    2)提交事务
    3)回滚事务
    3.使用Connection对象来管理事务
    1)开启事务:setAutoCommit(boolean autocommit):调用该方法设置参数false,即开启事务(在执行sql之前开启事务)
    2)提交事务commit():当所有sql都执行完后再提交事务
    3)回滚事务rollback():在catch中回滚事务

    数据库连接池

    1.概念:其实就是一个容器(集合),存放数据库连接的容器。
    注:当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归还给容器。

    2.好处:节约资源、用户访问高效

    3.实现:
    1)标准接口:DataSource javax.sql包下的
    方法:
    获取连接getConnection()
    归还连接Connection.close()。如果连接对象Connection是从连接池中获取的,那么调用Connection.close()方法,则不会再关闭连接了。而是归还连接

    2)一般我们不去实现它,由数据库厂商来实现
    ①C3P0:数据库连接池技术
    ②Druid:数据库连接池实现技术,由阿里巴巴提供

    4.C3P0:数据库连接池技术
    步骤:
    1)导入jar包c3p0-版本号-jar mchange-commons-java-版本号-jar
    2)定义配置文件:
    名称:c3p0.properties 或者c3p0-config.xml
    路径:直接将文件放在src目录下即可。
    3)创建核心对象 数据库连接池对象 ComboPooledDataSource
    4)获取连接:getConnection

    5.Druid:数据库连接池实现技术,由阿里巴巴提供
    ①步骤:
    1)导入jar包druid-版本号-jar
    2)定义配置文件:
    名称:properties形式的
    路径:可以叫任意名字,可以放任意目录下
    3)加载配置文件properties
    4)获取数据库连接池对象:通过工厂来获取DruidDataSourceFactory
    5)获取连接:getConnection

    ②定义工具类
    1)定义一个类 JDBCUtills
    2)提供静态代码块加载配置文件,初始化连接池对象
    3)提供方法:
    1.获取连接方法:通过数据库连接池获取连接
    2.释放资源
    3.获取连接池的方法

    Spring JDBC

    Spring框架对JDBC的简单封装。提供了一个JDBCTemplate对象简化JDBC的开发

    步骤:
    1)导入jar包
    2)创建jdbcTemplate对象。依赖于数据源DataSource
    JDBCTemplate template=new JdbcTemplate(ds);
    3)调用JdbcTemplate的方法来完成CRUD的操作
    update():执行DML语句。增、删、改语句

    queryForMap():查询结果将结果集封装为map集合
    注意:这个方法查询的结果集只有一条记录;并且将列名作为key,将值作为value,将这条记录封装为一个map集合。

    queryForList():查询结果将结果集封装为list集合
    注意:这个方法将每一条记录封装为一个map集合,再将map集合装载到list集合中。

    query():查询结果,将结果封装为JavaBean对象
    注意:
    query的参数:RowMapper
    一般我们使用BeanPropertyRowMapper实现类,可以完成数据到JavaBean的自动封装。
    new BeanPropertyRowMapper<类型>(类型,class)

    queryForObject:查询结果,将结果封装为对象
    注意:一般用于聚合函数的查询

    相关文章

      网友评论

          本文标题:1.4JDBC

          本文链接:https://www.haomeiwen.com/subject/iacfxhtx.html