1、html的简介
1、html(HyperText Mark-up Language),超文本标记型语言,是网页的语言。
<html>
<head>设置页面信息</head>
<body>显示到页面上的内容</body>
</html>
2、标签简介
标签:html里面的对数据处理的容器,可以看作是一个方法
标签里面含有自己特定的属性,例如color,size等
html对文本的处理都是使用标签来实现的
size:设置文字的大小
文字大小值范围:1-7,如果值超过了7,使用还是7的效果,如果小于1的话,字体大小为1(-1除外 -1大小是2)。
1、超链接标签<a href="链接到的地址">显示在页面上的内容</a>
target:超链接的打开方式
在默认的情况下,打开方式在当前的页面打开
target里面的值:_self,当前页面打开;_blank,在新标签页打开
2、表格标签
表格标签<table>
标题标签(写在table后面)<caption>
<table>
<caption>标题内容</caption>
<tr>
<td></td>
<td></td>
</tr>
</table>
<td></td>中rowspan:跨行
代码<th rowspan="4">人员信息3人</th>
colspan:跨列
代码 <td colspan="3">统计信息3人</td>
3、表单标签<form action=""method="get"> <input type=""></form>
表单:把输入的数据提交到服务器上(存到服务器),这个过程称为表单
A: form标签:定义表单的范围
属性action:提交的服务器的地址
代码
<form action="hello.html" method="get"></form>
get和post提交,在默认情况下,提交方式是get提交
get提交方式会在地址栏携带数据,安全性很差
post提交方式地址栏不会携带数据,安全性比较高,数据在请求体里面(http协议里面比较详细)
B:输入项<input type=""name=""value=""/>:可以输入内容或者选择内容的地方
要求1:输入项里面必须要有name属性
要求2:在单选输入项和复选输入项以及下拉选择输入项里面
都需要有属性value,设置的值
第一个:普通输入项 <input type="text"/>
第二个:密码输入项 <input type="password"/>
第三个:单选输入项 <input type="radio"/>
要求:单选输入项里面必须有name属性,同时name的属性值必须要相同
设置默认选中,使用属性checked="checked"
第四个:复选输入项<input type="checkbox"/>
要求:单选输入项里面必须有name属性,同时name的属性值必须要相同
设置默认选中,使用属性checked="checked"
第五个:文件输入项,上传文件的。<input type="file"/>
第六个:隐藏项,这个值不会显示在页面上,但是提交表单也可以提交到服务器上 <input type="hidden"/>
第七个:普通按钮 <input type="button"/>可以写value属性,设置输入项的默认值
下面的两个输入项不是使用input标签进行封装的
第八个:下拉选择输入项
<select>
<option>AAAA</option>
<option>BBBB</option>
<option>CCCC</option>
</select>
使用属性selected="selected"默认选中
第九个:文本域
<textarea cols="10" rows="5"></textarea>
C:提交按钮和其他的按钮
提交按钮:<input type="submit"/>
属性 value:设置提交按钮显示的内容
重置按钮:<input type="reset"/>
属性 value:设置重置按钮显示的内容
不是做清空表单输入项的操作,使表单输入项回到初始状态
使用图片进行提交:<input type="image" src="图片路径"/>
css和html的结合方式
css和html有四种结合方式
第一种:使用html标签里面的属性 style="css的代码"
代码 <div style="background-color:red;color:blue;">
第二种:使用html的标签
<style type="text/css">
css的代码;
</style>
代码
<style type="text/css">
div {
background-color:red;
color:black;
}
</style>
第三种:使用html标签实现 link,写在head里面
首先创建css文件,在css文件里面写css代码
在html中使用link标签引入css文件
代码 <link rel="stylesheet" type="text/css" href="1.css"/>
第四种:使用html的style标签,在标签里面使用语句样式操作
首先创建css文件,在css文件里面写css代码
写style标签,在标签里面 @import url(css路径);
css的选择器
(1)css优先级
在一般情况下,优先级是后加载的优先级高
(2)格式规范:属性名称1:属性值1;属性名称2:属性值2;
(3)选择器:作用在哪个标签上(要对哪个标签里面的内容进行操作)
css三个基本选择
第一个:标签选择器
使用标签名称作为选择器
div {
background-color: red;
}
第二个:class选择器
每个html标签上面都有一个属性class,通过设置class属性的值
代码
.haha {
background-color:red;
}
第三个:id选择器
每个html标签都有一个属性id,通过设置id的属性值
代码
#hehe {
background-color:green;
}
选择器的优先级
style > id选择器 > class选择器 > 标签选择器
4、css的扩展选择器
(1)关联选择器
设置嵌套标签的样式
代码
div p {
background-color:red;
}
(2)组合选择器
设置不同的标签具有相同的样式
代码
div,p {
background-color:green;
}
(3)伪元素选择器
比如超链接为例,
状态:原始状态、鼠标放上去的状态、点击状态、点击之后的状态
:link :hover :active :visited
JavaScript
JavaScript由三部分组成
第一部分:ECMAScript 又ECMA组织制定语句,语法
第二部分:BOM broswer object model:浏览器对象模型
第三部分:DOM document object model:文档对象模型
js和html的两种结合方式
第一种:使用html中的标签 <script type="text/javascript"> js代码 </script>
代码
<script type="text/javascript">
alert("aaa");
</script>
js的注释有两种
//单行注释
/
多行注释
/
第二种:使用html的标签,引入外部的js文件[项目开发常用方式]
<script type="text/javascript" src="js文件的路径"></script>
使用第二种方式的时候有两点注意
注意一:不要在script标签里面写js代码了,不会执行
注意二:结束script标签 </script>,不要在标签内结束
代码
<script type="text/javascript" src="1.js">
//不要在script标签里面写js代码了,不会执行
alert("aaa");
</script>
js的引用类型和类型转换
引用对象
Object 对象:所有对象都由这个对象继承而来
Boolean 对象:Boolean 原始类型的引用类型
Number 对象: Number 原始类型的引用类型
类型转换
转换成字符串
转换成数字:parseInt() 和 parseFloat()
强制类型转换
Boolean(value) - 把给定的值转换成 Boolean 型;
Number(value) - 把给定的值转换成数字(可以是整数或浮点数);
String(value) - 把给定的值转换成字符串;
js的语句
在java里面语句:if 、 switch 、while do-while for
js的运算符和java不同的内容
第一个:js里面不区分整数和小数
比如 var a = 123/1000 1000,如果在java里面结果是 0
js里面的结果:123
第二个:字符串的相加和相减操作
字符串相加是字符串的拼接操作,字符串相减是真正的相减运算,如果字符串不是数字提示NaN
//字符串的相加和相减
var b = "10";
document.write(b+1); //字符串拼接
document.write("<hr/>");
document.write(b-1); //真正相减的运算
document.write("<hr/>");
var c = "a";
document.write(c-1); //NaN
第三个:boolean类型相加和相减的操作
如果布尔类型值是true,把类型当成1运算;如果布尔类型值是false,把类型当成0运算
//布尔类型相加和相减操作
var flag = true;
document.write(flag+1); // 2,当boolean类型是true时候,把类型当成1运算
document.write("<hr/>");
var flag1 = false;
document.write(flag1+1); //1,当boolean类型是false时候,把类型当成0运算
第四个:==和===区别
== 比较的是值
=== 比较的是值和类型
代码
var mm = "10";
if(mm==="10") {
alert("10");
} else {
alert("other");
}
7、js的数组
数组:定义一个变量只能存一个值,想要存多个值,可以使用数组进行存储
js里面定义数组的方式
第一个:var arr1 = [];
第二个:var arr2 = ["10",10,true]; //可以写任意的类型
第三种:var arr3 = new Array(3);//表示定义数组名称是arr3,数组的长度是3
第四种:var arr4 = new Array(4,5,6);表示定义数组名称是arr4,数组里面的值4 5 6
数组里面的属性:查看数组的长度 length
获取数组里面的值
遍历数组得到里面的值
//遍历
for(var i=0;i<arr3.length;i++) {
var a = arr3[i];
document.write(a);
document.write("<br/>");
}
数组的长度:在js里面数组的长度可变的
数组的长度是最大的下标+1,之间如果没有赋值直接默认是空字符串
8、js的string对象
(1)字符串对象
创建字符串:var a = "abc"; var b = new String("bb");
(2)属性 length 字符串的长度
(3)方法
第一类:与html相关的方法(设置字符串的样式的方法)
= bold() 使用粗体显示字符串。
document.write(a.bold());
= fontcolor() 使用指定的颜色来显示字符串。
document.write(a.fontcolor("red"));
= fontsize() 使用指定的尺寸来显示字符串。
document.write(a.fontsize(7));
= link() 将字符串显示为链接
document.write(a.link("04-练习99乘法表.html"));
第二类:与java相似的方法(在java里面也有类似的方法)
= charAt() 返回在指定位置的字符。 如果位置不存在字符,返回空字符串""
var str = "abcdefg";
document.write(str.charAt(1));
= concat() 连接字符串
document.write(str.concat(str1));
= indexOf() 检索字符串,得到检索的字符的位置,如果没有找到返回-1
var str2 = "ABCD";
document.write(str2.indexOf("R"));
= split() 把字符串分割为字符串数组
var str3 = "a-b-c";
var arr = str3.split("-");
document.write("length: "+arr.length);
= substr() 从起始索引号提取字符串中指定数目的字符。
= substring() 提取字符串中两个指定的索引号之间的字符
var str4 = "MARYJACKLUCY";
document.write(str4.substr(2,3));
//RYJ, 第一个参数表示从哪个位置开始,第二个参数表示向后取几个位置的值
document.write("<br/>");
document.write(str4.substring(2,3));
//R,第一个参数表示从哪个位置开始,第二个参数到哪个位置结束(不包含这个位置) [2,3)
13、js的bom对象
(1)script标签放置位置
建议放到</body>后面
html的解析是从上到下进行解析的,如果在head里面就获取输入项里面的值,因为还没有解析到
输入项,所以肯定得不到值。
(2)什么是bom:浏览器对象模型
第一个:navigator
浏览器的信息
第二个:screen
屏幕的信息
第三个: history
访问地址的历史信息
第四个: location
设置url
href 设置或返回完整的 URL
第五个: window( )
window对象是窗口对象,是顶层对象
方法
setInterval("执行的js代码",毫秒数) 在指定的时间内,重复执行js代码
有两个参数
第一个参数要执行的js代码(js的方法),第二个参数是时间(毫秒数)
代码
setInterval("alert('setinterval');",3000);
setTimeout("执行的js代码",毫秒数) 在指定的时间之后,执行js代码,执行一次
有两个参数
第一个参数要执行js代码(js的方法),第二个参数是时间(毫秒数)
代码
setTimeout("alert('settimeout');",3000);
clearInterval(id) 取消由 setInterval() 设置的 timeout。
clearTimeout(id) 取消由setTimeout() 方法设置的 timeout。
14、js的全局变量和局部变量
回顾:在java里面成员变量
(1)全局变量
在js里面,如果在一个script标签里面定义变量,在页面中的其他script标签里面都可以使用。(要注意上下顺序)
(2)局部变量
在js的方法里面定义一个变量,这个变量只能在方法里面使用。
(3)浏览器里面自带的调试工具
ie浏览器:点击键盘上f12,在页面下面出现一个条,点击控制台,出现调试的信息。
火狐浏览器:点击键盘上f12,在下面出现一个条,点击控制台,出现调试的信息。
火狐浏览器里面需要安装firebug插件
谷歌浏览器:点击键盘上的f12,在下面出现一个条,点击console,出现调试的信息。
15、js的全局函数
(1)不属于任何对象,可以使函数
(2)主要的函数
eval(): 把字符串当成js代码执行
var str = "alert('123456');";
//alert(str);
eval(str);
isNaN() 检查某个值是否是数字
如果是数字返回 false,如果不是一个数字返回 true。
parseInt() 解析一个字符串并返回一个整数
var str1 = "123";
alert(parseInt(str1)+1);
encodeURI() 把字符串编码为 URI
var str2 = "abc测试中文";
var encodestr2 = encodeURI(str2);
document.write(str2);
document.write("<br/>");
document.write(encodestr2);
decodeURI() 解码某个编码的 URI
var decodestr2 = decodeURI(encodestr2);
1、js的函数
(1)在java里面定义方法
public void/int 方法名称(参数列表) {
方法体和返回值;
}
(2)在js里面定义函数有三种方式
第一种:使用关键字 function 方法名称(参数列表) { 方法体和返回值 }
注意一:参数列表,不需要写类型(var),直接写参数名称
注意二:返回值,根据实际需要可以有也可以没有
代码
function test1() {
alert("123456");
}
//test1();
//实现两个数的相加
function add1(a,b) {
var sum = a+b;
return sum;
}
alert(add1(2,3));
第二种:匿名函数,使用关键字function(参数列表) { 方法体和返回值; }
代码
//第二种定义方式
var test1 = function(a,b) {
return a+b;
}
//调用函数
alert(test1(3,4));
第三种:动态函数(方法体和返回值,包含参数列表都是通过参数传递进来的)
使用js里面的内置对象 new Function("参数列表","方法体和返回值")
代码
//第三种定义方式
var param = "a,b";
var method = "var sum;sum=a+b;return sum;";
var test2 = new Function(param,method);
//调用函数
alert(test2(5,6));
2、js的函数的重载
js里面是否存在函数的重载?
第一,在js不存在重载
第二,可以使用js函数里面arguments数组模拟重载的效果
模拟重载的效果
在js里面有一个数组arguments,保存传递进来的参数,使用这个数组模拟重载的效果
代码
//模拟重载的效果
//在js函数里面有一个数组 arguments,保存传递进来的参数的
function add1() {
//alert(arguments.length);
//遍历数组
/ for(var i=0;i<arguments.length;i++) {
alert(arguments[i]);
} /
//模拟重载的效果(有几个参数,实现这几个参数的相加)
var sum = 0;
for(var i=0;i<arguments.length;i++) {
sum += arguments[i];
}
return sum;
}
//调用
alert(add1(1,2));
alert(add1(1,2,3));
alert(add1(1,2,3,4));
3、js的事件
事件:在html的元素里面可以触发事件调用js里面的函数
在html的标签上面使用事件有三种方式
第一种:使用事件属性调用js方法
代码
<input type="button" value="第一种方式" οnclick="add1();"/>
第二种:首先得到要绑定的标签,在使用事件的属性
代码
//第二种方式绑定事件
document.getElementById("buttonid").onclick = add1;
第三种:首先得到要绑定的标签,写js的代码
代码
document.getElementById("buttonid1").onclick = function() {
alert("aaaaa");
};
4、js的常用的事件
(1)onload事件和onclick事件
onload:html页面在加载时候触发事件,调用响应的js方法
<body οnlοad="test1();">
onclick:鼠标点击事件
<input type="text" οnclick="test2();"/>
(2)onfocus事件和onblur事件
onfocus:获取焦点
onblur:失去焦点
(3)onmouseover 鼠标被移到某元素之上
(4)onmouseout 鼠标从某元素移开
(5)onkeypress:点击键盘上面的某个键,调用方法
<input type="text" id="textid1" οnkeypress="key1(event);"/>
function key1(obj) {
//alert(obj.keyCode);
//如果点击键盘上面的回车键 ,调用方法 13
if(obj.keyCode==13) {
alert("key1");
}
}
5、js的dom对象
(1)dom:document object model:文档对象模型
文档:指的是标记型文档(html、xml)
对象:在对象里面有属性和方法
使用dom里面提供的对象里面的属性和方法,对标记型文档进行操作
要想使用dom对象标记型文档进行操作,首先需要解析标记型文档(html为例)
html中包含 标签、属性、文本内容
(2)使用dom解析html
解析过程:根据html的层级结构在内存中分配一个树形结构
document对象,代表整个文档
element对象,代表标签
attribute属性对象
text文本对象
Node节点对象,是这些对象的父对象,在找不到想要使用的方法,到Node里面找
(3)DHTML的简介
不是一种技术,是很多技术的简称。
包含的技术:
html:封装数据
css:使用属性和属性值修改数据的样式
ECMAScript:语句和语法
DOM:对标记型文档进行操作
6、document对象
(1)document对象代表整个文档
(2)方法
第一个:write(),向页面输出内容,可以输出html代码
document.write("aa");
document.write("<hr/>");
第二个:getElementById(): 获取标签对象,通过标签的id值进行获取
var input1 = document.getElementById("textid");
document.write(input1.value);
第三个:getElementsByName(): 根据标签里面name属性的值得到标签对象,返回数组
//getElementsByName()
var inputs1 = document.getElementsByName("name1");
//alert(inputs1.length);
//获取每个input里面的value值
for(var i=0;i<inputs1.length;i++) {
var input1 = inputs1[i];
//得到value值
alert(input1.value);
}
如果只有一个标签,使用getElementsByName返回的也是一个数组,不需要遍历,直接使用数组的下标获取值
var inputs2 = document.getElementsByName("name2");
//alert(inputs2.length);
alert(inputs2[0].value);
第四个:getElementsByTagName():根据标签的名称获取标签对象,返回数组
var inputs3 = document.getElementsByTagName("input");
//alert(inputs3.length);
//遍历数组
for(var i=0;i<inputs3.length;i++) {
var input3 = inputs3[i];
//得到标签的value
alert(input3.value);
}
如果只有一个标签,使用getElementsByTagName返回的也是一个数组,不需要遍历,直接使用数组的下标获取值
var arr = document.getElementsByTagName("input");
alert(arr[0].value);
7、innerHTML属性
(1)innerHTML属性不是dom里面属性
(2)实现什么功能
第一,获取标签里面的文本内容
var span1 = document.getElementById("spanid");
alert(span1.innerHTML);
第二,向标签里面设置内容(可以写html代码)
var div1 = document.getElementById("div1");
div1.innerHTML="<tableborder='1'><tr><td>aaa</td><td>bbb</td></tr></table>";
8、表单的提交
(1)在html中写form标签,提交方式
提交表单有三种方式
第一种方式:在form标签里面,写提交按钮 <input type="submit"/>
= 代码
<form method="get">
username: <input type="text" name="username"/>
<br/>
password: <input type="password" name="password"/>
<br/>
<input type="submit" value="提交"/>
</form>
第二种方式:在form标签里面,写普通按钮 <input type="button"/>
= 代码
//使用button进行表单的提交
function form01() {
//得到form标签
var form01 = document.getElementById("form01");
//提交form表单
form01.submit();
}
第三种方式:使用超链接提交数据
<a href="要链接的地址?参数名称1=参数的值1&参数名称2=参数的值2">超链接</a>
<a href="15-表单的提交方式二.html?username=ccc&password=123456">超链接提交数据</a>
9、表单校验
(1)规范数据的输入的格式
(2)如何进行表单的校验
第一,使用submit进行表单提交,进行表单校验
使用事件 onsubmit事件,写在form标签里面
<form method="get" οnsubmit="return checkForm();">
如何return返回的值true可以提交表单,如果返回false不会提交表单
代码
//submit表单的校验
function checkForm() {
//判断用户名不能为空
var username = document.getElementById("usernameid").value;
var password = document.getElementById("passwordid").value;
if(username == "") {
alert("用户名不能为空");
return false;
}
if(password == "") {
alert("密码不能为空");
return false;
}
return true;
}
第二,使用button进行表单校验
代码
//使用button提交表单,进行校验
function form01() {
//得到输入项里面的值,判断值是否为空,如果为空不进行提交
var username = document.getElementById("usernameid").value;
var password = document.getElementById("passwordid").value;
//如果值为空,不进行提交
if(username == "") {
alert("用户名不能为空");
} else if(password == "") {
alert("密码不能为空");
} else {
//得到form标签
var form01 = document.getElementById("form01");
form01.submit();
}
}
10、json的简介
(1)JavaScript Object Notation,JavaScript 对象表示法。json是数据的交换格式,比xml更加轻巧。
json是js的原生的格式,通过js操作json不需要依赖其他东西,直接对json格式进行操作。
(2)json数据格式
json有两种数据格式
第一种:json的对象的格式
写法 {json数据的名称1:json数据的值1,json数据的名称2:json数据的值2.....}
类似于key-value形式
名称和值之间使用冒号隔开,多个值之间使用逗号隔开
json数据的名称是字符串的类型,json数据的值 string, number, object, array, true, false, null
具体数据的格式 {"name":"zhangsan","age":20,"addr":"nanjing"}
第二种:json的数组的格式
写法 [json对象1,json对象2........]
在数组里面有多个json对象,多个json对象之间使用逗号进行隔开
具体数据的格式 [{"name":"lucy","age":20},{"name":"mary","age":30}]
(3)可以使用json的这两种格式组成更加复杂json的格式复杂的格式{"name":[{"name":"zhangsan","addr":"beijing"},{"name":"lisi","addr":"tianjin"}]}
11、js解析json
(1)js解析json的对象的数据格式
通过json对象数据格式里面的name的名称得到name对应的值
代码
//js解析json的对象格式的数据
var json1 = {"username":"lucy","age":20,"addr":"nanjing"};
//对json的对象格式数据进行操作
document.write(json1.username);
document.write("<br/>");
document.write(json1.age);
document.write("<br/>");
document.write(json1.addr);
(2)js解析json的数组的数据格式
根据数组的下标得到json对象,解析json对象,根据数据的名称得到值
遍历json数组,得到json数组里面每个json对象,解析每个json对象,根据json对象的数据的名称得到值
代码
//js解析json数组格式的数据
var json2 = [{"username":"zhangsan","age":20,"addr":"beijing"},
{"username":"lisi","age":30,"addr":"tianjin"},
{"username":"wangnwu","age":40,"addr":"nanjing"}];
//js操作数组,遍历数组,根据数组的下标得到值
//遍历json数组格式,得到的是一个json对象,解析json对象(根据名称得到值)
//得到第二个json对象里面的age的值 数组下标从0开始的
document.write(json2[1].age);
//得到第一个json对象里面的addr的值
document.write("<br/>");
document.write(json2[0].addr);
//遍历json数组的格式
document.write("<hr/>");
for(var i=0;i<json2.length;i++) {
//得到数组里面的每一个json对象
var person = json2[i];
//得到每个对象里面的值
var username = person.username;
var age = person.age;
var addr = person.addr;
document.write("username:"+username+" ; age:"+age+" ; addr:"+addr);
document.write("<br/>");
}
12、json练习:人员信息的显示
(1)把多个人员的信息存到json的数据格式里面,通过js解析json的数据格式,把所有的人员显示到页面的表格里面。
(2)[{"name":"zhangsan","age":20,"addr":"beijing"},
{"name":"lisi","age":30,"addr":"tinajin"},
{"name":"wangwu","age":40,"addr":"nanjing"}]
(3)代码
//创建json的数据的格式,用于存储人员的信息
var persons = [{"name":"zhangsan","age":20,"addr":"beijing"},
{"name":"lisi","age":30,"addr":"tinajin"},
{"name":"wangwu","age":40,"addr":"nanjing"}];
//使用js解析persons格式,把这些人员信息显示到页面上
//遍历json的数组,得到每个人员的信息
//生成表格 ,把数据放到表格里面,把表格显示到页面上
function showData() {
var tab = "<table border='1' cellpadding='10'>";
//添加表头
tab += "<tr><th>姓名</th><th>年龄</th><th>地址</th></tr>";
for(var i=0;i<persons.length;i++) {
//得到数组里面的每个json对象
var person = persons[i];
//得到每个json对象里面值
var name = person.name;
var age = person.age;
var addr = person.addr;
//生成表格
tab += "<tr><td>"+name+"</td><td>"+age+"</td><td>"+addr+"</td></tr>";
}
tab += "</table>";
//alert(tab);
//把table表格的代码显示到页面上,使用innerHTML属性
//得到div标签
var div1 = document.getElementById("div1");
//向div里面写table代码
div1.innerHTML = tab;
}
mysql数据库
1、数据库的简介
(1)数据库:一个文件系统,使用标准sql对数据库进行操作(crud)
(2)常见的数据库
oracle:是oracle公司产品,是大型的收费的数据库
db2:是ibm公司的产品,是大型的收费的数据库
SQLServer:是微软公司产品,是中型的数据库
MySQL : 在oracle收购之后6.x版本开始收费,之前的版本是免费的。
SQLite:是小型的嵌入式数据库,应用在客户端开发中,比如安卓
(3)关系数据库:存储的是实体之间的关系
非关系数据库HBase redis
比如有购物网站,有用户,订单,商品,称为实体
用户、订单和商品之间的关系称为实体之间的关系
使用er图表示实体之间的关系
实体使用矩形、在实体上面属性使用椭圆,之间的关系使用菱形
2、mysql的安装和卸载
(1)安装mysql 5.x版本
(2)mysql的安装步骤
在文档里面有安装步骤
(3)mysql的卸载
第一步,找到mysql的安装路径,找到一个文件my.ini文件找到两个路径,复制出来
basedir="C:/Program Files (x86)/MySQL/MySQL Server 5.5/"
datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/"
第二步,打开控制面板,找到安装的mysql数据库,进行卸载
第三步,找到第一步复制出来的两个路径,把这两个路径的里面的所有的文件都删除
第四步,打开注册表 regedit,搜索mysql,找到了都删除
第五步,重新启动系统
3、mysql服务器的存储结构
(1)mysql服务器
服务器:从硬件上,服务器就是一台电脑;从软件上,在电脑上安装了服务器软件。
mysql服务器:在一台电脑上,安装了mysql数据库,这台电脑称为mysql服务器。
(2)mysql服务器的存储结构
有多个数据库,在每个数据库里面有多个数据库表,在每个表里面有多条记录
学习重点:对数据库、数据库表、表中的记录的操作(crud操作)
4、sql语言简介
(1)数据库是文件系统,使用标准sql对数据库进行操作
标准sql,在mysql里面使用语句,在oracle、db2都可以使用这个语句
(2)什么是sql
Structured Query Language, 结构化查询语言,对数据库进行操作
sql非过程性语言,不需要依赖于其他的条件就可以运行
比如 在java里面
if(a > 5) {
System.out.....
}
(3)sql的分类
第一类:DDL (数据定义语言)
创建数据库,创建数据库表
常用的语句 create
第二类:DML (数据操纵语言)
对表中的记录进行增加 修改 删除操作
常用的语句 insert update delete
第三类:DCL (数据控制语言)
数据库的编程的语言
第四类:DQL (数据查询语言)
对表中的进行查询的操作
常用的语句 select
学习的主要内容:使用sql语言对数据库、数据库表、表中的记录进行增删改查(crud)操作
5、使用sql对数据库操作
(1)连接数据库
打开cmd窗口,使用命令,连接mysql数据库
命令: mysql -u root -p 密码
(2)创建数据库
语句: create database 数据库的名称;
示例:create database testdb1;
(3)查看所有的数据库
语句:show databases;
(4)删除数据库
语句:drop database 要删除的数据库的名称;
示例: drop database testdb1;
(5)切换数据库
如果想要创建一个数据库表,这个表要在一个数据库里面,所以需要切换到数据库
语句:use 要切换的数据库的名称;
示例:use testdb2;
6、使用sql对数据库表操作
(1)创建数据库表
语句 create table 表名称 (
字段 类型,
字段 类型
)
创建表 user,字段 id username password sex
create table user (
id int,
username varchar(40),
password varchar(40),
sex varchar(30)
)
(2)mysql的数据类型
字符串型
VARCHAR、CHAR
当创建表时候,使用字符串类型,name varchar(40),指定数据的长度
varchar和char的区别
varchar的长度是可变的,比如 name varchar(5),存值 a ,直接把a存进去
char的长度是固定的,比如 name char(5),存值 b,把b存进去,后面加很多空格
大数据类型
BLOB、TEXT
使用这个类型可以存储文件,一般开发,不会直接把文件存到数据库里面,存文件的路径
数值型
TINYINT 、SMALLINT、INT、BIGINT、FLOAT、DOUBLE
对应java里面
byte short int long float double
逻辑性
BIT
类似java里面的boolean
日期型
DATE:用于表示日期 1945-08-15
TIME:用于表示时间 19:10:40
下面的两个类型可以表示日期和时间
DATETIME:手动添加时间到数据表里面
TIMESTAMP:自动把时间添加到表里面
(3)查看表结构
语句 desc 表名称;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| username | varchar(40) | YES | | NULL | |
| password | varchar(40) | YES | | NULL | |
| sex | varchar(30) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
(4)mysql的约束有三种
第一种,非空约束 not null
表示数据不能为空
第二种,唯一性约束 unique
表中的记录不能重复的
第三种,主键约束 primary key
表示非空,唯一性
自动增长 auto_increment
(5)创建带约束的表
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| username | varchar(40) | NO | | NULL | |
| sex | varchar(20) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
(6)删除表
语句 drop table 要删除表的名称;
(7)查看当前的数据库里面有哪些表
语句 show tables;
7、使用sql对表中的记录进行操作(增删改查操作)
(1)向表里面添加记录 insert
语句 insert into 要添加的表名称 values(要添加的值);
注意:当添加的字段的数据类型是int类型,直接写值
如果添加的字段的类型是varchar类型和日期类型,使用单引号把值包起来
(2)修改表里面的记录 update
语句 update 表名称 set 要修改的字段的名称1=修改的值1,要修改的字段的名称2 修改的值2 where 条件
练习:修改user表里面id=1的username修改为QQQ,修改password为999
update user set username='QQQ',password='999' where id=1;
(3)删除表里面的记录 delete
语句 delete from 表名称 where 条件
练习:删除user表里面id=1的记录
delete from user where id=1;
不添加where条件,把表里面的所有的记录都删除
(4)查询表中的记录 select
语句 select 要查询的字段的名称 (*) from 表名称 where 条件
create table user (
id int,
username varchar(40),
chinese int,
english int
)
insert into user values(1,'lucy',100,30);
insert into user values(2,'mary',60,80);
insert into user values(3,'jack',90,20);
练习一:查询user表里面的所有的数据
select * from user;
练习二:查询user表里面用户名和语文成绩
select username,chinese from user;
练习三:查询user表里面id=2的数据
select * from user where id=2;
(4)别名
as 别名
select username as u1,chinese as c1 from user;
(5)distinct,去除表里面重复记录
语句 select distinct * from 表名;
(6)where子句
第一,运算符 < > >= <=
练习:查询user表里面语文成绩大于60的所有的人员
select * from user where chinese > 60;
第二,in:在范围内
练习:查询user表里面英语成绩是80、90的人员的信息
select * from user where english in (80,90);
第三,and:在where里面如果有多个条件,表示多个条件同时满足
练习:查询user表里面语文成绩是100,并且英语成绩是30mm,m的人员的信息
select * from user where chinese=100 and english=30;
第四,得到区间范围的值
练习:查询user表里面语文成绩在70-100之间的值
写法一,select * from user where chinese >=70 and chinese <=100;
写法二,select * from user where chinese between 70 and 100;
第五,like:模糊查询
练习:查询user表里面username包含a的人员信息
select * from user where username like '%a%';
徐_ ----徐撒 徐__(2个)--徐关配 %通配符
(7)查看当前的运行的数据库
select database();
(8)对表中查询的记录排序 order by
order by写在select语句的最后
第一,升序 order by 要排序字段 asc(asc可以省略,默认的情况下就是升序)
练习:对user表里面查询的数据,根据语文成绩进行升序排列
select * from user order by chinese asc;
第二,降序 order by 要排序字段 desc
练习:对user表里面的英语成绩进行降序排列
select * from user order by english desc;
8、聚集函数
(1)使用提供一些函数,直接实现某些功能
(2)常用的聚集函数
第一,count()函数
根据查询的结果,统计记录数
写法 select count(*) from ...where....
练习一;查询user表里面有多少条记录
select count(*) from user;
练习二:查询user表里面语文成绩大于60的人员有多少
select count(*) from user where chinese>60;
第二,sum()函数
求和的函数
写法 select sum(要进行求和字段) from ...where....
练习一:得到user表里面的语文的总成绩
select sum(chinese) from user;
练习二:得到user表里面语文总成绩,英语的总成绩
select sum(chinese),sum(english) from user;
select chinese+english from user;
练习三:得到user表里面语文成绩的平均分(总的成绩/总的人数)
select sum(chinese)/count(*) from user;
第三,avg()函数
计算的平均数的函数
写法 select avg(要计算平均数的字段名称) from ...
练习:得到user表里面语文成绩的平均分
select avg(chinese) from user;
第四,max()函数:计算最大值
写法 select max(字段) from...
第五,min()函数:计算最小值
写法 select min(字段) from...
select count (12||1||id) from user;用id的前提是id没有null;
练习:得到user表里面语文成绩的最高分数,英语的成绩最低分数
select max(chinese),min(english) from user;
9、分组操作
分组使用 group by 根据分组的字段
在分组的基础之上再进行条件的判断 having,后面可以写聚集函数
(1)举例说明
创建表 orders
create table orders (
id int,
name varchar(40),
price int
)
insert into orders values(1,'电视',2000);
insert into orders values(2,'电视',2000);
insert into orders values(3,'苹果',10);
insert into orders values(4,'手机',500);
insert into orders values(5,'手机',500);
insert into orders values(6,'鼠标',33);
insert into orders values(7,'鼠标',33);
(2)练习一:统计orders表里面每类商品的总的价格
select name,sum(price) from orders group by name;
(3)练习二:对商品进行分类,得到每类商品的总价格大于66的商品
select name,sum(price) from orders where sum(price)>66 group by name;
上面的语句在逻辑上没有问题,在语法上,where里面不能写聚集函数,报错
正确的写法:
select name,sum(price) from orders group by price having sum(price)>66;
10、mysql的可视化工具使用
(1)使用工具创建数据库,创建表,向表添加记录,删除表中的记录
11、mysql的关键字limit
(1)limit关键字查询表中的某几条记录
(2)limit关键字不是标准sql的关键字,只能在mysql数据库里面使用,实现分页的功能
在oracle里面特有关键字 rownum
在sqlserver里面特有关键字 top
(3)使用limit查询前几条记录
写法: limit 前几条记录 limit 3
练习:查询user表里面前三条记录
select * from user limit 3;
select * from user limit 0,3;
(4)使用limit查询第几条到第几条记录
写法: limit 第一个参数,第二个参数
第一个参数开始的记录数的位置,从0开始的
第二个参数从开始的位置向后获取几条记录
JDBC的简介
1、JDBC的简介
jdbc:Java DataBase Connectivity,java数据库的连接
1.2 比如有一台电脑,想在电脑上安装显卡,需要显卡的驱动,由显卡生产厂商提供
1.3 要想使用java对数据库进行操作,需要使用由数据库提供的数据库驱动
2、JDBC的入门案例
2.1 使用jdbc对数据库进行操作步骤是固定的
2.1.1 使用到类和接口
DriverManageryyyyyyyyy
Connection
Statement
ResultSet
2.2 jdbc的操作步骤
第一步,加载数据库的驱动
DriverManager里面
registerDriver(Driver driver)
第二步,创建与数据库的连接
DriverManager里面
getConnection(String url, String user, String password)
第三步,编写sql语句
第四步,执行sql语句
Statement里面
executeQuery(String sql)
第五步,释放资源(关闭连接)
2.3 使用jdbc实现查询的操作
2.3.1 代码
public static void main(String[] args) throws Exception {
//加载驱动
DriverManager.registerDriver(new Driver());
//创建连接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test01", "root", "root");
//编写sql
String sql = "select * from user";
//执行sql
//得到statement
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
//遍历结果集得到每条记录
while(rs.next()) {
int id = rs.getInt("id");
String username = rs.getString("username");
int chinese = rs.getInt("chinese");
int english = rs.getInt("english");
System.out.println(id+" :: "+username+" :: "+chinese+" :: "+english);
}
//释放资源
rs.close();
stmt.close();
conn.close();
}
3、jdbc的DriverManager对象
3.1 在java.sql包里面
3.2 加载数据库的驱动
registerDriver(Driver driver) :参数是数据库的驱动,这个驱动是由数据库提供的
(1)这个方法在实际开发中,一般不使用,因为这个方法会加载驱动两次
(2)一般在开发中使用反射的方式加载数据库的驱动
Class.forName("com.mysql.jdbc.Driver");
3.3 得到数据库的连接
getConnection(String url, String user, String password),返回Connection
(1)有三个参数
第一个参数:表示要连接的数据库
写法:jdbc:mysql://数据库的ip:数据库的端口号/连接的数据库的名称
jdbc:mysql://localhost:3306/testdb2
简写的方式:jdbc:mysql:///testdb2(使用范围:连接的数据库是本机,端口是3306)
第二个参数:表示连接数据库的用户名
第三个参数:表示连接数据库用户密码
4、jdbc的Connection对象
4.1 代表数据库的连接,是接口,在java.sql包里面
4.2 创建statement对象Statement createStatement()
4.3 创建预编译对象 PreparedStatement
PreparedStatement prepareStatement(String sql)
5、jdbc的Statement对象
5.1 执行sql的对象,接口,在java.sql包里面
5.2 执行查询操作方法
ResultSet executeQuery(String sql) ,返回查询的结果集
5.3 执行增加 修改 删除的方法
int executeUpdate(String sql) ,返回成功的记录数
5.4 执行sql语句的方法
boolean execute(String sql) ,返回是布尔类型,如果执行的是查询的操作返回true,否则返回的false
5.5 执行批处理的方法
addBatch(String sql):把多个sql语句放到批处理里面
int[] executeBatch():执行批处理里面的所有的sql
6、jdbc的ResultSet对象
6.1 代表查询之后返回的结果,接口,在java.sql包里面
类似于使用select语句查询出来的表格
+------+----------+---------+---------+
| id | username | chinese | english |
+------+----------+---------+---------+
| 1 | lucy | 100 | 30 |
| 2 | mary | 60 | 80 |
| 3 | jack | 70 | 40 |
| 4 | zhangsan | 40 | 70 |
| 5 | lisi | 40 | 70 |
| 6 | wangwu | 40 | 70 |
+------+----------+---------+---------+
6.2 遍历结果集
next()
6.3 得到数据的具体值
getXXX
(1)比如数据是string类型,使用getString("字段的名称")
比如数据是int类型,使用getInt("字段的名称")
比如不知道数据的类型,使用getObject("字段的名称")
6.4 结果集的遍历方式
在最开始的时候在第一行之前,当执行了next方法之后,一行一行的向下进行遍历,在默认的情况下,只能向下,不能向上,在遍历出来的结果也是不能修改的
7、jdbc的释放资源
7.1 关闭的原则:谁最先打开,谁最后关闭
7.2 关闭资源的规范的写法
finally {
//释放资源
if(rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
rs = null;
}
if(stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
stmt = null;
}
if(conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
conn = null;
}
}
8、使用jdbc进行crud操作
(1)实现对数据库表记录进行查询的操作
executeQuery(sql)
(2)实现对数据库表记录进行增加的操作
executeUpdate(sql)
insert into user value(id,name,....);
(3)实现对数据库表记录进行修改的操作
executeUpdate(sql)
update user set username='QQQ',password='999' where id=1;
(4)实现对数据库表记录进行删除的操作
* executeUpdate(sql)
delete from user where id=1;k
9、jdbc工具类的封装
9.1 当在很多的类里面有相同的代码,可以把相同的代码提取到一个工具类里面,在类里面直接调用工具类里面的方法实现
9.2 在jdbc实现crud操作的代码里面,首先得到数据库连接,和释放资源的代码是重复的,所以进行封装
9.3 可以把数据库的一些信息,写到配置文件里面,在工具类读取配置文件得到内容一般使用properties格式文件作为存储数据库信息的文件有两种方式读取配置文件:
第一种,使用properties类
(1)代码
//创建properties对象
Properties p = new Properties();
//文件的输入流
InputStream in = new FileInputStream("src/db.properties");
//把文件的输入流放到对象里面
p.load(in);
String drivername = p.getProperty("drivername");
String url = p.getProperty("url");
String username = p.getProperty("username");
String password = p.getProperty("password");
第二种,使用ResourceBundle类
* 使用范围:首先读取的文件的格式需要时properties,文件需要放到src下面
(1)代码
String drivername = ResourceBundle.getBundle("db").getString("drivername");
String url = ResourceBundle.getBundle("db").getString("url");
String username = ResourceBundle.getBundle("db").getString("username");
String password = ResourceBundle.getBundle("db").getString("password");
9.4 代码
public static String drivername;
public static String url;
public static String username;
public static String password;
//在类加载时候,执行读取文件的操作
static {
drivername = ResourceBundle.getBundle("db").getString("drivername");
url = ResourceBundle.getBundle("db").getString("url");
username = ResourceBundle.getBundle("db").getString("username");
password = ResourceBundle.getBundle("db").getString("password");
}
10、使用jdbc的工具类实现crud操作
没有写
11、sql的注入和防止
11.1 模拟登录的效果
(1)登录的实现的步骤
首先,输入用户名和密码
第二,拿到输入的用户名和密码,到数据库里面进行查询,如果用户名和密码都正确,才表示登录成功;
但是如果用户名和密码,有一个是错误的,表示登录失败。
11.2 演示sql的注入
(1)在登录时候,用户名里面输入 bbb' or '1=1,因为在表里面有一个用户是bbb,可以登录成功因为输入的内容,被作为sql语句的一个条件,而不是作为整个用户名。
select * from user where username='bbb' or '1=1' and password='rrr'
11.3 防止sql的注入
(1)使用PreparedStatement预编译对象防止sql注入
(2)创建PreparedStatement对象 prepareStatement(String sql)
(3)PreparedStatement接口的父接口Statement
(4)什么是预编译
(5)步骤:
第一步,加载驱动,创建数据库的连接
第二步,编写sql
第三步,需要对sql进行预编译
第四步,向sql里面设置参数
第五步,执行sql
第六步,释放资源
12、使用PreparedStatement预编译对象实现crud的操作
注意地方:
第一,编写sql时候,参数使用?表示(占位符)
第二,预编译sql,设置参数的值,执行sql