Java基础之MySQL数据库与JDBC

来源:互联网 发布:网络拓扑图绘制 编辑:程序博客网 时间:2024/06/05 05:41

一、数据库

     DBMS         数据库管理系统

                     是由多个程序构成的专门用来管理大量数据的计算机系统

   Server       提供数据存储、检索、计算等服务的网络程序+系统服务

   Notifier     通知应用

 

管理端C

 Workbench  英文、图形化的数据库管理客户端

 Navicat     中文、图形化

 Shell        英文、命令行字符界面

phpAdmin    具备管理MySQL数据库的功能  BS架构

 

 

开发工具包

    Connector  JAVA使用数据驱动(连接工具)

     文档

     示例代码

 

二、数据分类

      关系型数据库

          MySQL

          Oracle

SQLServer

           用来存放规则的数据,通常要支持事务(在商业交易环境中通过事物可保证数据的正确性)

能够支持的数据量,事务数据百万级,非事务型数据千万

性能和速度、并发能力:一般

         

 

     NoSQL数据库

           Redis              key-value     内存       速度非常快

           Hbase             key-value        大数据存储

           MonggoDB       文档型(json对象)  千万级    速度非常快


 

 

存储一个通讯录需要考虑的内容

     姓名:长度?

     性别:类型?

     年龄:类型?如果用整数,随着时间推移怎么增加

             出生年月日

             出生年份

     联系方式:

           手机号:一般用字符串,国家号+号码

           邮箱:长度?

           QQ:一般用字符串

           微信:

           固话:区号+ 号码

 

     地址:

          很多时候需要多个(户籍、现居)

          省、市、区县、乡镇、村街道、门牌号

   

     专业:

         学校、院系、专业、班级

    

      婚姻状况:

           未婚(单身)

 

三、设计数据表

    数据分析

        识别数据对象(刚开始比较粗略):如学生信息

        分解数据属性

               1.最好的方法是讨论

                     1)和项目组内部的人讨论

                     2)和客户讨论(需求调研时详细询问)

               2.分解结果详细下来,准备进一步识别数据对象和第二级分解                  

                    3.分解时注意细节

                             1) 类型是什么

                             2)用简单类型能否表示

                             3) 如果是复杂类型的话,初步分解

                             4)关于长度

                                  I.随时间或环境变化是否会改变  

                                  II.值得取值范围    

                                  III.会不会有无值情况

                                  IV.默认值是什么

                    4.分解属性和识别数据对象需要反复多次

 

                    创建表

                命名规范:表名及字段名全部小写,使用单数,单词之间用下划线分隔

                

根据需求合理设计字段属性

        填充数据进行功能验证

        能够方便地查询出所需要数据结果(连接多个表才能得到的最复杂的数据)

填充更多数据进行性能验证

        填充指定量的数据,并且注意数据的质量,验证CRUD的性能

 

 

 

四、数据的基本字段

  

字段名

类型

长度

备注

说明

id

int

 

自增、主键

自动生成的数据唯一标识

description/desc

varchar

50-200

可以是null

用来描述数据,由用户填写

remark

varchar

50

可以是null

让管理员或数据操作员使用的,隐秘描述信息,用户看不到。备注

ip

varchar

50

可以是null

记录操作人的ip地址

creater

int

 

 

记录创建人的id

creater_time

timestamp

 

 

记录数据创建时间

updater

int

 

 

记录数据最后修改人。如果需要记录每一次的修改和修改时间,则需要另建立表

update_time

timestamp

 

 

记录数据最后修改时间

status

tinyint/int

 

-2:删除

0:待审

1:通过审核未激活

2:正常

用来表示数据的状态变化或者逻辑删除

is_system

bit

 

默认值0

is_system=1的数据时系统内置的数据,是系统自带的数据。比如系统中的第一个用户admin/root,通常会设置is_system=1.这种数据不能删除

 

 

 

自增:向表中插入新数据时,不需插入,而是会自动生成。规则是本列最大值+1(通常)

主关键字(主键,primary key

一、是被挑选出来,作表的行的一标识的候选关键字。一

二、个表只有一个主关键字。主关键字又可以称为主键。

三、主键可以由一个字段,也可以由多个字段组成,分别成为单字段主键或多字段主键。

四、如果数据字段有一个字段可确保唯一性并且是整数或比较短的字符串也可以充当主键

五、有一些表没有id,也可以使用2个列甚至多个列组合作为主键,只要保证组合的唯一性即可

六、主键一定有索引功能的。通过主键查找数据速度很快

 


五、基本的SQL语句

逻辑删除

业务已经不需要该数据,系统中也看不到,但数据库中并没有删除它

系统在筛选数据时故意把它们排除掉了(status=-2

 

 

查询所有数据(返回所有列)

     SELECT*FROM表名

 

返回指定列

  SELECT  列名,列名,`列名`  FROM  表名

 

 

 

 

-- 空格:注释SQL语句

 

 

 

 

插入数据

   INSERT INTO 表名(列名,列名,列名)VALUES(值,值,值)

 

 

 

 

 

查询数据

SELECT * FROM  表名 WHERE逻辑表达式

STATUS <> 2           STATUS不等于2

STATUS!=2            STATUS不等于2

STATUS>2             STATUS大于2

 

 

 

 

逻辑运算符

   

AND

OR

需要时加()

 

 

更新数据

UPDATE 表名  SET列名=值,列名=值,列名=WHERE逻辑表达式

根据WHERE后面的逻辑表达式在表内进行检索,然后替换成SET后面的内容

 

 

 

删除数据(删除后无法恢复)

DELETE   FROM 表名

WHERE  逻辑表达式   OR  逻辑表达式

删除id=6id=7两个信息

 

 

IN列表

SELECT * FROM 表名 WHERE ID IN (6,7)

括号里面的代表着删除第六条和第七条信息

 

 

 

 

查询数据条数

 

 

 

-- SELECT student_id,`name`,is_male,mobile,`status` FROM student

--

--  INSERT INTO student(`name`,is_male,mobile,`status`)  

--  VALUES ('赵丽颖',1,'234hjhh35',0)

--

-- SELECT * FROM student WHERE `status` !=2

--

-- SELECT * FROM student WHERE `status` <>2

-- --

-- SELECT * FROM student WHERE `status` > 0

--

-- UPDATE student SET is_male = 0 WHERE student_id = 3;

-- UPDATE  student SET is_male = 0 WHERE `name` = '李易峰';

 

 

-- DELETE FROM student

-- WHERE student_id = 6 OR student_id = 7

--

--

-- DELETE FROM student

-- WHERE student_id IN (6,7)

--

-- SELECT count(1) FROM student;

-- SELECT count(*) FROM student;

-- SELECT count(student_id) FROM student;

 

-- SELECT * FROM student WHERE `name` = '李易峰'

 

-- INSERT INTO student(`name`,is_male,mobile ,`status`)

-- VALUES ('李浩',1,'34325435',2)

--

-- DELETE FROM student

-- WHERE student_id = 10

--

-- DELETE FROM student

-- WHERE student_id IN(5,9)

-- --

-- DELETE FROM student

-- WHERE student_id = 8 OR student_id = 11

 

六、JDBC

1.   JDBCJDK中连接和操作数据的类的统称

2. 是一种用于执行SQL语句Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。

3. JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,JDBC实现了所有这些面向标准的目标并且具有简单、严格类型定义且高性能实现的接口。

4. 它包含java.sql包下的多个类和接口

5. 定义了Connection:数据库连接、DriverManager:数据库驱动管理、Statement: 定义了SQL语句及执行SQL语句的方法、ResultSet  :数据查询结果

 

上面的JDBC类或接口并没有提供完整数据库连接和操作能力。

JDBC的具体实现是由各个数据库厂商提供的,通常在安装数据库时可以获取到这个数据库的JDBC实现(驱动包)

 

这样设计的原因:

  1.当时SUN没有数据库产品,主流的数据库都是其他厂商的产品

2.JDK为了统一数据库访问的代码,定义了JDBC的基本类和接口,由数据库厂商实现(如果不提供提议的数据库访问类,则就会导致数据访问的类变得混乱,没有标准)

3.写代码时不会在代码中直接使用厂商提供的类,而是使用JDK使用的类,这就导致厂商提供的类不会被加载

4.所有要使用Class.forName(驱动类的名字),加载驱动类。驱动类加载时,静态初始化代码就会执行,驱动相关的信息就可以注册到DriverMannger等类中