数据库设计、JDBC、数据库连接池

这篇具有很好参考价值的文章主要介绍了数据库设计、JDBC、数据库连接池。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数据库设计

数据库设计概念

  • 数据库设计就是根据业务 系统的具体需求,结合我们所选用的DBMS,为这个业务系统构造出最优的数据存储模型。
  • 建立数据库中的表结构以及表与表之间的关联关系的过程。
  • 有哪些表?表里有哪些字段?表和表之间有什么关系?

数据库设计的步骤

  1. 需求分析(数据是什么?数据具有哪些属性?数据与属性的特点是什么)
  2. 逻辑分析(通过ER图对数据库进行逻辑建模,不需要考虑我们所选用的数据库管理系统)
  3. 物理设计(根据数据库自身的特点把逻辑设计转换为物理设计)
  4. 维护设计(1. 对新的需求进行建表;2. 表优化)

JDBC

 概述

概念

  • JDBC就是使用Java语言操作关系型数据库的一套API
  • 全称:( Java DataBase Connectivity ) Java数据库连接

本质

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

好处

  • 各数据库厂商使用相同的接口,Java代码不需要针对不同数据库分别开发
  • 可随时替换底层数据库,访问数据库的Java代码基本不变

DriverManager

        用来获取连接

静态方法
Connection getconnection (string url, String user, string password)

1. url: 连接路径

        语法:jdbc:mysq://ip地址(域名):端口号/数据库名称?参数键值对1&参数键值对2....

  • 如果连接的是本机mysq|服务器,并且mysq|服务默认端口是3306,则url可以简写为:jdbc:mysq///数据库名称?参数键值对
  • 以参数键值对的方式配置useSSL=false参数,禁用安全连接方式,解决警告提示

2. user: 用户名

3. password: 密码

Connection

        用来获取执行SQL的对象、管理事务

获取执行SQL的对象

方法 说明
Statement createStatement() 普通执行SQL对象
PreparedStatement prepareStatement(sq|) 预编译SQL的执行SQL对象:防止SQL注入
CallableStatement prepareCall(sq|) 执行存储过程的对象(不常用)

事务管理

MySQL事务管理

BEGIN; / START TRANSACTION; 开启事务
COMMIT; 提交事务
ROLL BACK; 回滚事务

         MySQL默认自动提交事务

JDBC事务管理:Connection接口中定义了3个对应的方法

方法 说明
setAutoCommit(boolean autoCommit) 开启事务。true为自动提交事务; false为手动提交事务,即为开启事务
commit() 提交事务
rollback() 回滚事务

Statement

        用来执行SQL语句

方法 说明
int executeUpdate(sql) 执行DML、DDL语句。返回值:(1) DML语句影响的行数(2) DDL语句执行后,执行成功也可能返回0
ResultSet executeQuery(sql) 执行DQL语句。返回值:ResultSet 结果集对象

ResultSet

        用来封装DQL查询语句的结果

 boolean next()

        判断当前行是否为有效行,并将光标从当前位置向前移动一行。

        返回值:true为有效行,当前行有数据;false为无效行,当前行没有数据

XXX getXxx(参数)

        获取数据

        XXX: 数据类型;如: int getlnt(参数); String getString(参数)

        参数:int为列的编号,从1开始;String为列的名称

PreparedStatement

        可以用来预编译SQL语句并执行预防SQL注入问题。

        SQL注入是通过操作输入来修改事先定义好的SQL语句,用以达到执行代码对服务器进行攻击的方法。

防SQL注入

1.获取PreparedStatement对象

//SQL语句中的参数值,使用?占位符替代
String sql = "select * from user where username = ? and password = ?";
//通过Connection对象获取,并传入对应的sql语句
PreparedStatement pstmt = conn.prepareStatement(sql);

2.设置参数值(给?赋值)

PreparedStatement对象: setXxx(参数1, 参数2)

        Xxx:数据类型;如setInt (参数1,参数2)

        参数:

                参数1:?的位置编号,从1开始

                参数2:?的值

3.执行SQL

executeUpdate(); / executeQuery(); 不需要再传递sql

预编译

PreparedStatement预编译功能开启:useServerPrepStmts = trud

配置MySQL执行日志(重启mysq|服务后生效)

数据库设计、JDBC、数据库连接池,JavaWeb,mysql,java

PreparedStatement 原理:

        1.在获取PreparedStatement对象时, 将sq|语句发送给mysq|服务器进行检查,编译(这些步骤很耗时)

        2.执行时就不用再进行这些步骤了 ,速度更快

        3.如果sq|模板一样,则只需要进行一次检查、编译

数据库连接池

 简介

        数据库连接池是个容器,负责分配、管理数据库连接(Connection)

        它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;

        释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引|起的数据库连接遗漏

        好处:资源重用、提升系统响应速度、避免数据库连接遗漏。

 实现 

标准接口: DataSource

        官方(SUN)提供的数据库连接池标准接口,由第三方组织实现此接口

        功能:获取连接

                Connection getConnection()

常见的数据库连接池: .

        DBCP

        C3P0

        Druid

Druid(德鲁伊)

        Druid连接池是阿里巴巴开源的数据库连接池项目

        功能强大,性能优秀,是Java语言最好的数据库连接池之一

1、导入jar包

2、定义配置文件

数据库设计、JDBC、数据库连接池,JavaWeb,mysql,java

3、加载配置文件

Properties prop = new Properties();
prop.load(new FileInputStream("src/druid.properties")); 

4、获取数据库连接池对象

DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);

5、获取数据库连接

Connection connection = dataSource.getConnection();

Druid 基本配置参数介绍*

  • name :数据源名称

    如果存在多个数据源,监控的时候可以通过名字来区分开来

    如果没有配置,将会生成一个名字,格式是"DataSource-"+System.identityHashCode(this)

  • jdbcUrl :连接数据库的 url,不同数据库不一样
  • username :连接数据库的用户名
  • password :连接数据库的密码
  • driverClassName :数据库驱动类

    可配可不配,如果不配置 druid 会根据 url 自动识别 dbType,然后选择相应的 driverClassName(建议配置下)

  • initialSize :初始化时建立物理连接的个数,初始化发生在显示调用 init 方法,或者第一次 getConnection 时
  • maxActive :最大连接池数量
  • maxIdle :已经不再使用,配置了也没效果
  • minIdle :最小连接池数量
  • maxWait :获取连接时最大等待时间,单位毫秒

    配置了 maxWait 之后,缺省启用公平锁,并发效率会有所下降(可以通过配置 useUnfairLock=true 使用非公平锁)

  • poolPreparedStatements :是否缓存 preparedStatement,即 PsCache

    PSCache 对支持游标的数据库性能提升巨大,比如说 oracle,而 mysql 则建议关闭

  • maxOpenPreparedStatements :要启用 PSCache,必须配置大于0

    当大于 0 时,poolPreparedStatements 自动触发修改为 true

    在 Druid 中,不会存在 Oracle 下 PSCache 占用内存过多的问题,可以把这个数值配置大一点,比如 100

  • validationQuery :用来检测连接是否有效的 sql,要求是一个查询语句

    如果 validationQuery 为null,testOnBorrow、testOnReturn 、testWhileIdle 都不会起作用

  • testOnBorrow :申请连接时执行 validationQuery 检测连接是否有效,做了这个配置会降低性能
  • testOnReturn :归还连接时执行 validationQuery 检测连接是否有效,做了这个配置会降低性能
  • testWhileIdle :建议配置为 true,不影响性能,并且保证安全性

    申请连接的时候检测,如果空闲时间大于 timeBetweenEvictionRunMills,执行 validationQuery 检测连接是否有效

  • timeBetweenEvictionRunMillis :间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒

    • Destory 线程会检测连接的间隔时间
    • testWhileIdle 的判断依据(详见 testWhileIdele 属性的说明)
  • numTestsPerEvictionRun :废弃,一个 DruidDataSource 只支持一个 EvicationRun
  • minEvictableIdleTimeMillis :一个连接在池中最小生存的时间,单位是毫秒
  • connectionInitSqls :物理连接初始化的时候执行 sql
  • exceptionSorter :当数据库抛出一些不可恢复的异常时,抛弃连接
  • filters :通过别名的方式配置扩展插件,属性类型是字符串

    常用的插件有:监控统计用的 filter(stat:监控统计,log:4:日志记录,wall:防御sql注入)文章来源地址https://www.toymoban.com/news/detail-827844.html

  • proxyFilters :类型是 List<com.alibaba.druid,filter.Filter>,如果同时配置 filter 和 proxyFilters,是组合关系(并非)

到了这里,关于数据库设计、JDBC、数据库连接池的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java代码实现,利用JDBC接口-连接Mysql数据库

    1、JDBC本质上是一个接口,也就是java语言操作数据库的一套API(应用程序编程接口), 接口就规则,也就是sun公司创建了一个jdbc接口,各个sql(数据库管理系统)去实现接口提供jar包。其优点JDBC不是指单一操作某一个数据库。各个厂商使用相同的接口。不同的sql厂家实现

    2024年02月09日
    浏览(71)
  • 【Java】IntelliJ IDEA使用JDBC连接MySQL数据库并写入数据

    在 IntelliJ IDEA 中连接 MySQL 数据库并将数据存储在数据表中,使用 Java 和 JDBC(Java Database Connectivity)实现。 下载并安装 IntelliJ IDEA 下载并安装 MySQL 数据库 下载 MySQL Connector/J 驱动程序(JDBC 驱动程序) 使用 Navicat 创建一个 MySQL 数据库 打开 IntelliJ IDEA。 选择 \\\"File\\\"→ “New” →

    2024年02月05日
    浏览(85)
  • java中连接数据库com.mysql.jdbc.Driver和com.mysql.cj.jdbc.Driver的区别?

    com.mysql.jdbc.Driver 和 com.mysql.cj.jdbc.Driver 是MySQL数据库连接驱动的不同版本。 com.mysql.jdbc.Driver :这是旧版的MySQL JDBC驱动(版本5.x)。它已经过时,不再推荐使用。如果您使用较旧的MySQL版本(如MySQL 5.7及以下),可以考虑使用此驱动。但请注意,该驱动在MySQL 8.0及更高版本上可

    2024年02月14日
    浏览(67)
  • java通过JDBC连接mysql8.0数据库,并对数据库中的表进行增删改查操作

    目录 一、JDBC简介 二、添加依赖 三、JDBC操作数据库的步骤 四、JDBC操作数据库——增删改查 (一)新增数据 (二)删除数据 (三)修改数据 (四)查询数据 (五)多表连接查询         Java数据库连接,(Java Database Connectivity,简称JDBC)是java语言中用来规范客户端程序如何来访问数

    2024年02月03日
    浏览(149)
  • JDBC 技术 | Java连接MySQL数据库(四万字零基础保姆级超全详解)

    管他啥是啥,看就完了!如果觉得博主写的不错,可以点赞关注支持一下博主哦!有什么地方存在不足或者错误的,烦请各位大佬在评论区指正。万分感谢!! 本文结合了韩顺平零基础学java,黑马程序员零基础学 JavaWeb,等多个视频的相关知识内容整理而来。花费了很多很多

    2024年02月05日
    浏览(69)
  • 《校园宿舍管理系统》之数据库程序设计/GUI/java/eclipse/MySQL/JDBC

    讲解视频链接:私信发! 源码:私信! 设计题目:          校园宿舍管理系统         班    级:                                               组    号:                  第一组                   成    员:                                

    2024年02月05日
    浏览(55)
  • 数据库设计、JDBC、数据库连接池

    数据库设计概念 数据库设计就是根据业务 系统的具体需求,结合我们所选用的DBMS,为这个业务系统构造出最优的数据存储模型。 建立数据库中的表结构以及表与表之间的关联关系的过程。 有哪些表?表里有哪些字段?表和表之间有什么关系? 数据库设计的步骤 需求分析(数据是

    2024年02月19日
    浏览(49)
  • MySQL数据库,JDBC连接数据库操作流程详细介绍

    在学完 MySQL 和 Java 后,我们通常会尝试使用 Java编译器 连接 MySQL数据库,从而达到使用编译器来操作数据库的效果。连接的这个过程会用 JDBC 相关知识,因此我把 JDBC 包的下载及导入流程,以及 JDBC 的使用流程整理下来分享给大家。 目录 1. 啥是JDBC? 2. JDBC依赖包 2.1 依赖包

    2024年02月06日
    浏览(104)
  • JDBC连接数据库----Mysql七大步骤详解

             1、什么是jdbc?         JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发者能够编

    2023年04月12日
    浏览(97)
  • MySQL | JDBC连接数据库详细教程【全程干货】

    JDBC,即 Java Database Connectivity ,java数据库连接。是一种用于执行SQL语句的Java API,它是Java中的数据库连接规范。这个API由 java.sql.*,javax.sql.* 包中的一些类和接口组成,它为Java开发人员操作数据库提供了一个 标准的API ,可以为多种关系数据库提供统一访问 JDBC 为多种关系数据

    2024年02月06日
    浏览(78)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包