- ?
Java 框架实战 springAOP 实现数据库事务操作
对对对
展开
今天就是平安夜了
伙伴们都要平平安安的哈
那么开始今天的分享
先来了解一下事务的概念:
事务是一系列作为一个逻辑单元来执行的操作的集合。它是数据库维护数据一致性的单位,它讲数据库从一个一致状态,转变为新的另外一个一致状态。
简单来说就是:对一组数据进行处理,要么所有操作都成功,要么全部都失败,这样就保证了数据始终一直的状态,维护了数据的完整和可靠性。
我们来做个小例子,模拟一下转账的流程。
先来写一下数据库
数据库内容:
来写一下 DAO 层的接口,两个操作数据库的方法,一个是增加钱数,一个是减少钱数
实现这两个方法。
在 service 层定义一个转账的方法
转账操作的业务逻辑
配置文件
测试一下
看一下数据库的结果:转账成功了
这是程序正常运行,没有bug的情况,万一程序在转账的过程中出错了呢?
程序出现了 bug 。再测试一下
看一下数据库的结果
我们总共是3000,现在张三和李四加起来是2900,转丢了100。现在你明白我们为什么要使用事务了吧!
事务的属性
原子性(atomicity):一个事务是一个不可分割的工作单位,事务中包括的所有操作要么都做,要么都不做。
一致性(consistency):事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
隔离性(isolation):一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
持久性(durability):持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
这四个属性通常称为 ACID 特性。
利用 spring 基于 xml 配置实现事务。
事务原本是数据库中的概念,是在 dao 层,一般情况下,我们会把事务管理提升到的业务层 (service)。这是为了更好的是用事务来管理我们的业务逻辑,spring 并不直接管理事务,而是提供了多种事务管理器jdbc (自定义封装jdbc,jdbctemplate,mybatis ) 使用:DataSourceTransactionManager
我们来配置一下:
引入jar,引入aop约束
aopalliance-1.0.jar
spring-aop-4.2.1.RELEASE.jar
spring-tx.jar
xml配置事务
现在让我们来测试一下
转账失败了,查看一下数据库
没有使用事务时,转账过程中出现 bug,就会导致我们扣钱成功了,但是钱转入失败了,钱的总数就少了。
使用了事务之后,转账过程中程序出现 bug ,我们的扣除的钱可以回到原来的账户,不会造成损失。
各位我解释的还清楚吗?
平安夜快乐
拜拜!
- ?
Java开源数据库管理工具
kaiserin
展开
1、SQuirreL SQL Client
SQuirreL SQL Client 是一个用 Java 编写的程序,它允许您查看数据库的内容、发出 SQL 命令,以及如您将看到的,执行许多其他功能。构建该图形化前端是为了支持兼容 JDBC 的数据库。
2、iSQL-Viewer
iSQL-Viewer 是一个符合 JDBC 2.x的SQL 客户端,它支持多种数据库如PostgreSQL, MySQL, Oracle,和 Informix。它提供了许多工具来执行简单的数据库任务。
3、DbmJ
DbmJ 针对 SAPDB 数据库管理工具。
4、SQL Admin
SQL Admin 是一个通过 JDBC 连接与发送命令到数据库 java 写的 SQL 客户端。它的目的是创建一个跨平台,跨数据库的数据库管理客户端。
5、SQLMinus
这个 SQL 客户端有着许多友好的开发特性。
6、ViennaSQL
ViennaSQL 是一个用JAVA写成的图形用户界面的数据库客户端工具,通过JDBC 来访问和管理 SQL 数据库,只要有 JDBC 驱动的数据库都可用 ViennaSQL 来管理,只要能运行JAVA的地方它就能运行,有一个很好的例子就是可以在 LINUX/NT 中通过 JDBC 来访问 ORACLE 数据库。
7、Adit
Adit的目标是成为一个轻量级的数据库查询工具。
8、GUAM
GUAM 一个用 JAVA 和 Swing 工具包写的管理 MySQL 数据库用户图形界面。
9、QueryForm
QueryForm 是一个很方便用户查询,删除,修改,新增数据的数据库管理工具。
10、FreeQueryBuilder
FreeQueryBuilder 也是一个通过 JDBC 管理数据库的工具。它支持的数据库有 ORACLE, MySQL, HSQLDB, Firebird等。
11、PKLite
PKLite 是一个 Java 开源 SQL 客户端,可以连到任何有 JDBC 驱动的数据库并可运行在任何有 Java VM 的操作系统上。它有基本查询,更新的功能。它的目标是创建一个轻量级的 SQL 客户端(大约1 MB),便于使用与安装。
PKLite 在同一时间可以连接多个数据库并可查询结果导出为一个 CSV / HTML / XML 文件,还可运行SQL脚本。
12、Jackcess
Jackcess 是一个纯 Java 包用于读取和写入 MS Access 数据库。它不是一个应用程序,没有 GUI 只是一个 Java 包。
要显示一个表中的内容代码可这么写:
Database.open(new File("my.mdb")).getTable("MyTable").display();
13、Druid
Druid 是一个允许用户以图形的方式来创建数据库的工具。用户可以 add/change/delete 数据库对象(表格,字段等)。
一旦数据库创建完成Druid就能够为你生成便于浏览所有表格的HTML/PDF文档,Java classes(每一个表格对应一个table),数据字典,SQL script等。
14、Datastream Pro
Datastream Pro是一个数据库"浏览器"和数据操作工具。它易于使用,可靠,稳定,操作直观。
Datastream Pro支持所有兼容 JDBC 的数据库(已经在 Oracle,MySQL,postgreSQL 和 HSQLDb 上测试成功)。
利用它可以浏览与编辑数据库中的数据,可在一个友好的界面中运行与编辑 SQL 脚本,可使用查询编辑器来编辑 SQL 查询,可同时连接到多个数据库和易于使用的连接向导等。
- ?
Java数据库基础--以SQL Server为例
严起眸
展开
sql server数据库基本概念
使用文件保存数据存在几个缺点:
1、文件的安全性问题;
2、文件不利于查询和对数据的管理;
3、文件不利于存放海量数据
4、文件在程序中控制不方便。
数据库的定义(1)
严格地说,数据库是“按照数据结构来组织、存储和管理数据的仓库”。在经济管理的日常工作中,常常需要把某些相关的数据放进这样的“仓库”,并根据管理的需要进行相应的处理。例如,企业或事业单位的人事部门常常要把单位职工的基本情况(职工号、姓名、年龄、性别、籍贯、工资、简历等)存放在表中,这张表就可以看成一个数据库。有了这个“数据仓库”我们就可以根据需要随时查询某职工的基本情况,也可以查询工资在某个范围内的职工人数等等。这些工作如果都能在计算机上自动进行,那我们的人事管理就可以达到极高的水平。此外,在财务管理、仓库管理、生产管理中也需要建立众多的这种“数据库”,使其可以利用计算机实现财务、仓库、生产的自动化管理。
数据库的定义(2)
J.Martin给数据库下了一个比较完整的定义:数据库是存储在一起的相关数据的集合,这些数据是结构化的,无有害的或不必要的冗余,并为多种应用服务;数据的存储独立于使用它的程序;对数据库插入新数据,修改和检索原有的数据均能按一种公用的和可控制的方式进行。当某个系统中存在结构上完全分开的若干个数据库时,则该系统包含一个“数据库集合”。
数据库的基本结构
数据库的基本结构分三个层次,反映了观察数据库的三种不同角度。
1、物理数据层
它是数据库的最内层,是物理存贮设备上实际存储的数据的集合。这些数据的原始数据,是用户加工的对象,由内部模式描述的指令操作处理的位串、字符和字组成。
2、概念数据层
它是数据库的中间一层,是数据库的整体逻辑表示。指出了每个数据的逻辑定义及数据间的逻辑联系,是存贮记录的集合。它所涉及的是数据库所有对象的逻辑关系,而不是它们的物理情况,是数据库管理员概念下的数据库。
3、逻辑数据层
它是用户所看到和使用的数据库,表示了一个或一些特定用户使用的数据集合,即逻辑记录的集合。
数据库不同层次之间的联系是通过映射进行转换的。
数据库的基本特点
1、实现数据共享
数据共享包含所有用户可同时存取数据库中的数据,也包括用户可以用各种方式通过接口使用数据库,并提供数据共享。
2、减少数据的冗余度
同文件系统比,数据库实现了数据共享,从而避免了用户各自建立应用文件。减少了大量重复数据,减少了数据冗余,维护了数据的一致性
3、数据实现集中控制
文件管理方式中,数据处于一种分散的状态,不同的用户或同一用户在不同处理中其文件之间毫无关系。利用数据库可对数据进行集中控制和管理,并通过数据模型表示各种数据的组织以及数据间的联系。
4、数据一致性和可维护性,以确保数据的安全性和可靠性。
5、故障恢复
目前主流数据库
微软: Sql Server和Access
瑞典MySQL: AB公司MySql
IBM公司: DB2和Informix
美国Sybase公司: Sybase
美国Oracle公司: Oracle
数据库选择:
1、成本;2、功能;3、并发性要求;4、安全性;
sql server介绍(1)
SQL是英文Structured Query Language的缩写,意思为结构化查询语言。SQL语言的主要功能就是同各种数据库建立联系,进行沟通。按照ANSI(美国国家标准协会)的规定,SQL被作为关系型数据库管理系统的标准语言。SQL语句可以用来执行各种各样的操作,例如更新数据库中的数据,从数据库中提取数据等。目前,绝大多数流行的关系型数据库管理系统,如Oracle、Sybase、Microsoft SQL Server、Access等都采用了SQL语言标准。
sql server介绍(2)
SQL Server是一个关系数据库管理系统。它最初是由Microsoft Sybase和Ashton-Tate三家公司共同开发的,于1988年推出了第一个OS/2版本。在Windows NT推出后,Microsoft与Sybase在SQL Server的开发上就分道扬镳了,Microsoft将SQL Server移植到Windows NT系统上,专注于开发推广SQL Server的Windows NT版本。Sybase则较专注于SQL Server在UNIX操作系统上的应用。
企业管理器的使用(PS:比较简单,不再赘述)
查询分析器的使用(1)
企业管理器给用户提供了一个很方便的图形界面管理工具,用起来感觉直观方便,可是它也有缺点,当一个表的记录非常大的时候,对表的各种操作,都显得不方便了,比如:
1、要求从1000行记录中查询是否存在名为“孙小明”的人
2、要求把1000行记录中工资低于100的人,工资增加10%
3、要求把年龄大于30的人从数据表中删除
这时,会发现使用企业管理器是很不方便的
所以微软为我们提供另外一个操作数据库的工具,查询分析器。查询分析器可以非常方便的完成上述任务。
查询分析器的使用(2)--sql语句
SQL全称是“结构化查询语言(Structured Query Language)”。
SQL(Structured Query Language)是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。结构化查询语言(Structured Query Language)最早是IBM的圣约瑟研究实验室为其关系数据库管理系统SYSTEM R开发的一种查询语言,它的前身是SQUARE语言。SQL语言结构简洁,功能强大,简单易学,所以自从IBM公司1981年推出以来,SQL语言得到了广泛的应用。如今无论是像Oracle、Sybase、Informix、SQL Server这些大型的数据库管理系统,还是像Visual Foxpro、PowerBuilder这些PC上常用的数据库开发系统,都支持SQL语言作为查询语言。
查询分析器的使用(3)--sql语句
SQL语言包含4个部分:
数据定义语言(DDL),例如:CREATE、DROP、ALTER等语句。
数据操作语言(DML),例如:INSERT、UPDATE、DELETE语句。
数据查询语言(DQL),例如:SELECT语句。
数据控制语言(DCL),例如:GRANT、REVOKE、COMMIT、ROLLBACK等语句。
查询分析器的使用(4)--实例
[sql] view plain copy
--创建数据库
createdatabase LiangshanHero;
--使用数据库
use LiangShanHero;
--创建表
createtable hero
(
heroId int, --排名
heroName varchar(50), --名字
heroNickName varchar(50), --外号
sex char(2) --性别
);
altertable hero add sal int; --添加薪水属性
--使用SQL语句来添加数据
insertinto hero values(1, '宋江', '及时雨', '男');
insertinto hero values(2, '卢俊义', '玉麒麟', '男');
insertinto hero values(3, '吴用', '智多星', '男');
insertinto hero values(4, '公孙胜', '入云龙', '男');
--使用SQL语句来修改数据
update hero set sal = 20000 where heroid = 1;
update hero set sal = 15000 where heroid = 2;
update hero set sal = 10000 where heroid = 3;
update hero set sal = 13000 where heroid = 4;
--使用SQL语句来查询数据
select * from hero;
--查询工资低于的人
select * from hero where sal < 15000;
--把工资低于的人,工资提高%
update hero set sal = sal * 1.1 where sal < 15000;
--删除性别为女的人
deletefrom hero where sex = '女';
表的管理--表名和列的命名规则
1、必需以字母,_开头,例如:ta,_ta
2、长度不能超过128个字符
3、不要使用sql server的保留字
4、只能使用如下字符A-Z,a-z,0-9,$,#,_等
表的管理--支持的数据类型
字符型(非unicode编码)
char 定长 最大8000字符(非unicode编码)
char(10)'Switch'前5个字符放'Switch',后添5个空格补全
varchar 变长 最大8000字符(非unicode编码)
varchar(10)'Switch'sql server分配5个字符,这样可以节省空间
ntext可变长度Unicode数据的最大长度为2的30次方-1(1,073,741,823)个字符
text可变长度非Unicode数据的最大长度为2的31次方-1(2,147,483,647)个字符
区别:
1、text是字节格式存储英文的,也可以存中文但有时候会显示成乱码
2、ntext是多字节格式存储unicode的,也就是存储各种文字用的。
在什么时候使用char型而不使用varchar,在知道字段定长固定时就使用char
字符型(unicode编码)
nchar 定长 最大4000字符(unicode编码)
nchar(20)'Switch'前10个字符放'Switch',后添10个空格补全
nvarchar 变长 最大4000字符(unicode编码)
nvarchar(20)'Switch'sql server分配10个字符,这样可以节省空间
特别说明:
1、一般带有汉字的字段用nvarchar,全英文或符号的用varchar,因为nvarchar为unicode字符集,该类型的字段无论是单个字母还是单个汉字都占两个字节,而varchar,字母占一个字节,汉字占两个,nvarchar处理汉字或其它unicode字符集的速度要比varchar字段快。
2、如果有一些特殊字符在nvarchar中没有的,如日文的某些字符,那当然只能选合适的代码页用varchar了,而且这些特有语言特有的字符转换到nvarchar会消失
数字型
1、bit 范围 0到1
2、int 范围 负的2的31次方到正的 2的31次方-1
3、bigint 范围 负的2的63次方到正的 2的63次方-1
4、float 存放小数,不推荐使用
5、numeric 小数
强烈建议 如果要去存放小数最好使用numeric
日期类型
datetime(表示日期)
timestamp(时间戳)
一般情况下 用datetime表示日期
--sql server为我们提供一个专门的时间函数getdate()
[sql] view plain copy
createtable ta--建表
(bir datetime)--字段
insertinto ta values(getdate())--添加时间
图片
image保存图片,但是用的很少,一般用路径保存图片,在软件公司往往使用图片服务器和图床技术
视频
binary字段可以存放,但是往往将视频文件保存在文件服务器上,sql server中只保留文件路径,这样存取效率高。
表的管理--添加数据
插入部分字段(语法)
insert into 表名 (字段名1,字段名2,...) values (对应字段数据1,对应字段数据2,...)
表的管理--修改数据
修改一个字段(语法)
update 表名 set 字段名='新值' where 字段='值'
例:
[sql] view plain copy
update student set sex='女'where xh='A001'
update clerk set age=38 where cleName='贾政'
修改多个字段(语法)
update 表名 set 字段名1='新值',字段名2='新值'... where 字段='值'
例:
[sql] view plain copy
update student set sex='男',birthday='1980-04-01'where xh='A001'
update clerk set cleName='薛蟠',age=40 where cleId=2
修改含有null值的数据(语法)
update 表名 set 字段名='新值' where 字段 is null
例:
[sql] view plain copy
update clerk set cleName='薛宝钗'where age isnull
表的管理--删除数据
删除全部数据
delete from 表名
删除指定数据
delete from 表名 where 字段名='值'
删除多个指定数据
delete from 表名 where 字段名1='值' and 字段名2='值' and或or ...
表的管理--修改表
添加一个字段
[sql] view plain copy
ALTERTABLE distributors ADDCOLUMN address varchar(30);
修改字段的类型/或是名字(不能有数据)
[sql] view plain copy
ALTERTABLE distributors
ALTERCOLUMN address TYPE varchar(80),
ALTERCOLUMNname TYPE varchar(100);
ALTERTABLE distributors RENAME COLUMN address TO city;
删除一个字段
[sql] view plain copy
ALTERTABLE distributors DROPCOLUMN address RESTRICT;
修改表的名字
[sql] view plain copy
ALTERTABLE distributors RENAME TO suppliers;
删除表
drop table 表名;
主键和外键
主键,一张表中只能有一个主键
1、主键(primary key),不能够重复出现;
2、主键必需给值,换言之主键不能为null
3、主键可以修改,但不能修改为同名的,同时要明确字段不有重复,否则报错。
外键
1、外键只能指向主键
2、外键和主键的数据类型要一致
员工管理系统
PS:之后很多例子都是基于下面所建数据库和表的
[sql] view plain copy
---创建dept表
createtable dept
(
deptno intprimarykey, --部门编号
dname nvarchar(30), --部门名称
loc nvarchar(30) --所在地
);
--创建emp表
createtable emp
(
empno intprimarykey, --员工编号
ename nvarchar(30), --员工姓名
job nvarchar(30), --员工职位
mgr int, --上级编号
hiredate datetime, --入职日期
sal numeric(8, 2), --薪水
comm numeric(8, 2), --奖金
deptno intforeignkeyreferences dept(deptno) --deptno是外键
);
--外键
--①外键引用的键必须是主键
--②外键的数据类型必须和引用的主键数据类型一致
--向dept表中添加数据
insertinto dept values (10,'accounting','new york');
insertinto dept values (20,'research','dallas');
insertinto dept values (30,'sales','chicago');
insertinto dept values (40,'operations','boston');
--向emp表中添加数据
insertinto emp (empno,ename,job,mgr,hiredate,sal,deptno) values (7369,'smith','clerk',7902,'1980-12-17',800.00,20);
insertinto emp values(7499,'allen','salesman',7698,'1981-2-20',1600.00,300.00,30);
insertinto emp values(7521,'ward','salesman',7698,'1981-2-22',1250.00,500.00,30);
insertinto emp (empno,ename,job,mgr,hiredate,sal,deptno) values (7566,'jones','manager',7839...
- ?
JAVA:SQL数据库的四种链接
龚妙之
展开
1、内联接(典型的联接运算,使用像 = 或 <> 之类的比较运算符)。包括相等联接和自然联接。 内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。例如,检索 students和courses表中学生标识号相同的所有行。2、外联接。外联接可以是左向外联接、右向外联接或完整外部联接。 在 FROM子句中指定外联接时,可以由下列几组关键字中的一组指定: 1)LEFT JOIN或LEFT OUTER JOIN 左向外联接的结果集包括 LEFT OUTER子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。 2)RIGHT JOIN 或 RIGHT OUTER JOIN 右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。 3)FULL JOIN 或 FULL OUTER JOIN完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。3、交叉联接交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉联接也称作笛卡尔积。 FROM 子句中的表或视图可通过内联接或完整外部联接按任意顺序指定;但是,用左或右向外联接指定表或视图时,表或视图的顺序很重要。有关使用左或右向外联接排列表的更多信息,请参见使用外联接。例子:a表 id name b表 id job parent_id 1 张3 1 23 1 2 李四 2 34 2 3 王武 3 34 4 a.id同parent_id 存在关系 1) 内连接 select a.*,b.* from a inner join b on a.id=b.parent_id 结果是 1 张3 1 23 1 2 李四 2 34 2 2)左连接 select a.*,b.* from a left join b on a.id=b.parent_id 结果是 1 张3 1 23 1 2 李四 2 34 2 3 王武 null 3) 右连接 select a.*,b.* from a right join b on a.id=b.parent_id 结果是 1 张3 1 23 1 2 李四 2 34 2 null 3 34 4 4) 完全连接 select a.*,b.* from a full join b on a.id=b.parent_id 结果是 1 张3 1 23 1 2 李四 2 34 2 null 3 34 4 3 王武 null一、交叉连接(CROSS JOIN)交叉连接(CROSS JOIN):有两种,显式的和隐式的,不带ON子句,返回的是两表的乘积,也叫笛卡尔积。例如:下面的语句1和语句2的结果是相同的。
语句1:隐式的交叉连接,没有CROSS JOIN。SELECT O.ID, O.ORDER_NUMBER, C.ID, C.NAMEFROMORDERSO , CUSTOMERS CWHERE O.ID=1;
语句2:显式的交叉连接,使用CROSS JOIN。SELECT O.ID,O.ORDER_NUMBER,C.ID,C.NAMEFROM ORDERS O CROSS JOIN CUSTOMERS CWHERE O.ID=1;语句1和语句2的结果是相同的,查询结果如下:
二、内连接(INNER JOIN)内连接(INNER JOIN):有两种,显式的和隐式的,返回连接表中符合连接条件和查询条件的数据行。(所谓的链接表就是数据库在做查询形成的中间表)。例如:下面的语句3和语句4的结果是相同的。
语句3:隐式的内连接,没有INNER JOIN,形成的中间表为两个表的笛卡尔积。SELECT O.ID,O.ORDER_NUMBER,C.ID,C.NAMEFROM CUSTOMERS C,ORDERS OWHERE C.ID=O.CUSTOMER_ID;
语句4:显示的内连接,一般称为内连接,有INNER JOIN,形成的中间表为两个表经过ON条件过滤后的笛卡尔积。SELECT O.ID,O.ORDER_NUMBER,C.ID,C.NAMEFROM CUSTOMERS C INNER JOIN ORDERS O ON C.ID=O.CUSTOMER_ID;语句3和语句4的查询结果:
三、外连接(OUTER JOIN):外连不但返回符合连接和查询条件的数据行,还返回不符合条件的一些行。外连接分三类:左外连接(LEFT OUTER JOIN)、右外连接(RIGHT OUTER JOIN)和全外连接(FULL OUTER JOIN)。三者的共同点是都返回符合连接条件和查询条件(即:内连接)的数据行。不同点如下:左外连接还返回左表中不符合连接条件单符合查询条件的数据行。右外连接还返回右表中不符合连接条件单符合查询条件的数据行。全外连接还返回左表中不符合连接条件单符合查询条件的数据行,并且还返回右表中不符合连接条件单符合查询条件的数据行。全外连接实际是上左外连接和右外连接的数学合集(去掉重复),即“全外=左外 UNION 右外”。说明:左表就是在“(LEFT OUTER JOIN)”关键字左边的表。右表当然就是右边的了。在三种类型的外连接中,OUTER 关键字是可省略的。
下面举例说明:语句5:左外连接(LEFT OUTER JOIN)SELECT O.ID,O.ORDER_NUMBER,O.CUSTOMER_ID,C.ID,C.NAMEFROM ORDERS O LEFT OUTER JOIN CUSTOMERS C ON C.ID=O.CUSTOMER_ID;
语句6:右外连接(RIGHT OUTER JOIN)SELECT O.ID,O.ORDER_NUMBER,O.CUSTOMER_ID,C.ID,C.NAMEFROM ORDERS O RIGHT OUTER JOIN CUSTOMERS C ON C.ID=O.CUSTOMER_ID;注意:WHERE条件放在ON后面查询的结果是不一样的。例如:
语句7:WHERE条件独立。SELECT O.ID,O.ORDER_NUMBER,O.CUSTOMER_ID,C.ID,C.NAMEFROM ORDERS O LEFT OUTER JOIN CUSTOMERS C ON C.ID=O.CUSTOMER_IDWHERE O.ORDER_NUMBER<>'MIKE_ORDER001';
语句8:将语句7中的WHERE条件放到ON后面。SELECT O.ID,O.ORDER_NUMBER,O.CUSTOMER_ID,C.ID,C.NAMEFROM ORDERS O LEFT OUTER JOIN CUSTOMERS C ON C.ID=O.CUSTOMER_ID AND O.ORDER_NUMBER<>'MIKE_ORDER001';
从语句7和语句8查询的结果来看,显然是不相同的,语句8显示的结果是难以理解的。因此,推荐在写连接查询的时候,ON后面只跟连接条件,而对中间表限制的条件都写到WHERE子句中。语句9:全外连接(FULL OUTER JOIN)。SELECT O.ID,O.ORDER_NUMBER,O.CUSTOMER_ID,C.ID,C.NAMEFROM ORDERS O FULL OUTER JOIN CUSTOMERS C ON C.ID=O.CUSTOMER_ID;注意:MySQL是不支持全外的连接的,这里给出的写法适合Oracle和DB2。但是可以通过左外和右外求合集来获取全外连接的查询结果。下图是上面SQL在Oracle下执行的结果:语句10:左外和右外的合集,实际上查询结果和语句9是相同的。SELECT O.ID,O.ORDER_NUMBER,O.CUSTOMER_ID,C.ID,C.NAMEFROM ORDERS O LEFT OUTER JOIN CUSTOMERS C ON C.ID=O.CUSTOMER_IDUNIONSELECT O.ID,O.ORDER_NUMBER,O.CUSTOMER_ID,C.ID,C.NAMEFROM ORDERS O RIGHT OUTER JOIN CUSTOMERS C ON C.ID=O.CUSTOMER_ID;语句9和语句10的查询结果是相同的,如下:
四、联合连接(UNION JOIN):这是一种很少见的连接方式。Oracle、MySQL均不支持,其作用是:找出全外连接和内连接之间差异的所有行。这在数据分析中排错中比较常用。也可以利用数据库的集合操作来实现此功能。语句11:联合查询(UNION JOIN)例句,还没有找到能执行的SQL环境。SELECT O.ID,O.ORDER_NUMBER,O.CUSTOMER_ID,C.ID,C.NAMEFROM ORDERS O UNION JOIN CUSTOMERS C ON C.ID=O.CUSTOMER_ID语句12:语句11在DB2下的等价实现。还不知道DB2是否支持语句11呢!SELECT O.ID,O.ORDER_NUMBER,O.CUSTOMER_ID,C.ID,C.NAMEFROM ORDERS O FULL OUTER JOIN CUSTOMERS C ON C.ID=O.CUSTOMER_IDEXCEPTSELECT O.ID,O.ORDER_NUMBER,O.CUSTOMER_ID,C.ID,C.NAMEFROM ORDERS O INNER JOIN CUSTOMERS C ON C.ID=O.CUSTOMER_ID;语句13:语句11在Oracle下的等价实现。SELECT O.ID,O.ORDER_NUMBER,O.CUSTOMER_ID,C.ID,C.NAMEFROM ORDERS O FULL OUTER JOIN CUSTOMERS C ON C.ID=O.CUSTOMER_IDMINUSSELECT O.ID,O.ORDER_NUMBER,O.CUSTOMER_ID,C.ID,C.NAMEFROM ORDERS O INNER JOIN CUSTOMERS C ON C.ID=O.CUSTOMER_ID;查询结果如下:
五、自然连接(NATURAL INNER JOIN):说真的,这种连接查询没有存在的价值,既然是SQL2标准中定义的,就给出个例子看看吧。自然连接无需指定连接列,SQL会检查两个表中是否相同名称的列,且假设他们在连接条件中使用,并且在连接条件中仅包含一个连接列。不允许使用ON语句,不允许指定显示列,显示列只能用*表示(ORACLE环境下测试的)。对于每种连接类型(除了交叉连接外),均可指定NATURAL。下面给出几个例子。语句14:SELECT *FROM ORDERS O NATURAL INNER JOIN CUSTOMERS C;
语句15:SELECT *FROM ORDERS O NATURAL LEFT OUTER JOIN CUSTOMERS C;
语句16:SELECT *FROM ORDERS O NATURAL RIGHT OUTER JOIN CUSTOMERS C;
语句17:SELECT *FROMORDERSO NATURAL FULL OUTER JOIN CUSTOMERS C;
六、SQL查询的基本原理:两种情况介绍。第一、单表查询:根据WHERE条件过滤表中的记录,形成中间表(这个中间表对用户是不可见的);然后根据SELECT的选择列选择相应的列进行返回最终结果。第二、两表连接查询:对两表求积(笛卡尔积)并用ON条件和连接连接类型进行过滤形成中间表;然后根据WHERE条件过滤中间表的记录,并根据SELECT指定的列返回查询结果。第三、多表连接查询:先对第一个和第二个表按照两表连接做查询,然后用查询结果和第三个表做连接查询,以此类推,直到所有的表都连接上为止,最终形成一个中间的结果表,然后根据WHERE条件过滤中间表的记录,并根据SELECT指定的列返回查询结果。理解SQL查询的过程是进行SQL优化的理论依据。
七、ON后面的条件(ON条件)和WHERE条件的区别:ON条件:是过滤两个链接表笛卡尔积形成中间表的约束条件。WHERE条件:在有ON条件的SELECT语句中是过滤中间表的约束条件。在没有ON的单表查询中,是限制物理表或者中间查询结果返回记录的约束。在两表或多表连接中是限制连接形成最终中间表的返回结果的约束。从这里可以看出,将WHERE条件移入ON后面是不恰当的。推荐的做法是:ON只进行连接操作,WHERE只过滤中间表的记录。
八、总结连接查询是SQL查询的核心,连接查询的连接类型选择依据实际需求。如果选择不当,非但不能提高查询效率,反而会带来一些逻辑错误或者性能低下。下面总结一下两表连接查询选择方式的依据:1、 查两表关联列相等的数据用内连接。2、 Col_L是Col_R的子集时用右外连接。3、 Col_R是Col_L的子集时用左外连接。4、 Col_R和Col_L彼此有交集但彼此互不为子集时候用全外。5、 求差操作的时候用联合查询。多个表查询的时候,这些不同的连接类型可以写到一块。例如:SELECT T1.C1,T2.CX,T3.CYFROM TAB1 T1 INNER JOIN TAB2 T2 ON (T1.C1=T2.C2) INNER JOIN TAB3 T3 ON (T1.C1=T2.C3) LEFT OUTER JOIN TAB4 ON(T2.C2=T3.C3);WHERE T1.X >T3.Y;上面这个SQL查询是多表连接的一个示范。
- ?
Java内容-MySQL数据库之约束的重要性
灵寒
展开
伙伴们
我们先把数据库搞完
好不好呀
你们不出声
我就当你们同意了呦!
今天分享的是
约束
约束是一种限制,它是通过对表的行或列的数据做出限制,来确保表和数据的完整性、唯一性和正确性。约束分为 5 种。
一.主键约束(primary key)
用于约束表中的一个或多个字段,作为这一行的标识符,在一张表中通过主键就能准确定位到一条记录。主键要求这一行的数据不能重复且不能为空。
Java学习交流群:495273252
另一种添加主键的方式
我们可以看到新创建的表 t_user2 没有主键
现在输入
alter table t_user2 add primary key(user_id);
双主键
我们看见有两个主键
插入数据
这条数据插入失败了!就是说明我们插入数据的主键不能重复!
二.默认值约束(default)
有 default 约束的列时,当插入数据为空时那么就插入该默认值。
我们先来修改表t_user1的默认值
现在的性别默认值就是‘男’了!
如果你已经建表成功了!
可以使用下面的语句来修改默认属性!
alter table t_user modify sex varchar(10) default '男' not null;
我们没有插入 sex 和 birthday 的数据
展示出来的就是设置的默认值!
三.非空约束(not null)
必须要插入值(可以是空格)
还是拿性别这个选项举例子!
我们插入 空格 或者 空 都可以插入成功查询结果!
当插入 null 是 提示该字段的值不能为 null
空、空格和NULL的区别:
String s1 = ""; 空值
创建出了对象(已经开辟了内存空间,对象已经实例化),这个对象内容为空,也就是空字符串。
s1.length = 0; s1.isEmpty() = true;
String s2 = " "; 空格
创建出了对象(已经开辟了内存空间,对象已经实例化),这个对象内容为不为空,而是空格。
s2.length = 1; s2.isEmpty() = false;
String s3 = null; 空对象
还没创建出对象(未分配内存空间),值不存在。在调用所有对象方法时候都会抛出异常,如s3.length(), s3.isEmpty()等方法。
四.唯一约束(unique)
表的某字段如果是 unique,那么,这个字段的每一段不能重复,但是可以为null。
建表时的语句如下图所示!
就不给大家演示了
当表已创建成功就用下面的语句
create unique index u_n on t_user(mobile);
看到了吗?这边改成 UNI 了!
现在可以插入数据了,因为我们之前的数据都是一样的,代码通不过,所以我就把数据全清了!现在我们来插入几条数据!
当我想插入重复的mobile(手机号码)时,提示我出错!
知识点呀各位!可以为 NULL 不能重复!
五.外键约束(foreign key)
如果一个表的某个字段指向另一个表的主键,就称为外建。
被指向的表,称之为主表,也叫父表
指向的表,称之为从表,也叫子表
先来创建一张班级的表
再来创建一张学生表
两张张表创建成功
现在填入数据
在插入一条数据
insert into t_student values(null, '1005', '燕小六', 21, 5);
因为如果主表没有相关的记录,从表不能插入数据,应该先插入主表数据然后再插入从表数据。
我们来看一下结果
伙伴们今天的分享就到这里了
另外给伙伴们补充一下
上一篇拉下的内容
查看建表语句
show create table t_user;
是不是很6,可以看到我们的建表语句
删除表
drop table tb_name;
伙伴们记得回去练习一下呦!
学编程一定不能懒!
再见了!
- ?
如何用Java制作一个简单数据库
薛煜祺
展开
笔者准备上大二,四月时加入了学院一个为期一年的Hadoop开发研究项目小组,暑假绝对是不可错过的学习时期。由于Hadoop 是由Java 编写的,调用API 最好也是用Java,Java的简单使用因此成为我们小组的必修。
我们选择的教材是《Thinking in Java》(Bruce Eckel)和网课《Java4android》(Mars老师)。悄悄告诉你,我《Thinking in Java》截稿时才看了不到200页。
制作一个简单数据库是 《Java4android》中Mars老师留下的作业。我花了三天半完成,700+行。(代码太长,就不一一贴出来了,文末有跳转查看和下载地址)
学习是一个输入和输出的过程,这篇文章就当作我Java入门的奠基,同时可以帮助初学者理解Java这门语言的使用,也欢迎参照这个小项目练练手。
---------------------------------------------------
笔者的这个数据库是基于文本文件的读写储存,原理比较简单。
数据库命令: 首先,数据库有四大基本功能:增删改查(add/delete/update/query),我为了使用方便,在设定这四个命令的同时,增加了“列出全部(show)”和“退出(quit)”。
数据库成员: 数据库每个成员有五个值:与
命令格式:
ADD
DELETE
UPDATE
QUERY
SHOW
QUIT
程序文件纵览:(已展开展示成员与方法)
程序类文件图:(使用Eclipse的Modelgoon插件反向制作UML)
程序关系图:
(我知道挺乱●﹏●)
程序文件各类的作用分析:
Main:显示欢迎界面、调用MainLooper的loop()方法(程序主循环)。
MainLooper:程序主循环、从Input的getInputLine()方法获得命令输入、把输入的字符串传给CheckCmd的check()方法、如果传去check()的值为”QUIT”则跳出循环。
Input:bufferedReader.getInputLine()方法中,调用java.io.BufferedReader的readLine()方法读取整行字符串返回。
Data.txt:存放数据库的文件。
Eng.properties:存放用户交互界面(UI)提示
IOProperty(截图里打错了):利用java.util.Properties的load(InputStreaminStream)方法,读取储存文件键值对。
UserInterface:提供获取UI提示的方法。
User:方便获得、暂存、修改、统一输出成员的值。
UsefulMethod:(实用方法)专门在代码重构时新增的类,供使用的类继承,意在统一管理常用的6个方法。分别是:1、反馈命令成功执行 2、判断字符串是否为数字 3、判断成员的数值value是否符合要求 4、判断新增成员key是否重复 5、把数据库储存文件的内容按照id排序(选择排序法) 6、消除String[]中的null。
CheckCmd:使用String的.split(“ ”)方法拆分命令,检查判断输入命令,若无语法问题即进行相应操作,否则报错。
Action:根据CheckCmd的调用进行相应的操作实现数据库功能。
WriteFile:根据调用的参数把字符串添加或覆盖写入文件。
QueryFile:showAll()方法返回数据库所有的内容,query(inttypeIndex, int operIndex, String args) 根据参数进行相应的搜索,返回所有符合条件的成员。
命令实现详析:
ADD
actAdd(String[] strs):可添加前提:命令长度为6、成员数值value和性别合规、key不重复。否则根据不符的要求相应显示提示。
actAdd(String[] strs):new一个User类,放入成员值,用writeFile.write(user.toString(),true)添加到文件尾部,并执行一次sortData()(文件全内容按id排序)。
DELETE
checkDelete(String[] strs):前提:命令长度为2。判断命令参数是否为id(isNumberic(Stringstr)),并输入到actDELETE()。
actDelete(String[] strs, boolean isId):调用queryFile.showAll()获得文件全部内容并存在String[]中。根据isId循环检索对应key,成立便跳出,把对应字符串赋为””空字符串,并复写在文件上。
UPDATE(设计仅支持salary修改)
checkUpdate(String[] strs):前提:命令长度为4、命令第2部分是salary。判断命令参数是否为id,并输入到actUPDATE()
actUpdate(String[] strs, boolean isId):与DELETE类似,调用queryFile.showAll()获得文件全部内容并存在String[]中。根据isId循环检索对应key,成立便跳出,把对应成员值放在一个user成员内,并修改成员salary值,再复写在文件上。
QUERY
checkQuery(String[] strs):前提:命令长度为4。根据type index{0.
actQuery(int typeIndex, int operIndex, Stringargs):调用queryFile.query(typeIndex, operIndex, args)获取结果并循环输出结果。
query(int typeIndex, int operIndex, Stringargs) :把简化的情况分别检索。思想挺简单,逻辑容易乱,代码也多。
SHOW
checkShow(String[] strs):前提:命令长度为1。直接调用actShow(String[]strs)。
actShow(String[] strs):调用queryFile.showAll()获取全部内容并循环输出。
QUIT
checkQuit():输出“谢谢使用”,并返回-1至MainLooper,跳出循环,程序终结。
Data.txt截图:
Eng.properties截图:
运行效果:(注:亮绿色为键盘输入)
------------------------------------------------------
至此,我把我数据库的结构与实现方式大概展现出来了。
但正如我们的精神领袖Linus Torvalds所说的“Talk is cheap, show me the code.”说多无益,想要自己有大长进,就要多看优秀代码,同时自己多写代码。
在此我放出链接:
直接看代码链接:Java简单数据库 源码展示
下载链接:http://pan.baidu/s/1dE82FJF 密码:jyq0
(包含源码和可运行jar)
欢迎找BUG。
感谢Bruce Eckel 和 Mars老师。
谢谢各位看看官。
- ?
一起来学大数据|Java与数据库之间的连接JDBC
Marta
展开
昨天我们看了数据库的使用,只不过那都是我们手工去输入的数据,今天我们用java来实现对数据库的连接。
JDBC简介
JDBC就是java 数据库连接,是java中的API,我们将用它来执行SQL语句,除了我们平常的mysql数据库以外,jdbc还提供了统一的多种的数据库。
如上图所示客户端通过jdbc API加载驱动后实现了数据的连接。接下来我们给出详细的步骤。
入门程序
我们先来学习一个简单的,首先我们新建的Java项目,其次是导入mysql的数据驱动jar包,jar可以在网上直接找一个,很方便,不需要太高版本的。
准备工作都有做好了之后,我们就可开始啦~
1,.注册驱动
方式一
方式二
在这里我们建议使用第一种方式,第二种方式会多次注册数据库,因为Driver()中其实就封装了一个注册驱动的方法,我们在外面又注册一次。
2.建立连接
我们通过上述的语句实现连接数据库,数据库对应写上数据库的名字,在后面将自己的数据库的用户名和密码因为补上。第二步就结束了。
3.获取执行sql语句的statement
4.执行sql语句的增删改查
在上面图片中,我们一般将sql单独拿出来,赋值给sql,方便操作。
5.如果是查询语句,就会有结果集返回,我们对其进行处理。
6.释放数据库的资源
按顺序依次关闭数据库的资源,防止资源的恶意占有。
主要接口或类
---DriverManger---
作用
a、注册驱动
b、获取与数据库的链接
改进注册驱动:
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
缺点:严重依赖具体的驱动类;会导致驱动被注册2次。
替代方案:Class.forName("com.mysql.jdbc.Driver");
获取与数据库的链接
DriverManager.getConnection("jdbc:mysql://localhost:3306/ssm", "root", "hang");
---Connection---
我们知道所有和数据库之间的连接我们都是通过链接的方式进行的,如果我们想要对数据库进行操作,我们就要从连接的对象中获取可以执行数据库的statement对象,实现我们的操作。
---statement---
---PreparedStatement---
我们在这里,能用PreparedStatement就不要使用Statement,上面已经很明确了PreparedStatement的优点。
---ResultSet---
作用:
代表者查询语句的查询结果集
上面就是对java连接数据库的简单介绍,下篇文章我们就会对上述的代码进行优化,解决代码中的硬编码问题,以及代码的冗余问题,我们还引入连接池强化数据连接速率。
有帮助到大家的话,关注支持一下~
感谢坚持关注的朋友
世界很大,幸好有你
欢迎在评论区留下你的问题或困惑,我将每天与你分享我的观点和心得。
聚焦最新科技咨讯,探寻未来智能领域,我是女陶。
- ?
Excel办公必备|多个表格之间快速导入数据
晚路歌
展开
对于一大部分走向职场的人来讲,Excel可能会经常用到。今天就分享一个比较实用的函数:多个表格之间快速导入数据 vlookup。
很多人不明白这个函数的用法,今天我详细讲解一下。
VLOOKUP(lookup_value,table_array,col_index_num,range_lookup)
相信很多人看到这个很蒙圈吧。那我注解一下。
lookup_value 要查找的值
table_array 要查找的区域
col_index_num 需要数据在查找区域的第几列数
range_lookup 模糊匹配/精确匹配
可能说还是有人说看不懂吧。那我们一起来看一个例子吧。
我们看这两个表格:
两个表格的数据不同需要将另外一个表的数据导入,即图中的成绩表总分导入学生表中。这时我们就利用vlookup。
我们就在学生表中进行如下操作
=VLOOKUP(D2,[成绩信息.xlsx]Sheet1!$A$1:$B$7,2,0) 我们可以看到在这实际运用中公式就是这样的。
这样我们就可以把多个表格之间快速导入数据。
在使用公式的时候我们需要注意我们选择的对象必须有一个在表格的最左侧。在我的例子中就是姓名一列必须有一个在表的最左侧,这是是两个数据在不同表或者Sheet页中需要满足。
是不是感觉一下子可以从繁琐的工作解脱,早下班不是梦啦。
如果有不懂的可以在评论区评论哦。
- ?
Java开发工程师如何在Mysql数据库中创建表
恋曲
展开
首先我们需要在数据库中创建两张表用来学习MyBatis对数据库增删改查的使用方法。如果是新安装的数据库可以直接复制我下面的sql进行表创建,如果是已使用中的数据库可能表明会与我的表名冲突,需要创建一个新的database再执行sql,也可以直接删除原来的表,如果表有外键关联需要先解除外键约束再删除。在这里我使用的连接数据库工具为Navicat,相对oracle的有SqlDevloper等。
DROP TABLE IF EXISTS TableName;
这个语句是删除表的,如果表名存在就执行删除。
SET FOREIGN_KEY_CHECKS=0;
这句sql意思是将mysql中外键检查终止,就是说FOREIGN_KEY_CHECKS=0时,外键约束失效,FOREIGN_KEY_CHECKS=1,外键约束启用。所以为了不影响以后的操作,建议在删除表之后将FOREIGN_KEY_CHECKS=1重新启用外键约束。
orders表接下来我们创建表
CREATE TABLE `orders` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL COMMENT '下单用户id',
`number` varchar(32) NOT NULL COMMENT '订单号',
`createtime` datetime NOT NULL COMMENT '创建订单时间',
`note` varchar(100) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`),
KEY `FK_orders_1` (`user_id`),
CONSTRAINT `FK_orders_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
这是一段数据库脚本,大家将这段复制到sqlPlus或者navicat中执行即可。在正式开发环境中,sql建表语句都不是我们手动写出来的,有很多免费的数据库建模工具如powerdesigner,帮助我们构建数据库模型来自动生成sql语句。非常的方便,Mybatis也有一个非常好用的插件叫做逆向工程,它可以帮我们通过sql脚本而生成对应的java 实体类,是持久层开发人员的神器啊,以后都会讲到。
create 创建 和 TABLE 表 这两个都是关键字,`orders` 是想要创建的表名,需要用单引号或双引导包起来,后面跟一个括号,括号内包含表内字段和字段的属性,括号内可以为空,那就会单独创建一张空的表。
`id` int(11) 是一种int类型的名字叫做id的字段,长度为位。比如1111这是四位,如果超过11位就不会显示。int类型可指定字段长度最大为255,非常庞大的数字。 当然也可以不指定它的长度,那么写法就是'id ' int ,唯一区别就是如果指定长度的话,前面有未被使用的位则自动填充0进去,如`id` int(11) ,它的值为11时显示就会是000000000011的形式。
varchar是一种字符数据类型,相当于java里的String,它的最大长度也是255,它的特点就是如果在括号内指定长度则为指定它的最大长度,如果有多余长度没有被占用的话他会自动根据实际情况来缩短自己长度而节省硬盘空间,虽然几位字符不会有多大,但是生产场景中的数据库中的数据量是非常大的,这是一个非常有价值的特性。另外它的实际长度是字段值得长度+1,在数据库设计时会留出一位专门用来保存它的长度,这也就是为什么能够自动缩短长度的原理。
datetime 是一种时间格式,与此相关的还有date和timestamp时间戳。那么他们有什么区别呢?
date:2018-4-22 不带时分秒的
datetime:相反,则是带时分秒的
timestamp:时间戳 (1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。)
COMMENT 关键字是我们为字段解释其含义的内容,后面通常在括号内写入字段的中文意思
NotNULL表示非空,即该字段永不为空,如果ID这种字段就不可以为空,则为数据类型的默认值也叫作缺省值。
KEY就是键,多用作的外键,它其实也是一种索引,能够帮助我们快速找到相应字段。
PRIMARY KEY为主键,主键与Key的区别就是主键通常是唯一的,在mysql中ID多为自增序列,后面在复杂项目也会用到联合主键。而Oracle的主键则是通过另一种方法叫做序列sequence,Oracle没有自增这一说而是每一次增加都是从sequence取出值来放入字段内。这一点很像是Java里面的数据结构队列。
CONSTRAINT `FK_orders_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`)
CONSTRAINT 约束,FOREIGN KEY外键,REFERENCES 关联,是为表添加外键约束关联至user表的,字段id下。
接下来我们为表插入字段的值。
INSERT INTO `orders` VALUES ('3', '1', '1000010', '2015-02-04 13:22:35', null);
INSERT INTO `orders` VALUES ('4', '1', '1000011', '2015-02-03 13:22:41', null);
INSERT INTO `orders` VALUES ('5', '10', '1000012', '2015-02-12 16:13:23', null);
insert 语句非常简单就不细说了,接下来我们创建另一张表,user表。
user表CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(32) NOT NULL COMMENT '用户名称',
`birthday` date DEFAULT NULL COMMENT '生日',
`sex` char(1) DEFAULT NULL COMMENT '性别',
`address` varchar(256) DEFAULT NULL COMMENT '地址',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8;
创建user表INSERT INTO `user` VALUES ('1', '王五', null, '2', null);
INSERT INTO `user` VALUES ('10', '张三', '2014-07-10', '1', '北京市');
INSERT INTO `user` VALUES ('16', '张小明', null, '1', '河南郑州');
INSERT INTO `user` VALUES ('22', '陈小明', null, '1', '河南郑州');
INSERT INTO `user` VALUES ('24', '张三丰', null, '1', '河南郑州');
INSERT INTO `user` VALUES ('25', '陈小明', null, '1', '河南郑州');
INSERT INTO `user` VALUES ('26', '王五', null, null, null);
插入字段信息大家最好能够按照图片上的自己敲一遍,如果执行失败的话可以复制我的文本进行创建即可。这就是两个关联的表,我们可以使用Mybatis框架对数据库进行增删改查,单表查询或多表查询练习使用。大家有不明白的地方可以下房留言回复,数据库是开发人员的一种硬实力,其中存储过程,视图触发器等对熟悉面向对象的Java程序员都是难啃的骨头,一定要掌握扎实的数据库基础才行。
- ?
java连接mysql数据库jar包怎么导入?
宁初夏
展开
工具:
mysql
jdk1.7
方法/步骤
所有的jar包都是放到web工程lib目录下,mysql-connector-java-5.1.26-bin.jar也是一样,把该JAR包拷贝到lib目录下即可
用jdbc直接链接mysql代码如下
程序正常执行后,如果可以查询到下图所示的例子,证明jar包导入及代码是没有问题的
(本文内容由百度知道网友m2ah贡献)
java表格导入数据库
-
1、只需3秒快速实现求和
-
2、如何快速填充序号
-
3、如何自动填充序号(公式法)
-
4、数据条的神奇应用
-
5、多文本快速合并
-
6、查找与替换的不同玩法
-
7、快速定位到指定区域
-
8、数据排序、工资条制作
-
9、快速筛选(模糊、精确筛选)
-
10、快速插入空行
-
11、快速删除空行
-
12.快速跳转到天涯海角
-
13、.同时查看两个Excel文件
-
14、用条件格式扮靓报表
-
15、一键插入Excel图表
-
16、批量处理行高、列宽
-
17、利用拆分功能查看数据
-
18、批量录入相同内容
-
19、工作表快速跳转
-
20、批量录入表格模板(精品课程)
-
21、Excel函数与公式的应用、公式循环引用的查找
-
22、IF函数单条件判断同比增长
-
23、用sum函数 格式相同,连续多表数据汇总
-
24、excel快捷键
-
25、VLOOKUP函数——根据销售员匹配销售额
-
26、统计各部门销售总额
-
27、统计指定条件个数
-
28、怎样输入当前日期和时间、星期数
-
29、销售业绩排名
-
30、Sumproduct函数-万能函数(销售额汇总求和)
-
31、根据销售员,地区,商品名称汇总
-
32、批量替换PPT字体
-
33、给销售额数据批量添加万元单位
-
34、一秒快速核对两列数据
-
35、快速定位到指定单元格或区域
-
36、快速制作双行标题工资条
-
37、给你的表格做个瘦身
-
38、快速打开常用的Excel文件
-
39、快速打开多个Excel文件
-
40、利用创建组—快速隐藏/展开多列数据
-
41、快速制作下拉菜单
-
42、复制粘贴表格,如何保留数据源列宽格式一致?
-
43、两列数据位置互换
-
44、1秒钟扮靓报表——如何实现表格隔行换色
-
45、快速删除重复记录——保留唯一值
-
46、快速向下填充、向右填充,文本或公式
-
47、给Excel文件添加密码
-
48、插入带图片的批注
-
49、输入公式后不计算?
-
50、如何设置单元格缩进
-
51、快速解决Excel表格总显示货币格式
-
52、批量添加万元单位
-
53、你会四舍五入么?
-
54、用RAND函数机选彩票
-
55、冻结首行你会么?
-
56、超链接的高级应用
-
57、IFERROR函数-屏蔽错误值
-
58、批量填充颜色
-
59、录入数据
-
60、快速输入工号
-
61、快速行列转置
-
62、自定义缩放界面
-
63、多个单元格同时输入
-
64、如何计算立方米?
-
65、快速制作双行标题工资条
-
66、输入带方框的√和×
-
67、快速将姓名对齐
-
68、快速输入性别
-
69、按单位职务排序
-
70、自动计算合同到期日期
-
71、计算时间间隔
-
72、日期和时间的拆分
-
73、快速处理不规范的日期格式
-
74、快速填充合并单元格
-
75、效率加倍的快捷键
-
76、快速复制表格和对象
-
77、快速创建工作表副本
-
78、快速复制序列号
-
79、快速显示公式
-
80、多个单元格同时输入
-
81、快速调整显示比例
-
82、快速自动填充
-
83、快速填充(Ctrl+E)
-
84、Ctrl与数字键结合
-
85、快速将多列数据整理为1列
-
86、快速将1列数据拆分为多列
-
87、快速定位公式
-
88、快速录入数据
-
89、快速累计求和
-
90、身份证号码显示为0怎么办?
-
91、快速制作斜线表头
-
92、文本竖向显示
-
93、神奇的监视窗口
-
94、不一样的格式刷
-
95、快速美化图表
-
96、快速生成当前日期
-
97、快速找出循环引用
-
98、快速提取信息
-
99、二维表快速转换为一维表
-
100、快速多表合并