- ?
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...
- ?
1段代码让你学会Java连接MySQL数据库增删改查
阿维娃
展开
Java连接MySQL数据库增删改查通用方法
运行环境:eclipse+MySQL
以前我们Java连接MySQL数据库都是一个数据库写一个类,类下面写好多方法,要是多个数据库,就要写多个类多个方法,导致代码编写太过于繁琐,所以为了改变这样的繁琐,我将连接数据库的方法进行了一系列的封装,使用户传入一个对象值Object就可以得到想要的。
这篇文章分享之前我还是要推荐下我自己的JAVA群:452180294 ,不管你是小白还是大牛,小编我都挺欢迎,不定期分享干货,包括我自己整理的一份2017最新JAVA资料和零基础入门教程,欢迎初学和进阶中的小伙伴
接下来我给大家讲讲如何将这个不可复用,又多重复的连接代码,封装起来,非常好用
基本思想:
我们连接数据库的时候,写的方法都是要一个个类 的去写,其中的方法不计其数,连接数据库都是需要:
Class.forName():加载驱动 ——》com.mysql.jdbc.Driver
DriverManager.getConnection():驱动管理,连接到数据库 三个属性1.数据库地址 2.数据库用户名 3.密码
createStatement():创建Statement对象
ResultSet:执行sql语句获得结果集,再遍历
那么我们为了能通用,那么其中的:数据库名,sql语句,遍历结果集要得到的结果,都是要根据不同数据库根据传入参数不同而变化的
首先每个项目开始前都要将数据库实体化,每个表都是一个实体类,表名是类名,字段为其属性,再用set和get方法这些属性
再根据反射机制,对象是我们表的实例化对象,根据我传入方法的这个参数对象,获取其中的方法,属性,属性值,类型等一系列的东西,来实现方法的封装通用
代码演示
先演示一个查询:通过传入这个表的实体类,通过一系列的放射机制,对比拼装成一个查询方法
还有一个方法就是将首字母变大写的
大家可以参考这个方法完全可以改装成剩余的插入,修改,删除
再给大家提示一下插入的方法封装重要的一点是,获取其中要插入的字段,根据插入语句拼接成一个完整的sql语句就可以完成
- ?
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连接mysql数据库jar包怎么导入?
照无眠
展开
工具:
mysql
jdk1.7
方法/步骤
所有的jar包都是放到web工程lib目录下,mysql-connector-java-5.1.26-bin.jar也是一样,把该JAR包拷贝到lib目录下即可
用jdbc直接链接mysql代码如下
程序正常执行后,如果可以查询到下图所示的例子,证明jar包导入及代码是没有问题的
(本文内容由百度知道网友m2ah贡献)
- ?
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数据库之约束的重要性
诗珊
展开
伙伴们
我们先把数据库搞完
好不好呀
你们不出声
我就当你们同意了呦!
今天分享的是
约束
约束是一种限制,它是通过对表的行或列的数据做出限制,来确保表和数据的完整性、唯一性和正确性。约束分为 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和数据库简单的面试笔试题
廖广山
展开
1.以下说法正确的是。
A. Java中所有的方法都必须在类内定义
B. Java中主方法可以不在类内定义,其他方法都必须在类内定义
C. Java中主方法必须在类内定义,其他方法不必类内定义
D. Java中的所有方法都不必在类内定义
2.Java中的源文件和编译后的文件扩展名分别是
A..c和.java B. java和.doc C. .java和.class D. .c和.class
3.以下语句中,没有创建出字符串对象的是
A.String str ; C. String str= new String();
B.String str = “Hello”; D. new String(“Hello”);
4.判断两个字符串S1,S2值是否相等的语句是
A.If(s1=s2) B. if(s1==s2) C. if(equals(s1,s2)) D. if(s1.equals(s2))
5.数据库中存储的是
A.数据 B. 数据以及数据之间的关系 C. 数据模型 D. 信息
二、填空题
1.Java是一种计算机语言程序,可以编写嵌入在网页中的______________小程序,也可以编写独立运行的_______________________应用程序。
2.Java的3个分支是j2ee、________和________。
3.带有_________修饰符的类称为最终类。
4.Java中的八种基本类型:_______、_______、_______、_______、_______、
_______、________、______。
5.DBMS是指_____________,它是位于______和___________之间的一层管理软件。
三、简答题
1.一个8升水的杯子,现有3升和5升空杯各一个,怎样得到4升水和7升水?(水不能浪费,且不能使用其他任何工具。
2.何为异常,异常处理的方法那两种?
四、程序题
1.随机生成1到10内(包含10)的整数。
2.现有“学生选课系统”数据库,学生选课的关系模式为:
学生:学号(char(10),姓名(char(20)),性别(char(2)),年龄(int ),所在系(char(20));课程:课程号(char(10)),课程名(char(20)),先行课(char(10)));
选课:学号(char(10)),课程号(char(10)),成绩(int);
请写出下列各题目的SQL语句。
1) 创建“学生”表,为年龄字段设置缺省值为20,定义性别字段的取值只能为“男”或“女”,定义学号字段为“主码”;
2)查询学生的学号,姓名,选修的课程名及成绩;
3)将学生表中去全部学生的年龄加上3岁;
答案已上传Java群285154486,学习与斗图同在。快乐学习中成长
- ?
一起来学大数据|Java与数据库之间的连接JDBC
Moses
展开
昨天我们看了数据库的使用,只不过那都是我们手工去输入的数据,今天我们用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连接数据库的简单介绍,下篇文章我们就会对上述的代码进行优化,解决代码中的硬编码问题,以及代码的冗余问题,我们还引入连接池强化数据连接速率。
有帮助到大家的话,关注支持一下~
感谢坚持关注的朋友
世界很大,幸好有你
欢迎在评论区留下你的问题或困惑,我将每天与你分享我的观点和心得。
聚焦最新科技咨讯,探寻未来智能领域,我是女陶。
- ?
如何用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插入MySql」解决方案
皮灵萱
展开
Java向MySql数据库插入万级记录时,采用的方案不同时执行速度会有所不同,数据量越大则优劣越明显。所以选取最优方案尤其重要,本文目前提供如下两种解决方案(不借用第三方框架或工具)。
1、方案一:循环逐条插入。
关键代码:
2、方案二:分批事务插入。
1.两种方案的主要区别在于,sql语句的不同、batch批和事务的使用。
单条插入sql语句:insert into Table (col1,col2...) values (val11,val12...);
多条批插入sql语句:insert intoTable (col1,col2...) values (val11,val12...),(val11,val12...),...;
2.本次测试的实例中,插入69万条数据左右,方案二要比方案一的速度快上10倍左右。具体测试得到的具体毫秒数可能不同。影响因素个人认为有如下几条:
(1)数据模型,每条数据记录的字段越多,就需要调整itemNum(每批插入的数据量,可以采用二分法找到最合适的数值),或者调整MySql数据库对每次执行sql语句的字节长度限制(网上自行搜索)。itemNum值找到最合适的,速度才可能在其他条件同等的条件下是最快的;
(2)主机配置。包括处理器性能、硬盘性能 ,mysql数据库可能也会影响到速度;
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、快速多表合并