Java之数据库

一、概述

1.1 什么是数据库

  用于存储和管理数据库的仓库

1.2 数据库的特点

  1. 持久化存储数据,其实数据库就是一个文件系统
  2. 方便存储和管理数据
  3. 使用统一的方式操作数据库

1.3 分类

  1. 关系型数据库
    通过表和表之间,行和列之间的关系进行数据的存储
  2. 非关系型数据库
    用键值对的方式存储

二、数据库操作

2.1 注意事项

  1. 操作数据库>操作数据库中的表>操作数据库中表的数据,mysql数据库的关键字不区分大小写
  2. char 类型是固定长度的,根据定义的字符串长度分配足够的空间,适用于密码,性别之类的,耗费空间查询效率高
  3. varchar类型是可变长度的,只使用传递的字符串所需的空间大小,适用于有长度变化的字符串,节省空间查询效率低
  4. 删除结构类用drop,删除具体信息用delete

2.2 操作语言

  Structured Query Language:结构化查询语言。其实就是定义了操作所有关系型数据库的规则。每一种数据库的操作方式不完全相同。称为“方言”。

  1. DDL(Data Definition Language)数据定义语言
  2. DML(Data Manipulation Language)数据操作语言
  3. DQL(Data Query Language)数据查询语言
  4. DCL(Data Control Language)数据控制语言

2.3 范式

2.3.1 为什么需要数据规范化
  1. 信息重复
  2. 更新异常
  3. 插入异常
  4. 删除异常
2.3.2 三大范式
第一范式:要求数据库表的每一列都是不可分割的原子数据项。即原子性,保证每一列不可再分,不会出现歧义。
第二范式:必须满足第一范式。每张表只描述一件事
第三范式:必须满足第一、二范式。需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。

【注意事项】在实际的商业应用中,规范化与性能互相矛盾。比如在阿里规定,关联查询中的表不得超过三张。

  1. 考虑商业化需求和目标,(成本、用户体验)数据库的性能更加中重要
  2. 故意给某些表增加一些冗余字段,使多表查询变为单表查询
  3. 故意增加一些计算列

二、JDBC

  早期SUN公司的天才们想编写一套可以连接天下所有数据库的API,但是当他们刚刚开始时就发现这是不可完成的任务,因为各个厂商的数据库服务器差异太大了。后来SUN开始与数据库厂商们讨论,最终得出的结论是,由SUN提供一套访问数据库的规范(就是一组接口),并提供连接数据库的协议标准,然后各个数据库厂商会遵循SUN的规范提供一套访问自己公司的数据库服务器的API出现。SUN提供的规范命名为JDBC,而各个厂商提供的,遵循了JDBC规范的,可以访问自己数据库的API被称之为驱动!
在这里插入图片描述
学习JDBC需要掌握俩个包,一个是java.sql和javax.sql,另外一个是数据库驱动包

2.1 JDBC连接步骤

  1. 加载数据库驱动
  2. 准备url等连接信息
    【注:由于sql8的新特性,url中要加时区信息才可以】
  3. 通过驱动对象连接数据库
  4. 创建执行数据库语句的对象
  5. sql语句
  6. 执行sql语句
  7. 关闭资源
package com.ds.lesson01;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class jdbcDemo {
    public static void main(String[] args) throws Exception {
//        1.加载数据库驱动类
        Class.forName("com.mysql.jdbc.Driver");
//        2.定义数据库连接信息
        String url="jdbc:mysql://localhost:3306/ssmbuild?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT";
        String username = "root";
        String password = "123456";
//        3.有了驱动类和数据库的基本信息,通过驱动管理的连接对象来连接对应的数据库
        Connection connection = DriverManager.getConnection(url, username, password);
//       4.通过连接对象来创建执行sql语句的对象
        Statement statement = connection.createStatement();
//        5.创建数据库执行语句
        String sql = "SELECT * FROM books";
//        6.执行sql
        ResultSet resultSet = statement.executeQuery(sql);
        while (resultSet.next()){
            System.out.println("id:"+resultSet.getObject("bookID"));
        }
//        7.释放资源
        resultSet.close();
        statement.close();
        connection.close();

    }
}	

2.3sql注入

在输入的用户名或者密码中拼接某种字符串,来获取数据库信息。这是Statement statement对象的缺点。解决方法就是使用PreparedStatement的对象来防止sql注入且效率更高。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值