Java笔记(11)

day1 -- day3 XML Java基础加强

day4 -- day7 Servlet编程

day8 -- day10 JSP 综合案例

day11 -- day16 MySQL 数据库 练习SQL语句 JDBC编程

关系化数据模型?

常见关系化数据库有哪些?

收费产品

免费产品

Microsoft SQL Server : 微软公司产品,中等规模数据库 收费产品,运行在windows平台上 --- .net平台+SQLServer进行开发

Oracle :甲骨文公司产品,大型商业数据层,收费 运行在任何操作系统上 windows linux --- Oracle收购sun(Java) ---- Java +  Oracle

MySQL :最初是一个开源免费数据库产品 ,中小型数据库 ---- 互联网行业主流数据库  Mysql被Oracle收购后,Mysql6.0开始推出收费版本---- 企业主流5.X

SYBASE:收费,中型数据库,银行证券 ----- PowerDesigner PD (数据库设计建模软件)

HSQL : 迷你数据库 开源免费,纯java开发 ----- 被java开源框架内置使用

SQLITE : 嵌入式开发,Android 内部主要数据库 ---- 开源免费

DB2 : IBM产品 大型数据库 ---- BEA 被Oracle weblogic+ Oracle  ----- websphere + DB2

下载Mysql ----- Oracle网站、开源社区下载

版本:5.X版本(5.0 、5.5 )

安装MySQL

卸载

1、在控制面板 卸载mysql程序

2、手动删除mysql目录

安装

1、安装mysql ---- 修改安装路径

2、安装结束后,一定要对mysql进行配置

修改mysql默认字符集 Latin1(就是ISO-8859-1) ---- 设置utf-8

将mysql安装window服务 ---- 通过服务启动mysql数据库

将mysql/bin 放入环境变量path  ----- 勾选

设置mysql超级管理员 root 用户密码

3、安装mysql后,通过运行 services.msc

MySQL服务启动,mysql数据库启动了

* 在每次使用mysql之前必须启动mysql

4、在cmd创建 mysql -? 如果命令识别,证明mysql/bin 放入环境变量path

5、连接mysql数据 :

C:\Documents and Settings\seawind>mysql -u root -p

Enter password: ***

将root密码修改 abc

1、停止mysql服务

2、新建cmd窗口 输入 mysqld-nt --skip-grant-tables ----- 窗口阻塞,不要关闭

3、新建窗口登陆mysql 不需要输入密码

use mysql

update user set password = password(‘abc‘) where user=‘root‘ ;

4、关闭mysql服务窗口 ---- 打开任务管理器关闭mysqld-nt.exe

5、重启mysql服务

安装mysql后,自带两个数据库 mysql、test

mysql 存放数据核心数据 ----- 用户、权限 ...

test 练习数据库, 默认该数据库空的

mysql数据库组成

1、在mysql数据库软件内部创建使用多个数据库 database

2、在每一个数据库database中创建使用多个数据表 table

3、table存放数据记录,一条数据记录,对应java程序中一个对象

4、在数据库中存在很多用户,用户根据相应权限操作数据库或者数据表

SQL 结构化查询语言

1、非过程性语言 ----- 每一条SQL语句都是独立执行的,没有先后依赖关系

int a = 10;

int b = 20;

int c = a+b;

print(c) ;

上面程序典型过程性语言

2、官方提供数据库标准语言 ---- 任何数据库都必须支持SQL语法

* 每个数据都应该提供sql扩展,增强sql过程化编程

SQL分类:数据定义语言 DDL 、数据操纵语言 DML 、数据控制语言 DCL

有人将select查询语句自成一类 数据查询语言 DQL

DDL:数据定义语言,定义、修改、删除 数据库内部结构 ---- 例如 : 对数据库、数据表 以上操作

DML:数据操纵语言 ,对数据表记录 增加、删除、修改

DCL:数据控制语言 用户授权、if 、while、事务管理

DQL:数据查询语言 select查询语句

SQL语句使用:数据库操作SQL 、数据表操作SQL 、数据记录操作SQL

第一部分:数据库 SQL

1、数据库创建 create database 数据库名称;

创建一个名称为mydb1的数据库 ----- create database mydb1;

* 通过show databases; 查看所有数据库

在创建数据库时,为数据库指定字符集及字符集比较方式 ---- 语法: create database 数据库名称 character set 编码集 collate 比较方式;

* 如果不指定字符集和比较方式,使用默认 --- 修改utf-8

---------------------------------------

mysql安装目录

bin ---- mysql执行程序

docs ---- 文档

share --- 各国编码信息

data ---- 存放mysql 数据文件

* 每个数据库 创建一个同名文件夹,.frm 存放table表结构、ibdata1存放mysql中所有数据表数据记录

* 在数据库每个文件夹中存在db.opt ---- 保存数据默认编码集

* win7 数据库文件夹默认   C:\ProgramData\MySQL\MySQL Server 5.5\data

---------------------------------------

创建一个使用utf8字符集的mydb2数据库 -----  create database mydb2 character set utf8;

创建一个使用utf8字符集,并带校对规则的mydb3数据库 ----- create database mydb3 character set utf8 collate utf8_unicode_ci;

* 什么是校对规则? 用于排序  对张三和李四排序,按照拼音排序、按照笔画排序,按照名字数量

* 一个字符集对应很多校对规则

2、查看和删除数据库

查看当前数据编码集 show create database 数据库名;

查看前面创建的mydb2数据库的定义信息 ----- show create database mydb2;

删除数据库:drop database 数据库名称;

删除前面创建的mydb1数据库 ----- drop database mydb1;

3、修改数据库编码

语法: alter database 数据库名称 character set 编码集;

将mydb2 数据库编码集设置gbk -------------  alter database mydb2 character set gbk;

4、切换数据库

如果想对数据库中数据表和数据记录进行操作,必须先切换到指定数据库 ---- use 数据库名称;

查看当前正在使用数据库 select database();

第二部分:数据表table ---- 表结构SQL

1、创建数据表 create table 表名(列名 类型(长度),列名 类型(长度) ...) character set 编码集;

* 如果不设置编码集,数据表将采用数据库默认字符集

create table users(

id int,

name varchar(40),

password varchar(40),

birthday date

);

* 所有数据类型中,除了char 、varchar 必须指定长度,其它类型默认长度

数据库类型

1) 整数类型 tinyint (byte)  smallint(short) int(int) bigint(long) float double

2) 字符串类型 varchar char 长度取值0-255  ---- String

varchar变长 varchar(20) 向数据库存入hello ,因为变长,列长度会根据保存内容自动调整

char定长 char(8) ---- 向数据库存入hello 因为定长 保存hello + 3个空格

* varchar经常使用,char性能更好

3) 逻辑性 bit 一位 --- boolean *bit(8)表示8位 等于tinyint ,bit(32) 等于int

4) 日期型 date time datetime timestamp

date 只能保存日期

time 只能保存时间

datetime 日期和时间都有

timestamp 日期和时间都有,自动更新 ---- 操作数据表,timestamp字段自动更新当前时间

5) 大数据类型 text、blob

text 文本类型数据,主要存储字符文件 --- 文本文件

blob 二进制文件 ,存储任何类型文件(音乐、电影)

* blob和text最大类型 longtext longblob 最大可以保存4GB文件

GB = 1024MB MB=1024KB KB=1024Byte

创建一个员工表employee

id 整形

name 字符型

gender 字符型

birthday 日期型

entry_date 日期型

job 字符型

salary 小数型

resume 大文本型

create table employee (

id int,

name varchar(40),

gender varchar(10),

birthday date,

entry_date date,

job varchar(20),

salary double,

resume longtext

);

2、通过desc语句 查看表结构

语法:desc 表名;

单表约束:主键约束(唯一标识一条记录)  唯一约束(该字段内容不允许重复) 非空约束(值不能为空)

主键约束----- primary key 不能为空、不能重复

* 主键数字类型,一般设置主键自动增长 mysql设置自动增长 auto_increment

唯一约束 ----- unique 一张表只有最重要那个字段才能作为主键

非空 ----- not null

create table employee (

id int primary key not null auto_increment ,

name varchar(40) unique not null,

gender varchar(10) not null,

birthday date not null,

entry_date date not null,

job varchar(20) not null,

salary double not null,

resume longtext not null

);

3、数据表修改

向已有数据表添加一列 :alter table 表名 add 列名 类型(长度) 约束;

改变已有数据表一列类型、长度: alter table 表名 modify 列名 类型(长度) 约束;

改变已有数据表一列的名称 : alter table 表名 change 旧列名 新列名 类型(长度) 约束;

删除已有一列 : alter table 表名 drop 列名;

修改表名: rename table 旧表名 to 新表名;

修改表的字符集:alter table student character set utf8;

练习

在上面员工表的基本上增加一个image列 ----- alter table employee add image varchar(255);

修改job列,使其长度为60  ------ alter table employee modify job varchar(60) not null;

删除gender列。------ alter table employee drop gender;

表名改为user。 ----- rename table employee to user;

修改表的字符集为utf8  ----  alter table user character set utf8;

* show create table user;

列名name修改为username ---- alter table user change name username varchar(40) unique not null;

4、数据表删除

语法: drop table 表名;

* show tables; 查看当前数据 中所有表

第三部分:对数据表中数据记录 进行 增删改查

1、表记录的插入

语法:insert into 表名(列名,列名,  .... ) values(值, 值, ....)

* 值个数应该列个数相同,值顺序和列顺序相同,值类型和列字段类型匹配

步骤

1) 启动cmd窗口

2) mysql -u root -p 回车 输入密码

3) 创建数据库 day11 ------ create database day11 ;

* show databases ; 查看当前所有数据库

* show create database day11 ;

4) 创建数据表 ,先切换数据库  use day11;

* select database();

5) 创建数据表

create table employee (

id int primary key not null auto_increment ,

name varchar(40) unique not null,

gender varchar(10) not null,

birthday date not null,

entry_date date not null,

job varchar(20) not null,

salary double not null,

resume longtext not null

);

* desc employee; 查看表结构

6) 插入数据

insert into employee(id,name,gender,birthday, entry_date,job,salary,resume) values(null,‘zs‘,‘male‘,‘1990-01-10‘,‘2012-10-10‘,‘hr‘,3000,‘He is a good man!‘);

* 插入数据时,字符串添加 单引号 ‘‘   ----  字符和日期型数据应包含在单引号中

insert into employee(id,name,gender,birthday, entry_date,job,salary,resume) values(null,‘lisi‘,‘male‘,‘1980-01-10‘,‘2000-10-10‘,‘manager‘,8000,‘He is a very good man!‘);

insert into employee values(null,‘wangwu‘,‘female‘,‘1977-10-08‘,‘1999-11-12‘,‘BOSS‘,100000,‘He is BOSS‘);

* 在插入数据时,如果有些列存在默认值或者可以为null ,插入省略部分列 。

create table person(

id int primary key not null auto_increment,

name varchar(40) not null,

introduce varchar(255)

);

insert into person(name) values(‘zs‘); --- 这里只要写不能为空列 就可以了

* 再插入语句时,省略所有列名

insert into person values(null,‘lisi‘,null); ---- 省略所有列名,必须为所有列提供value值,按照数据表中列顺序

* 插入数据后,通过select * from 表名; -------  查询插入的数据

插入数据时,中文乱码问题

insert into employee values(null,‘小丽‘,‘female‘,‘1995-10-08‘,‘2015-11-12‘,‘Sales‘,2000,‘是一个有潜质的女孩子!‘);

* 查看数据库相关编码集 show variables like ‘character%‘;

* 使用mysql客户端 --- 黑色窗口界面使用gbk输入方式

mysql有六处使用了字符集,分别为:client 、connection、database、results、server 、system。

服务器端相关:database server system(永远无法修改 就是utf-8)

客户端相关 connection client results

解决插入乱码问题:将客户端相关三个编码集设置 gbk

set names gbk; ----- 快速设置客户端相关三个编码集 (临时设置当前窗口编码集)

修改mysql 配置文件,永久改变客户端编码集 ----- mysql/my.ini

[mysql] ---- 客户端配置

[mysqld] ---- 服务器端配置

2、数据表记录修改操作 update 语句

语法: update 表名 set 列名=值,列名=值 where条件语句

* 没有where语句,对所有数据行进行更新

update employee set salary = 5000 ; ---- 修改所有员工工资5000

练习

将所有员工薪水修改为5000元。 ------  update employee set salary = 5000 ;

将姓名为’zs’的员工薪水修改为3000元。update employee set salary = 3000 where name = ‘zs‘;

* update employee set salary = 3000 where binary name = ‘ZS‘;  ---- 条件比较前添加 binary 使比较更加精确严格

将姓名为’lisi’的员工薪水修改为4000元,job改为ccc。 --------- update employee set salary = 4000, job=‘ccc‘ where binary name = ‘lisi‘;

将wangwu的薪水在原有基础上增加1000元。-------  update employee set salary = salary+1000 where name = ‘wangwu‘;

3、数据表记录通过delete语句进行删除

语法:delete from 表名 where 条件语句;

删除一个表所有记录 truncate 表名; 效果与 delete from 表名;

truncate与delete 使用上区别 ?

truncate 删除记录后不可恢复的,不受事务管理,原理:先删除整个表,重新创建

delete 可以被事务管理 ,在事务中删除数据可以回滚恢复,原理: 一行一行删除数据记录

truncate 删除所有记录性能上 好于 delete

练习:

删除表中名称为’zs’的记录 。 ---- delete from employee where name=‘zs‘;

删除表中所有记录。  ---- delete from employee;

* 演示 事务的回滚 ,通过delete在事务中删除可以恢复的

mysql> start transaction;

Query OK, 0 rows affected (0.00 sec)

mysql> delete from employee;

Query OK, 3 rows affected (0.00 sec)

mysql> select * from employee;

Empty set (0.00 sec)

mysql> rollback;

使用truncate删除表中记录。-----truncate employee;  数据永远删除,不会恢复

Java笔记(11),布布扣,bubuko.com

时间: 2024-10-29 19:11:09

Java笔记(11)的相关文章

java笔记11之二维数组

格式1: 二维数组:就是元素为一维数组的一个数组 数据类型[][] 数组名 = new 数组类型[m][n] 其中m为行 n为列 注意: A:以下格式也可以表示二维数组            a:数据类型 数组名[][] = new 数据类型[m][n];            b:数据类型[] 数组名[] = new 数据类型[m][n];           B:注意下面定义的区别            int x;            int y;            int x,y;

11.2-全栈Java笔记:Java中如何实现多线程

在JAVA中使用多线程非常简单,我们先学习如何创建和使用线程,然后结合案例再深入剖析线程的特性. 通过继承Thread类实现多线程 继承Thread类实现多线程的步骤: 1. 在Java中负责线程的这个功能的是java.lang.Thread 这个类 2. 可以通过创建 Thread 的实例来创建新的线程. 3.  每个线程都是通过某个特定Thread对象所对应的方法run( )来完成其操作的,方法run( )称为线程体. 4.   通过调用Thead类的start()方法来启动一个线程. [示

11.1-全栈Java笔记:多线程技术的基本概念

多线程是JAVA语言的重要特性,大量应用于网络编程.应用于服务器端程序的开发.以及最常见的UI界面底层原理.操作系统底层原理都大量使用了多线程. 我们可以流畅的点击软件或者游戏中的各种按钮,其实,底层就是多线程的应用.UI界面的主线程绘制界面,如果有一个耗时的操作发生则启动新的线程,完全不影响主线程的工作.当这个线程工作完毕后,再更新到主界面上. 我们可以上百人.上千人.上万人同时访问某个网站,其实,网站服务器也是基于多线程的原理.如果没有多线程,服务器处理速度会极大降低. 多线程应用于计算机的

11.6-全栈Java笔记:什么是线程同步

 同步问题的提出 现实生活中,我们会遇到"同一个资源,多个人都想使用". 比如:教室里,只有一台电脑,多个人都想使用.天然的解决办法就是,在电脑旁边,大家排队.前人使用完后,后人再使用. 线程同步的概念 处理多线程问题时,多个线程同时访问同一个对象,并且一个线程还想修改这个对象. 这时候,我们就需要用到"线程同步". 线程同步其实就是一种等待机制,多个线程需要同时访问同一个对象,则线程进入这个对象的等待池(wait pool)形成队列,等待前面的线程使用完毕后,下一

11.4-全栈Java笔记:线程三种状态的控制

关于Java线程终止.暂停.联合的文章网上有很多,经过测试,本节重点讲解的是针对不同使用场景选择合适的方法. 终止线程的典型方式 终止线程我们一般不使用JDK提供的stop()/destroy()方法(他们本身也被JDK废弃了).通常的做法是提供一个boolean型的终止变量,当这个变量置为false,则终止线程的运行. [示例1]终止线程的典型方法(重要!!!) public class TestThreadCiycle implements   Runnable { String name;

11.7-全栈Java笔记:如何实现线程同步

由于同一进程的多个线程共享同一片存储空间,在带来方便的同时,也带来了访问冲突这个严重的问题.Java语言提供了专门机制以解决这种冲突,有效避免了同一个数据对象被多个线程同时访问时的冲突问题. 由于我们可以通过 private 关键字来保证数据对象只能被方法访问,所以我们只需针对方法提出一套机制,这套机制就是synchronized关键字,它包括两种用法:synchronized 方法和 synchronized 块:  synchronized方法 通过在方法声明中加入 synchronized

11.9-全栈Java笔记: 线程并发协作(生产者/消费者模式)

多线程环境下,我们经常需要多个线程的并发和协作.这个时候,就需要了解一个重要的多线程并发协作模型"生产者消费者模式". 什么是生产者? 生产者指的是负责生产数据的模块(这里模块可能是:方法.对象.线程.进程). 什么是消费者? 消费者指的是负责处理数据的模块(这里模块可能是:方法.对象.线程.进程). 什么是缓冲区? 消费者不能直接使用生产者的数据,它们之间有个"缓冲区".生产者将生产好的数据放入"缓冲区",消费者从"缓冲区"

11.3-全栈Java笔记:线程的生命周期

一个线程对象在它的生命周期内,需要经历5个状态. 新生状态(New) 用new关键字建立一个线程对象后,该线程对象就处于新生状态.处于新生状态的线程有自己的内存空间,通过调用start方法进入就绪状态. 就绪状态(Runnable) 处于就绪状态的线程已经具备了运行条件,但还没有分配到CPU,处于 "线程就绪队列",等待系统为其分配CPU. 就绪状态并不是执行状态,当系统选定一个等待执行的Thread对象后,它就会进入执行状态. 一旦获得CPU,线程就进入运行状态并自动调用自己的run

11.11-全栈Java笔记:线程状态转换和任务定时调度

线程状态转换 1)New :创建好线程对象,但没有启动的时候. 一个线程调用start()之后不一定会马上启动,此时进入就绪状态,等待得到资源. 2)就绪线程序通过Scheduler(调度程序)去确定是否运行. 3)Runing---dead:运行结束(非双向,为单向箭头). 4)Runing---就绪:暂停(除了没有CPU,具备运行的所有条件). 5)Runing-otherwise(阻塞):因程序原因:调用sleep或join之后,线程被阻塞.这时不具备运行的条件,此时线程进入阻塞池.sle