HTML初学梳理

1html的简介

1html(HyperText Mark-up Language),超文本标记型语言,是网页的语言。

<html>

<head>设置页面信息</head>

<body>显示到页面上的内容</body>

</html>

2、标签简介

标签:html里面的对数据处理的容器,可以看作是一个方法

标签里面含有自己特定的属性,例如colorsize

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>

getpost提交,在默认情况下,提交方式是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="图片路径"/>

csshtml的结合方式

csshtml有四种结合方式

第一种:使用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"/>

 

第四种:使用htmlstyle标签,在标签里面使用语句样式操作

首先创建css文件,在css文件里面写css代码

style标签,在标签里面 @import url(css路径);

css的选择器

1css优先级

在一般情况下,优先级是后加载的优先级高

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选择器 > 标签选择器

4css的扩展选择器

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:文档对象模型

jshtml的两种结合方式

第一种:使用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");

}

7js的数组

数组:定义一个变量只能存一个值,想要存多个值,可以使用数组进行存储

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,之间如果没有赋值直接默认是空字符串

8jsstring对象

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)

13jsbom对象

1script标签放置位置

    建议放到</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

14js的全局变量和局部变量

回顾:在java里面成员变量

1)全局变量

    js里面,如果在一个script标签里面定义变量,在页面中的其他script标签里面都可以使用。(要注意上下顺序)

2)局部变量

    js的方法里面定义一个变量,这个变量只能在方法里面使用。

3)浏览器里面自带的调试工具

ie浏览器:点击键盘上f12,在页面下面出现一个条,点击控制台,出现调试的信息。

火狐浏览器:点击键盘上f12,在下面出现一个条,点击控制台,出现调试的信息。

火狐浏览器里面需要安装firebug插件

谷歌浏览器:点击键盘上的f12,在下面出现一个条,点击console,出现调试的信息。

15js的全局函数

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);

1js的函数

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));

2js的函数的重载

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));

3js的事件

事件:在html的元素里面可以触发事件调用js里面的函数

 

html的标签上面使用事件有三种方式

 

第一种:使用事件属性调用js方法

代码

  <input type="button" value="第一种方式" οnclick="add1();"/>

第二种:首先得到要绑定的标签,在使用事件的属性

代码

  //第二种方式绑定事件

  document.getElementById("buttonid").onclick = add1;

第三种:首先得到要绑定的标签,写js的代码

代码

  document.getElementById("buttonid1").onclick = function() {

   alert("aaaaa");

  };

4js的常用的事件

1onload事件和onclick事件

   onloadhtml页面在加载时候触发事件,调用响应的js方法

     <body οnlοad="test1();">

   onclick:鼠标点击事件

    <input type="text" οnclick="test2();"/>

2onfocus事件和onblur事件

   onfocus:获取焦点

   onblur:失去焦点

3onmouseover 鼠标被移到某元素之上

4onmouseout 鼠标从某元素移开

5onkeypress:点击键盘上面的某个键,调用方法

   <input type="text" id="textid1" οnkeypress="key1(event);"/>

   function key1(obj) {

  //alert(obj.keyCode);

  //如果点击键盘上面的回车键 ,调用方法  13

  if(obj.keyCode==13) {

   alert("key1");

  }

 }

5jsdom对象

1domdocument  object  model:文档对象模型

   文档:指的是标记型文档(htmlxml

   对象:在对象里面有属性和方法

    使用dom里面提供的对象里面的属性和方法,对标记型文档进行操作

   要想使用dom对象标记型文档进行操作,首先需要解析标记型文档(html为例)

    html中包含 标签、属性、文本内容

2)使用dom解析html

   解析过程:根据html的层级结构在内存中分配一个树形结构

   document对象,代表整个文档

   element对象,代表标签

   attribute属性对象

   text文本对象

   Node节点对象,是这些对象的父对象,在找不到想要使用的方法,到Node里面找

3DHTML的简介

   不是一种技术,是很多技术的简称。

   包含的技术:

    html:封装数据

    css:使用属性和属性值修改数据的样式

    ECMAScript:语句和语法

    DOM:对标记型文档进行操作

6document对象

1document对象代表整个文档

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);

7innerHTML属性

1innerHTML属性不是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();

  }

 }

 

10json的简介

1JavaScript Object  NotationJavaScript 对象表示法。json是数据的交换格式,比xml更加轻巧。

jsonjs的原生的格式,通过js操作json不需要依赖其他东西,直接对json格式进行操作。

2json数据格式

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"}]}

11js解析json

1js解析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);

2js解析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/>");

}

12json练习:人员信息的显示

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图表示实体之间的关系

实体使用矩形、在实体上面属性使用椭圆,之间的关系使用菱形

2mysql的安装和卸载

1)安装mysql 5.x版本

2mysql的安装步骤

在文档里面有安装步骤

3mysql的卸载

第一步,找到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,找到了都删除

第五步,重新启动系统

3mysql服务器的存储结构

1mysql服务器

服务器:从硬件上,服务器就是一台电脑;从软件上,在电脑上安装了服务器软件。

mysql服务器:在一台电脑上,安装了mysql数据库,这台电脑称为mysql服务器。

2mysql服务器的存储结构

有多个数据库,在每个数据库里面有多个数据库表,在每个表里面有多条记录

学习重点:对数据库、数据库表、表中的记录的操作(crud操作)

4sql语言简介

1)数据库是文件系统,使用标准sql对数据库进行操作

标准sql,在mysql里面使用语句,在oracledb2都可以使用这个语句

2)什么是sql

Structured Query Language, 结构化查询语言,对数据库进行操作

sql非过程性语言,不需要依赖于其他的条件就可以运行

比如 java里面

if(a > 5) {

System.out.....

   }

3sql的分类

第一类: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)

)

2mysql的数据类型

字符串型

VARCHARCHAR

当创建表时候,使用字符串类型,name varchar(40),指定数据的长度

varcharchar的区别

varchar的长度是可变的,比如 name varchar(5),存值 a ,直接把a存进去

char的长度是固定的,比如 name char(5),存值 b,把b存进去,后面加很多空格

大数据类型

BLOBTEXT

使用这个类型可以存储文件,一般开发,不会直接把文件存到数据库里面,存文件的路径

数值型

TINYINT SMALLINTINTBIGINTFLOATDOUBLE

对应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    |       |

 +----------+-------------+------+-----+---------+-------+

4mysql的约束有三种

第一种,非空约束 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=1username修改为QQQ,修改password999

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;

5distinct,去除表里面重复记录

语句 select distinct * from 表名;

6where子句

第一,运算符 < > >= <=

练习:查询user表里面语文成绩大于60的所有的人员

select * from user where chinese > 60;

第二,in:在范围内

练习:查询user表里面英语成绩是8090的人员的信息

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 要排序字段 ascasc可以省略,默认的情况下就是升序)

练习:对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||idfrom 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;

10mysql的可视化工具使用

1)使用工具创建数据库,创建表,向表添加记录,删除表中的记录

11mysql的关键字limit

1limit关键字查询表中的某几条记录

2limit关键字不是标准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的简介

1JDBC的简介

 

jdbcJava DataBase Connectivityjava数据库的连接

1.2 比如有一台电脑,想在电脑上安装显卡,需要显卡的驱动,由显卡生产厂商提供

 1.3 要想使用java对数据库进行操作,需要使用由数据库提供的数据库驱动

 

2JDBC的入门案例

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();

 }

3jdbcDriverManager对象

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

 第二个参数:表示连接数据库的用户名

 第三个参数:表示连接数据库用户密码

4jdbcConnection对象

4.1 代表数据库的连接,是接口,在java.sql包里面

4.2 创建statement对象Statement createStatement()

4.3 创建预编译对象 PreparedStatement

PreparedStatement prepareStatement(String sql)

5jdbcStatement对象

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

6jdbcResultSet对象

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方法之后,一行一行的向下进行遍历,在默认的情况下,只能向下,不能向上,在遍历出来的结果也是不能修改的

7jdbc的释放资源

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

    

  

9jdbc工具类的封装

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操作

没有写

11sql的注入和防止

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)

3PreparedStatement接口的父接口Statement

4)什么是预编译

5)步骤:

第一步,加载驱动,创建数据库的连接

第二步,编写sql

第三步,需要对sql进行预编译

第四步,向sql里面设置参数

第五步,执行sql

第六步,释放资源

12、使用PreparedStatement预编译对象实现crud的操作

注意地方:

第一,编写sql时候,参数使用?表示(占位符)

第二,预编译sql,设置参数的值,执行sql


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值