XML

eXtendsible markup language 可扩展的标记语言

一、Xml简述和作用

作用:

  1. 可以用来保存数据
  2. 做配置文件(Tomcat)
  3. 可以传输载体(客户端和服务器端之间)

结构分析:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0" encoding="UTF-8"?>
<stus>
<stu>
<name>lisi</name>
<age>15</age>
<desc>我是老大</desc>
</stu>
</stus>

<stus>
<stu>
<name>liming</name>
<age>17</age>
<desc>我是老二</desc>
</stu>
</stus>


二、定义xml

其实就是一个文件,文件的后缀为 .xml

version : 解析这个xml的时候,使用什么版本的解析器解析
               <?xml version="1.0" ?>

encoding : 解析xml中的文字的时候,使用什么编码来翻译
               <?xml version="1.0" encoding="gbk/UTF-8/big5" ?>

   standalone  : no - 该文档会依赖关联其他文档 ,  yes-- 这是一个独立的文档
               <?xml version="1.0" encoding="gbk" standalone="no" ?>

三、encoding详解(UTF-8 万岁!)

默认文件保存的时候,使用的是GBK的编码保存。

所以要想让我们的xml能够正常的显示中文,有两种解决办法

  1. 让encoding也是GBK 或者 gb2312 .

  2. 如果encoding是 utf-8 , 那么保存文件的时候也必须使用utf-8

  3. 保存的时候见到的ANSI 对应的其实是我们的本地编码 GBK。

为了通用,建议使用UTF-8编码保存,以及encoding 都是 utf-8

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0" encoding="UTF-8"?>
<stus>
<stu>
<name>lisi</name>
<age>15</age>
<desc>我是老大</desc>
</stu>
</stus>

<stus>
<stu>
<name>liming</name>
<age>17</age>
<desc>我是老二</desc>
</stu>
</stus>

四、XML元素定义(标签)

类似于h5的标签(<>里面的),但是可以**自己写标签!**(可扩展)。

XML 命名规则:

名称可以含字母、数字以及其他的字符 
名称不能以数字或者标点符号开始 
名称不能以字符 “xml”(或者 XML、Xml)开始 
名称不能包含空格 

五、XML属性定义

定义在元素里面, <元素名称 属性名称=”属性的值”></元素名称>

1
2
3
4
5
6
7
8
9
10
11
12
	
<stus>
<stu id="10086">
<name>张三</name>
<age>18</age>
</stu>

<stu id="10087">
<name>李四</name>
<age>28</age>
</stu>
</stus>

六、注释

与html的注释一样。

<!-- --> 
如: 

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- 
        //这里有两个学生
        //一个学生,名字叫张三, 年龄18岁, 学号:10086
        //另外一个学生叫李四  。。。
     -->

xml的注释,不允许放置在文档的第一行。 必须在文档声明的下面


七、CDATA区(服务器给客户端返回)

  • 非法字符

    严格地讲,在 XML 中仅有字符 “<”和”&” 是非法的。
    所以用以下两种方式来代替(<&)
    < <
    & &

如果某段字符串里面有过多的字符, 并且里面包含了类似标签或者关键字的这种文字,不想让xml的解析器去解析。 那么可以使用CDATA.

使用 ![CDATA[]]让<a href="http://www.baidu.com">我爱黑马训练营</a>变为普通字符串

1
<des><![CDATA[<a href="http://www.baidu.com">我爱黑马训练营</a>]]></des>

JDBC中的JAVAEE结构

一、JavaEE结构

客户端-服务器端


二、Dao模式(Data Access Object 数据访问对象)

  • 1.现将数据库和java连接的外接jar导入。将第一讲的类JDBC放入util包内,并且导入properties文件(student改为新的数据库user)。
  • 2.新建数据库为user,建立一个属性有id/name/password的表t_user

  • 3.建立四个包:dao(里面声明数据库访问规则) impl(具体实现早前定义的规则) test(直接使用实现) util
  • 4.dao包内建立一个UserDao的接口
1
2
3
4
5
6
7
8
9
package dao;

import java.sql.SQLException;

public interface UserDao {

void findAll() throws SQLException; //里面写具体要干的方法

}
  • 5.impl包内建立一个UserDaoImp类—>UserDao接口
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39

package impl;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.Statement;
import dao.UserDao;
import util.JDBC;
public class UserDaoImp implements UserDao{ ///实现UserDao的接口 去完成具体实现代码

@Override
public void findAll() throws SQLException {
//1.获得连接对象
java.sql.Connection conn=JDBC.getConn();

//2.根据连接对象,得到statement
java.sql.Statement st=null;
try {
st = conn.createStatement();
} catch (Exception e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}

//3.执行sql语句,返回ResultSet
String sql="select * from t_user"; //写sql语句
ResultSet rs = st.executeQuery(sql);//返回给ResultSet对象 st连接对象去调用Query方法

//4.遍历
while(rs.next())
{
int id=rs.getInt("id");
String name=rs.getString("name");
String age=rs.getString("password");
System.out.println("id="+id+" name="+name+" age="+age);
}

}
}
  • 6.test包内建立testUserDaoImpl类去使用Junit单元测试
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package test;
import java.sql.SQLException;
import org.junit.Test;
import dao.UserDao;
import impl.UserDaoImp;
public class testUserDaoImpl {

@Test //点击项目右键选择Junit单元测试的(4)---然后@Test即可
public void testFindAll() throws SQLException
{
UserDao dao=new UserDaoImp(); //面向接口编程
dao.findAll(); //对象调用方法
}

}

  • 7.util包内存放的就是原来写好的JDBC类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
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
84
85
package util;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.Driver;
import com.mysql.jdbc.Statement;
public class JDBC{
//写在外面好更改
static String driverClass=null;
static String url=null;
static String name=null;;
static String password=null;

static{

//1.创建一个属性配置对象
Properties properties=new Properties();

InputStream is=JDBC.class.getClassLoader().getResourceAsStream("properties"); //类.class.getClassLoader().getResourceAsStream("文件名");
//2.导入输入流
try {
properties.load(is); //load方法加载
} catch (IOException e) {
e.printStackTrace();
}

//3.调用方法读取文档里面的url/name/password等
driverClass=properties.getProperty("driverClass");
url=properties.getProperty("url");
name=properties.getProperty("name");
password=properties.getProperty("password");
}

public static java.sql.Connection getConn(){
java.sql.Connection conn=null;
//1.注册驱动
//DriverManager.registerDriver(new Driver()); //需要一个参数 这个参数是java.sql.jdbc.Driver
try {
Class.forName(driverClass);
} catch (ClassNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
//2.建立连接(url协议+数据库,user账号,password密码)
try {
conn=DriverManager.getConnection(url,name,password);
} catch (SQLException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
return conn;
}

public static void main(String[] args) throws SQLException{
java.sql.Connection conn = getConn();
//3.创建statement,跟数据库打交道,一定需要这个对象
java.sql.Statement st=conn.createStatement();

//4.执行查询
String sql="select * from s_stu";
ResultSet rs=st.executeQuery(sql);

//5.遍历每一条查询
while(rs.next()) //是否可以移动到下一行
{
int id=rs.getInt("id"); //获得id
String name=rs.getString("name"); //获得name
int age=rs.getInt("age"); //获得age
System.out.println("id="+id+" name="+name+" age="+age);
}

//6.释放
rs.close();
}

public static void release(java.sql.Connection conn, java.sql.Statement st, ResultSet rs) {
// TODO 自动生成的方法存根

}
}
  • 8.properties文件内内容:
1
2
3
4
driverClass=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost/user
name=root
password=njdxrjgc7777777.

代码实现框架:


三、增加登录界面

1. Dao包的UserDao类增加一个 login方法

1
void login(String username,String password) throws SQLException;

2. impl包的UserDaoImp增加一个实现方法(只是更改了sql语句)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

public void login(String username,String password) throws SQLException {
//1.获得连接对象
java.sql.Connection conn=JDBC.getConn();

//2.根据连接对象,得到statement
java.sql.Statement st=null;
try {
st = conn.createStatement();
} catch (Exception e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}

//3.执行sql语句,返回ResultSet
String sql="select * from t_user where name='"+ username +"' and password='"+ password +"'"; //写sql语句
ResultSet rs = st.executeQuery(sql);//返回给ResultSet对象 st连接对象去调用Query方法

//4.遍历
if(rs.next())
{
System.out.println("成功");
}
else
{
System.out.println("失败");
}

}

3. test包内的testUserDaoImpl类增加一个调用方法(dao.login(“xxx”,”yyy”))

1
dao.login("admin","10086");


四、statement安全问题

执行原理:是进行拼接sql语句的过程(先拼接,后执行)


五、PreparedStatement

更改目录代码(主要是2.3步更改)

  • 原来的statement是先创建statement对象,然后书写sql语句最后进行调用executeQuery()方法
  • 现在的preparedstatement是先写sql语句(判定条件都写?),然后调用方法去检验,之后使用setString()方法进行,最后调用executeQuery()方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public void login(String username,String password) throws SQLException {
//1.获得连接对象
java.sql.Connection conn=JDBC.getConn();

//2.预先对sql语句校验(?把它认为是字符串)
String sql="select * from t_user where name=? and password=?"; //写sql语句 "
java.sql.PreparedStatement ps=conn.prepareStatement(sql);
//?对应的索引从1开始
ps.setString(1, username);
ps.setString(2, password);

ResultSet rs = ps.executeQuery();//返回给ResultSet对象 st连接对象去调用Query方法

//4.遍历
if(rs.next())
{
System.out.println("成功");
}
else
{
System.out.println("失败");
}

}

  • 总结:

1. 先写sql语句(增删查改)

1
String sql="select * from t_user where name=? and password=?";  //写sql语句    "

2. 预先对sql语句校验(?把它认为是字符串)

1
2
3
java.sql.PreparedStatement  ps=conn.prepareStatement(sql);
ps.setString(1, username);
ps.setString(2, password);

3. 调用方法进行执行

1
ResultSet rs = ps.executeQuery();

六、利用preparedstatment—-增删查改

1. dao包里面的UserDao类里面写增删查改的方法

1
2
3
4
5
6
7
8
9
10
11
12
public interface UserDao {

void update(int id , String name); //更新(利用id去更新)

void delete(int id); //删除(利用id去删除)

void insert(String userName , String password); //插入(id可以通过sql语句自己写)

void findAll(); //查询展示所有的

void login(String username , String password); //登录
}

2. impl包里面的UserDaoImpl类里面写增删查改的具体实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
public class UserDaoImpl implements UserDao{

@Override
public void findAll() {
Connection conn = null;
Statement st = null;
ResultSet rs = null;
try {
//1. 获取连接对象
conn = JDBCUtil.getConn();
//2. 创建statement对象
st = conn.createStatement();
String sql = "select * from t_user";
rs = st.executeQuery(sql);

while(rs.next()){
String userName = rs.getString("username");
String password = rs.getString("password");
System.out.println(userName+"="+password);
}

} catch (Exception e) {
e.printStackTrace();
}finally {
JDBCUtil.release(conn, st, rs);
}
}

@Override
public void login(String username, String password) { //登录

Connection conn = null;
Statement st = null;
ResultSet rs = null;
try {
//1. 获取连接对象
conn = JDBCUtil.getConn();
//2. 创建statement对象
String sql = "select * from t_user where username=? and password=?";

//预先对sql语句执行语法的校验, ? 对应的内容,后面不管传递什么进来,都把它看成是字符串。 or select
PreparedStatement ps = conn.prepareStatement(sql);
//? 对应的索引从 1 开始。
ps.setString(1, username);
ps.setString(2, password);

rs = ps.executeQuery();
if(rs.next()){
System.out.println("登录成功");
}else{
System.out.println("登录失败");
}

} catch (Exception e) {
e.printStackTrace();
}finally {
JDBCUtil.release(conn, st, rs);
}
}




@Override
public void insert(String userName, String password) { //插入
Connection conn = null;
PreparedStatement ps = null;

try {
conn = JDBCUtil.getConn();
String sql = "insert into t_user values(null , ? , ?)";
ps = conn.prepareStatement(sql);

//给占位符赋值 从左到右数过来,1 代表第一个问号, 永远你是1开始。
ps.setString(1, userName);
ps.setString(2, password);


int result = ps.executeUpdate();
if(result>0){
System.out.println("添加成功");
}else{
System.out.println("添加失败");
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
JDBCUtil.release(conn, ps);
}
}

@Override
public void delete(int id) { //删除
Connection conn = null;
PreparedStatement ps = null;

try {
conn = JDBCUtil.getConn();
String sql = "delete from t_user where id = ?";
ps = conn.prepareStatement(sql);

//给占位符赋值 从左到右数过来,1 代表第一个问号, 永远你是1开始。
ps.setInt(1, id);


int result = ps.executeUpdate();
if(result>0){
System.out.println("删除成功");
}else{
System.out.println("删除失败");
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
JDBCUtil.release(conn, ps);
}
}

@Override
public void update(int id, String name) { //更新
Connection conn = null;
PreparedStatement ps = null;

try {
conn = JDBCUtil.getConn();
String sql = "update t_user set username=? where id =?";
ps = conn.prepareStatement(sql);

//给占位符赋值 从左到右数过来,1 代表第一个问号, 永远你是1开始。
ps.setString(1, name);
ps.setInt(2, id);


int result = ps.executeUpdate();
if(result>0){
System.out.println("更新成功");
}else{
System.out.println("更新失败");
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
JDBCUtil.release(conn, ps);
}
}


}

3. test包里面的TestUserDaoImpl类里面写增删查改的直接调用方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
public class TestUserDaoImpl {
@Test
public void testInsert(){ //测试插入

UserDao dao = new UserDaoImpl();

dao.insert("aobama", "911");
}

@Test
public void testUpdate(){ //测试更新

UserDao dao = new UserDaoImpl();

dao.update(2, "itheima");
}

@Test
public void testDelete(){ //测试删除

UserDao dao = new UserDaoImpl();

dao.delete(30);
}

@Test
public void testFindAll(){ //测试查询所有

//面向父类编程 接口编程
UserDao dao = new UserDaoImpl(); //体现多态的特征
dao.findAll();
}

@Test
public void testLogin(){
UserDao dao = new UserDaoImpl();
dao.login("admin", "100234khsdf88' or '1=1");
}

}

数据库的CRUD

数据库(sql)—-增删查改(CRUD)

  • 开始的数据库:

其中四个增删查改的操作

  • insert(插入)

       //插入全部
    insert into t_stu (id,name,age) 
    values ('4','wangqiang',28)    
       //插入一部分
    insert into t_stu (name,age) 
    values ('wangqiang',28)
  • delete(删除)

    delete 
    from s_stu
    where id=6    
  • query(查询)

    select  */列/行
    from t_stu(表)
    where  name='wangwu'
  • update(更新)

    update t_stu(表)
    set id=6
    where age=5;

一、查询

查询的sql语句:

1
String sql="select * from s_stu where name='lisi'";  //写sql语句

完整代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package CRUDlianxi;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.Statement;
public class MainTest {
public static void main(String[] args) throws SQLException {

//1.获得连接对象
java.sql.Connection conn=JDBC.getConn();

//2.根据连接对象,得到statement
java.sql.Statement st=conn.createStatement();

//3.执行sql语句,返回ResultSet
String sql="select * from s_stu where name='lisi'"; //写sql语句
ResultSet rs=st.executeQuery(sql); //返回给ResultSet对象 st连接对象去调用Query方法

//4.遍历
while(rs.next()) //判断是不是有下一个
{
int id=rs.getInt("id");
String name=rs.getString("name");
int age=rs.getInt("age");
System.out.println("id="+id+" name="+name+" age="+age);
}

}
}

查询结果如下:


二、修改

  主要是更改为st调用executeUpdate(sql)方法,结果返回给一个整数rs,判断rs得知结果修改正确与否

1
2
3
4
5
6
7
8
9
10
11
12
//3.执行sql语句,返回ResultSet
String sql="update s_stu set id=22 where age=18"; //写sql语句
int rs=st.executeUpdate(sql); //返回给ResultSet对象 st连接对象去调用Query方法

//4判断是不是修改正确
if(rs >0 ){
System.out.println("更新成功");
}
else
{
System.out.println("更新失败");
}

完整代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package CRUDlianxi;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.Statement;
public class MainTest {
public static void main(String[] args) throws SQLException {

//1.获得连接对象
java.sql.Connection conn=JDBC.getConn();

//2.根据连接对象,得到statement
java.sql.Statement st=conn.createStatement();

//3.执行sql语句,返回ResultSet
String sql="update s_stu set id=22 where age=18"; //写sql语句
int rs=st.executeUpdate(sql); //返回给ResultSet对象 st连接对象去调用Query方法

//4判断是不是修改正确
if(rs >0 ){
System.out.println("更新成功");
}
else
{
System.out.println("更新失败");
}

}
}

修改结果如下:

修改之后数据库的样子:


三、删除

  和修改操作相比只是sql语句不同,调用的方法都相同。

1
2
3
4
5
6
7
8
9
10
11
//3.执行sql语句,返回ResultSet
String sql="delete from s_stu where id=22"; //写sql语句
int result = st.executeUpdate(sql);//返回给ResultSet对象 st连接对象去调用Query方法

//4判断是不是删除正确
if(result >0 ){
System.out.println("删除成功");
}
else{
System.out.println("删除失败");
}

完整代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package CRUDlianxi;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.Statement;
public class MainTest {
public static void main(String[] args) throws SQLException {

//1.获得连接对象
java.sql.Connection conn=JDBC.getConn();

//2.根据连接对象,得到statement
java.sql.Statement st=conn.createStatement();

//3.执行sql语句,返回ResultSet
String sql="delete from s_stu where id=22"; //写sql语句
int result = st.executeUpdate(sql);//返回给ResultSet对象 st连接对象去调用Query方法

//4判断是不是删除正确
if(result >0 ){
System.out.println("删除成功");
}
else{
System.out.println("删除失败");
}

}
}

删除结果如下:

删除之后数据库的样子:


四、插入

  和修改操作相比只是sql语句不同,调用的方法都相同。

1
2
3
4
5
6
7
8
9
10
//3.执行sql语句,返回ResultSet
String sql="insert into s_stu (id,name,age) values (66,'wangqiang',28)"; //写sql语句
int result = st.executeUpdate(sql);//返回给ResultSet对象 st连接对象去调用Query方法

//4判断是不是删除正确
if(result >0 ){
System.out.println("添加成功");
}else{
System.out.println("添加失败");
}

完整代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package CRUDlianxi;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.Statement;
public class MainTest {
public static void main(String[] args) throws SQLException {

//1.获得连接对象
java.sql.Connection conn=JDBC.getConn();

//2.根据连接对象,得到statement
java.sql.Statement st=conn.createStatement();

//3.执行sql语句,返回ResultSet
String sql="insert into s_stu (id,name,age) values (66,'wangqiang',28)"; //写sql语句
int result = st.executeUpdate(sql);//返回给ResultSet对象 st连接对象去调用Query方法

//4判断是不是删除正确
if(result >0 ){
System.out.println("添加成功");
}else{
System.out.println("添加失败");
}

}
}

插入结果如下:

插入之后数据库的样子:


代码步骤总结:

  1. 需要去拷贝JDBC文件内的JDBC类还有properties文件(有url/name/password等),之后导入mysql和java的jar连接包。

  1. 根据类.getConn()方法—>连接对象conn
    java.sql.Connection conn=JDBC.getConn();
  2. 根据对象调取createStatement()方法—>关键对象st
    java.sql.Statement st=conn.createStatement();
  3. 然后编写sql语句—>关键对象st调用相关方法(SQL)
    1
    2
    String sql="xxxx";  //写sql语句		
    int result = st.executeUpdate(sql);//返回给ResultSet对象 st连接对象去调用Query方法
  4. 按查询的话可以遍历输出答案,如果是其他三种就可以让返回int整数判断是不是成功修改。
if(result >0 )
{
    System.out.println("添加成功");
}
else
{    
    System.out.println("添加失败");
}

数据库

一、数据库分类

  1. mysql:开源免费(.7之前)的适用于中小型企业的免费数据库。最后sun公司被oracle收购。
  2. mariadb:有mysql创作人提出的相当于mysql开源版本的一个分支(命令基本一样)
  3. oracle:甲骨文公司的商业收费软件,适用于大型电商网站
  4. db2:IBM公司解决软件和硬件方案的服务器架构,适用于银行系统
  5. sql server:windows里面的政府网站asp.net,大学教学使用(图形化界面)
  6. sybase:被淘汰

二、关系型数据库和非关系型数据库区别

  • 非关系型数据库(NOSQL)
    key:value
  • 关系型数据库(E-R图)
  1. 实体:方框
  2. 属性:椭圆
  3. 关系:菱形


三、mysql的SQL语句(结构化查询语言)

DDL(数据定义语言):定义数据库、数据表它们的结构

1
create(创建) drop(删除) alter(修改)

DML(数据操纵语言):主要对数据

1
insert(插入) update(修改) delete(删除)

DCL(数据控制语言):定义访问权限

1
grant(授权)

DQL(数据查询语言)

1
select(查询) from子句 where子句

四、数据库的概述图

JDBC的工具类

一、释放资源

  主要是在所有的操作结束之后,需要释放资源(close()方法)

1
2
3
4
5
6
7
8
9
10
11
12
13

if (rs != null) //添加一个判断rs对象是不是空(防止一行都没有)
{
try
{
rs.close();
}
catch (SQLException sqlEx)
{
} // ignore

rs = null;
}

二、 驱动注册#

  原来的DriverManager.registerDriver(new com.mysql.jdbc.Driver());
Driver 这个类里面有静态代码块,一上来就执行了,所以等同于我们注册了两次驱动。 其实没这个必要的。
//静态代码块 —> 类加载了,就执行。

最后形成以下代码即可。
Class.forName("com.mysql.jdbc.Driver");    
1
2
3
4
5
6
7
8
//1.注册驱动
//DriverManager.registerDriver(new Driver()); //需要一个参数 这个参数是java.sql.jdbc.Driver
try {
Class.forName("com.mysql.jdbc.Driver"); //直接使用forName方法
} catch (ClassNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}

三、连接对象整合

  其实就是把1注册驱动和2建立连接拿出来专门做一个getconn()方法,方便将前两步整合在一起。第三步开始只需要调用方法得到结果就可以。

完整代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
package lianxi;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.Driver;
import com.mysql.jdbc.Statement;
public class JDBC{

//写在外面好更改
static String url="jdbc:mysql://localhost/student";
static String name="root";
static String password="njdxrjgc7777777.";

public static java.sql.Connection getConn(){ //新建一个方法整合
java.sql.Connection conn=null;

//1.注册驱动
//DriverManager.registerDriver(new Driver()); //需要一个参数 这个参数是java.sql.jdbc.Driver
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}

//2.建立连接(url协议+数据库,user账号,password密码)
try {
conn=DriverManager.getConnection(url,name,password);
} catch (SQLException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
return conn;
}

public static void main(String[] args) throws SQLException{
java.sql.Connection conn = getConn(); //创建conn去得到刚才那个方法的结果
//3.创建statement,跟数据库打交道,一定需要这个对象
java.sql.Statement st=conn.createStatement();

//4.执行查询
String sql="select * from s_stu";
ResultSet rs=st.executeQuery(sql);

//5.遍历每一条查询
while(rs.next()) //是否可以移动到下一行
{
int id=rs.getInt("id"); //获得id
String name=rs.getString("name"); //获得name
int age=rs.getInt("age"); //获得age
System.out.println("id="+id+" name="+name+" age="+age);
}

//6.释放
rs.close();
}
}

最终代码如下:


四、创建properties

  将url,name,password等放在配件内(代码如上的完整代码为例)

src下新建一个文件(properties)里面存放这几条内容

1
2
3
4
driverClass=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost/student"
name=root
password=njdxrjgc7777777.

创建文件目录:


五、读取properties

  主要是要将driverClass/url/name/password改到文档里之后,将四个写成static的null然后写一个static{}去加载文档内容。

主要步骤:

  1. 创建一个Properties属性配置对象。
  2. 先创建一个InputStream对象,然后调动Properties对象的load()方法去加载输入流。
  3. 使用Properties对象的getProperties()方法获取 url/name等。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//写在外面好更改
static String driverClass=null;
static String url=null;
static String name=null;;
static String password=null;

static{

//1.创建一个属性配置对象
Properties properties=new Properties();

InputStream is=JDBC.class.getClassLoader().getResourceAsStream("properties"); //类.class.getClassLoader().getResourceAsStream("文件名");
//2.导入输入流
try {
properties.load(is); //load方法加载
} catch (IOException e) {
e.printStackTrace();
}

//3.调用方法读取文档里面的url/name/password等
driverClass=properties.getProperty("driverClass");
url=properties.getProperty("url");
name=properties.getProperty("name");
password=properties.getProperty("password");
}

完整代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
package lianxi;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.Driver;
import com.mysql.jdbc.Statement;
public class JDBC{
//写在外面好更改
static String driverClass=null;
static String url=null;
static String name=null;;
static String password=null;

static{

//1.创建一个属性配置对象
Properties properties=new Properties();

InputStream is=JDBC.class.getClassLoader().getResourceAsStream("properties"); //类.class.getClassLoader().getResourceAsStream("文件名");
//2.导入输入流
try {
properties.load(is); //load方法加载
} catch (IOException e) {
e.printStackTrace();
}

//3.调用方法读取文档里面的url/name/password等
driverClass=properties.getProperty("driverClass");
url=properties.getProperty("url");
name=properties.getProperty("name");
password=properties.getProperty("password");
}

public static java.sql.Connection getConn(){
java.sql.Connection conn=null;
//1.注册驱动
//DriverManager.registerDriver(new Driver()); //需要一个参数 这个参数是java.sql.jdbc.Driver
try {
Class.forName(driverClass);
} catch (ClassNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
//2.建立连接(url协议+数据库,user账号,password密码)
try {
conn=DriverManager.getConnection(url,name,password);
} catch (SQLException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
return conn;
}

public static void main(String[] args) throws SQLException{
java.sql.Connection conn = getConn();
//3.创建statement,跟数据库打交道,一定需要这个对象
java.sql.Statement st=conn.createStatement();

//4.执行查询
String sql="select * from s_stu";
ResultSet rs=st.executeQuery(sql);

//5.遍历每一条查询
while(rs.next()) //是否可以移动到下一行
{
int id=rs.getInt("id"); //获得id
String name=rs.getString("name"); //获得name
int age=rs.getInt("age"); //获得age
System.out.println("id="+id+" name="+name+" age="+age);
}

//6.释放
rs.close();
}
}

读取结果:


JDBC

一、JDBC概述

  SUN公司提供的一种数据库访问规则、规范。用于JAVA和各种数据库连接!我们的JAVA程序只需要使用sun公司提供的jdbc驱动就行!


二、JDBC入门案例#

  • 1.准备好jdbc的外部引入的库(网上也有!)。

  • 2.下载好MYSQL5.5 然后下载一个navicat(可视化软件)方便建立数据库等。

  • 3.创建一个student的数据库,然后建立表s_stu,并且往里填充三条数据。

  • 4.然后按照步骤进行编写代码

    • 4.1注册驱动 DriverManager.registerDriver(new Driver());
    • 4.2建立连接 Connection conn=DriverManager.getConnection("jdbc:mysql://localhost/student", "root","njdxrjgc7777777.");
    • 4.3创建和数据库打交道的对象 Statement st=conn.createStatement();
    • 4.4执行查询 st.executeQuery(sql);
    • 4.5遍历查询 rs.get()方法
    • 4.6释放 rs.close()

完整代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.Driver;
import com.mysql.jdbc.Statement;
public class JDBC{
public static void main(String[] args) throws SQLException{
//1.注册驱动
DriverManager.registerDriver(new Driver()); //需要一个参数 这个参数是java.sql.jdbc.Driver

//2.建立连接(url协议+数据库,user我的主机账号,password我的主机密码)
java.sql.Connection conn=DriverManager.getConnection("jdbc:mysql://localhost/student", "root","njdxrjgc7777777.");

//3.创建statement,跟数据库打交道,一定需要这个对象
java.sql.Statement st=conn.createStatement();

//4.执行查询
String sql="select * from s_stu";
ResultSet rs=st.executeQuery(sql);

//5.遍历每一条查询
while(rs.next()) //是否可以移动到下一行
{
int id=rs.getInt("id"); //获得id
String name=rs.getString("name"); //获得name
int age=rs.getInt("age"); //获得age
System.out.println("id="+id+"===name"+name+"==age="+age);
}

//6.释放
rs.close();

}
}

查询结果如下:


bootstrap实现网站首页

一、步骤分析

1.引入相关文件
2.分析写一个div布局容器  class=".container"
3.放8行row去放8个模块

二、代码框架搭建

先引入相关的文件之后搭建外部布局容器内部写8个div块。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
<link rel="stylesheet" href="../css/bootstrap.css" />

<!--先引入JQuery才可以引入Bootstrap-->
<!--<script type="text/javascript" src="../js/jquery-1.11.0.js" ></script>-->

<!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
<script type="text/javascript" src="../js/bootstrap.js"></script>

<!--为了保证适当的绘制和触屏缩放,需要在head之内添加viewport元数据标签-->
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<!--外部布局容器-->
<div class="container">
<div class="row">

</div>

<div class="row">

</div>

<div class="row">

</div>

<div class="row">

</div>

<div class="row">

</div>

<div class="row">

</div>

<div class="row">

</div>

<div class="row">

</div>
</div>
</body>
</html>

三、代码分析:

  1. logo部分:三个部分分别使用div标签去放图片和标签(col-md col-sm col-xs 分别是存的大小和区域)。
  2. 导航栏部分:去bootstra里css里面的导航栏部分代码,只需要修改内容文字即可。
  3. 轮播图部分:去bootstra里js插件里面的轮播图部分代码,加入图片就可以了。
  4. 最新图片部分:只需要嵌套一个div加图片然后col-md-12让完整的存放在container区域内。
  5. 商品部分:分为左边大图和右边大图和9个微波炉图片,分别需要规定col的大小,然后添加图片和文字描述(text-align居中)。
  6. 广告部分:只需要添加图片(同4步骤)。
  7. 商品部分:同5部分。
  8. 最后的栏目部分:添加一堆标签(text-align居中)。

四、具体代码:

具体代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
<link rel="stylesheet" href="../css/bootstrap.css" />

<!--需要引入JQuery-->
<script type="text/javascript" src="../js/jquery-1.11.0.js"></script>

<!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
<script type="text/javascript" src="../js/bootstrap.js"></script>

<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<!--外部布局容器-->
<div class="container">
<!--1.logo部分 三个部分 两个图片一个标签块-->
<div class="row">
<div class="col-md-4 col-sm-6 col-xs-6"> <!--更改大小时候进行隐藏-->
<img src="../img/logo2.png" />
</div>
<div class="col-md-4 hidden-sm hidden-xs ">
<img src="../img/header.png" />
</div>
<div class="col-md-4 col-sm-6 col-xs-6" style="line-height:50px;height: 50px;"> <!-去调整位置和高度--->
<a href="#">登录</a>
<a href="#">注册</a>
<a href="#">购物车</a>
</div>
</div>

<!--2.导航栏部分 去找css里面导航栏的代码用-->
<nav class="navbar navbar-inverse"> <!--navbar-inverse背景色改为黑色-->
<div class="container-fluid">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">首页</a> <!--改成首页-->
</div>

<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav">
<li class="active">
<a href="#">手机数码 <span class="sr-only">(current)</span></a>
</li>
<li>
<a href="#">电脑办公</a>
</li>
<li>
<a href="#">鞋靴箱包</a>
</li>
<li>
<a href="#">香烟酒水</a>
</li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">全部分类 <span class="caret"></span></a>
<ul class="dropdown-menu" role="menu">
<li>
<a href="#">手机数码</a>
</li>
<li>
<a href="#">电脑办公</a>
</li>
<li>
<a href="#">鞋靴箱包</a>
</li>
<li class="divider"></li>
<li>
<a href="#">香烟酒水</a>
</li>
<li class="divider"></li>
<li>
<a href="#">花生瓜子</a>
</li>
</ul>
</li>
</ul>
<form class="navbar-form navbar-right" role="search"> <!--navbar-right将搜索栏放在右边-->
<div class="form-group">
<input type="text" class="form-control" placeholder="Search">
</div>
<button type="submit" class="btn btn-default">Submit</button>
</form>
</div>
<!-- /.navbar-collapse -->
</div>
<!-- /.container-fluid -->
</nav>

<!--3.轮播图 使用js插件找代码-->
<div id="carousel-example-generic" class="carousel slide" data-ride="carousel" data-interval="1000"> <!--data-interval="1000"加自动换时间-->
<!-- Indicators -->
<ol class="carousel-indicators">
<li data-target="#carousel-example-generic" data-slide-to="0" class="active"></li>
<li data-target="#carousel-example-generic" data-slide-to="1"></li>
<li data-target="#carousel-example-generic" data-slide-to="2"></li>
</ol>

<!-- Wrapper for slides -->
<div class="carousel-inner" role="listbox">
<div class="item active">
<img src="../img/1.jpg" alt="图片加载失败"> <!--加图片-->
<div class="carousel-caption">
...
</div>
</div>
<div class="item">
<img src="../img/2.jpg" alt="图片加载失败"> <!--加图片-->
<div class="carousel-caption">
...
</div>
</div>
<div class="item">
<img src="../img/3.jpg" alt="图片加载失败"> <!--加图片-->
<div class="carousel-caption">
...
</div>
</div>
</div>

<!-- Controls -->
<a class="left carousel-control" href="#carousel-example-generic" role="button" data-slide="prev">
<span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span>
<span class="sr-only">Previous</span>
</a>
<a class="right carousel-control" href="#carousel-example-generic" role="button" data-slide="next">
<span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span>
<span class="sr-only">Next</span>
</a>
</div>

<!--4.最新商品 -->
<div class="row">
<div class="col-md-12">
<h3>最新商品<img src="../images/title2.jpg"/></h3>
</div>
</div>

<!--5.商品部分 -->
<div class="row">
<!--左边大图-->
<div class="col-md-2 hidden-sm hidden-xs"> <!--在一定情况下隐藏-->
<img src="../products/hao/big01.jpg" width="100%" height="100%"/>
</div>
<!--右边商品-->
<div class="col-md-10">
<!--右边第一行的大图-->
<div class="col-md-6">
<img src="../products/hao/middle01.jpg" />
</div>

<!--右边的小图-->
<div class="col-md-2 col-sm-4 col-xs-6" style="text-align: center;height: 240px;"> <!--指定高度让第二行的从最左边开始出现 然后在一定情况下显示4/6个-->
<img src="../products/hao/small06.jpg"/>
<p>微波炉</p>
<p style="color: red;">$998</p>
</div>

<div class="col-md-2 col-sm-4 col-xs-6" style="text-align: center;height: 240px;"> <!--指定高度让第二行的从最左边开始出现 然后在一定情况下显示4/6个-->
<img src="../products/hao/small06.jpg"/>
<p>微波炉</p>
<p style="color: red;">$998</p>
</div>

<div class="col-md-2 col-sm-4 col-xs-6" style="text-align: center;height: 240px;"> <!--指定高度让第二行的从最左边开始出现 然后在一定情况下显示4/6个-->
<img src="../products/hao/small06.jpg"/>
<p>微波炉</p>
<p style="color: red;">$998</p>
</div>

<div class="col-md-2 col-sm-4 col-xs-6" style="text-align: center;height: 240px;"> <!--指定高度让第二行的从最左边开始出现 然后在一定情况下显示4/6个-->
<img src="../products/hao/small06.jpg"/>
<p>微波炉</p>
<p style="color: red;">$998</p>
</div>

<div class="col-md-2 col-sm-4 col-xs-6" style="text-align: center;height: 240px;"> <!--指定高度让第二行的从最左边开始出现 然后在一定情况下显示4/6个-->
<img src="../products/hao/small06.jpg"/>
<p>微波炉</p>
<p style="color: red;">$998</p>
</div>

<div class="col-md-2 col-sm-4 col-xs-6" style="text-align: center;height: 240px;"> <!--指定高度让第二行的从最左边开始出现 然后在一定情况下显示4/6个-->
<img src="../products/hao/small06.jpg"/>
<p>微波炉</p>
<p style="color: red;">$998</p>
</div>

<div class="col-md-2 col-sm-4 col-xs-6" style="text-align: center;height: 240px;"> <!--指定高度让第二行的从最左边开始出现 然后在一定情况下显示4/6个-->
<img src="../products/hao/small06.jpg"/>
<p>微波炉</p>
<p style="color: red;">$998</p>
</div>

<div class="col-md-2 col-sm-4 col-xs-6" style="text-align: center;height: 240px;"> <!--指定高度让第二行的从最左边开始出现 然后在一定情况下显示4/6个-->
<img src="../products/hao/small06.jpg"/>
<p>微波炉</p>
<p style="color: red;">$998</p>
</div>

<div class="col-md-2 col-sm-4 col-xs-6" style="text-align: center;height: 240px;"> <!--指定高度让第二行的从最左边开始出现 然后在一定情况下显示4/6个-->
<img src="../products/hao/small06.jpg"/>
<p>微波炉</p>
<p style="color: red;">$998</p>
</div>
</div>
</div>

<!--6. 广告部分-->
<div class="row">
<div class="col-md-12"> <!--占一行12-->
<img src="../products/hao/ad.jpg" width="100%"/>
</div>
</div>

<!--7.商品部分 -->
<div class="row">
<!--左边大图-->
<div class="col-md-2">
<img src="../products/hao/big01.jpg" width="100%" height="100%"/>
</div>
<!--右边商品-->
<div class="col-md-10">
<!--右边第一行的大图-->
<div class="col-md-6">
<img src="../products/hao/middle01.jpg" />
</div>

<!--右边的小图-->
<div class="col-md-2" style="text-align: center;height: 240px;"> <!--指定高度让第二行的从最左边开始出现-->
<img src="../products/hao/small09.jpg" />
<p>微波炉</p>
<p style="color: red;">$998</p>
</div>

<div class="col-md-2" style="text-align: center;height: 240px;">
<img src="../products/hao/small09.jpg" />
<p>微波炉</p>
<p style="color: red;">$998</p>
</div>

<div class="col-md-2" style="text-align: center;height: 240px;">
<img src="../products/hao/small09.jpg" />
<p>微波炉</p>
<p style="color: red;">$998</p>
</div>

<div class="col-md-2" style="text-align: center;height: 240px;">
<img src="../products/hao/small09.jpg" />
<p>微波炉</p>
<p style="color: red;">$998</p>
</div>

<div class="col-md-2" style="text-align: center;height: 240px;">
<img src="../products/hao/small09.jpg" />
<p>微波炉</p>
<p style="color: red;">$998</p>
</div>

<div class="col-md-2" style="text-align: center;height: 240px;">
<img src="../products/hao/small09.jpg" />
<p>微波炉</p>
<p style="color: red;">$998</p>
</div>

<div class="col-md-2" style="text-align: center;height: 240px;">
<img src="../products/hao/small09.jpg" />
<p>微波炉</p>
<p style="color: red;">$998</p>
</div>

<div class="col-md-2" style="text-align: center;height: 240px;">
<img src="../products/hao/small09.jpg" />
<p>微波炉</p>
<p style="color: red;">$998</p>
</div>

<div class="col-md-2" style="text-align: center;height: 240px;">
<img src="../products/hao/small09.jpg" />
<p>微波炉</p>
<p style="color: red;">$998</p>
</div>
</div>
</div>

<!-- footer -->
<div class="row">
<div class="col-md-12">
<img src="../img/footer.jpg" width="100%"/>
</div>
</div>

<div style="text-align: center;">
<a href="#">关于我们</a>
<a href="#">联系我们</a>
<a href="#">招贤纳士</a>
<a href="#">法律声明</a>
<a href="#">友情链接</a>
<a href="#">支付方式</a>
<a href="#">配送方式</a>
<a href="#">服务声明</a>
<a href="#">广告声明</a><br />
Copyright © 2005-2016 传智商城 版权所有
</div>

</div>
</body>
</html>

配合col达到响应式页面如下:

boostrap实现导航条

一、寻找文档

查看的文档:
file:///F:/%E7%99%BE%E5%BA%A6%E7%BD%91%E7%9B%98%E4%B8%8B%E8%BD%BD%E6%96%87%E4%BB%B6/%E4%BB%A3%E7%A0%81/%E8%B5%84%E6%96%99/Bootstrap3.3.4%E4%B8%AD%E6%96%87%E6%96%87%E6%A1%A3/v3.bootcss.com/javascript/index.htm#carousel

拿出里面的模板:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

<div id="carousel-example-generic" class="carousel slide" data-ride="carousel">
<!-- Indicators -->
<ol class="carousel-indicators">
<li data-target="#carousel-example-generic" data-slide-to="0" class="active"></li>
<li data-target="#carousel-example-generic" data-slide-to="1"></li>
<li data-target="#carousel-example-generic" data-slide-to="2"></li>
</ol>

<!-- Wrapper for slides -->
<div class="carousel-inner" role="listbox">
<div class="item active">
<img src="..." alt="...">
<div class="carousel-caption">
...
</div>
</div>
<div class="item">
<img src="..." alt="...">
<div class="carousel-caption">
...
</div>
</div>
...
</div>

<!-- Controls -->
<a class="left carousel-control" href="#carousel-example-generic" role="button" data-slide="prev">
<span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span>
<span class="sr-only">Previous</span>
</a>
<a class="right carousel-control" href="#carousel-example-generic" role="button" data-slide="next">
<span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span>
<span class="sr-only">Next</span>
</a>
</div>

更改后最终模板代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
<!DOCTYPE html>
<html>

<head>
<meta charset="UTF-8">
<title></title>
<!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
<link rel="stylesheet" href="../css/bootstrap.css" />

<!--需要引入JQuery-->
<script type="text/javascript" src="../js/jquery-1.11.0.js"></script>

<!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
<script type="text/javascript" src="../js/bootstrap.js"></script>

<meta name="viewport" content="width=device-width, initial-scale=1">
</head>

<body>
<div class="container">

<nav class="navbar navbar-inverse">
<div class="container-fluid">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">首页</a>
</div>

<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav">
<li class="active">
<a href="#">手机数码 <span class="sr-only">(current)</span></a>
</li>
<li>
<a href="#">电脑办公</a>
</li>
<li>
<a href="#">鞋靴箱包</a>
</li>
<li>
<a href="#">香烟酒水</a>
</li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">全部分类 <span class="caret"></span></a>
<ul class="dropdown-menu" role="menu">
<li>
<a href="#">手机数码</a>
</li>
<li>
<a href="#">电脑办公</a>
</li>
<li>
<a href="#">鞋靴箱包</a>
</li>
<li class="divider"></li>
<li>
<a href="#">香烟酒水</a>
</li>
<li class="divider"></li>
<li>
<a href="#">其它分类</a>
</li>
</ul>
</li>
</ul>
<form class="navbar-form navbar-right" role="search">
<div class="form-group">
<input type="text" class="form-control" placeholder="Search">
</div>
<button type="submit" class="btn btn-default">Submit</button>
</form>

</div>
<!-- /.navbar-collapse -->
</div>
<!-- /.container-fluid -->
</nav>

<div>
<div id="carousel-example-generic" class="carousel slide" data-ride="carousel" data-interval="500"> <!--加一个自动更换时间data-interval-->
<!-- Indicators -->
<ol class="carousel-indicators">
<li data-target="#carousel-example-generic" data-slide-to="0" class="active"></li>
<li data-target="#carousel-example-generic" data-slide-to="1"></li>
<li data-target="#carousel-example-generic" data-slide-to="2"></li>
</ol>

<!-- Wrapper for slides -->
<div class="carousel-inner" role="listbox">
<div class="item active">
<img src="../img/1.jpg" alt="...">
<div class="carousel-caption">
<h3>电脑大促销</h3>
<p>黑马出品电脑黑马出品电脑黑马出品电脑</p>
</div>
</div>
<div class="item">
<img src="../img/2.jpg" alt="...">
<div class="carousel-caption">
<h3>电脑大促销</h3>
<p>黑马出品电脑黑马出品电脑黑马出品电脑</p>
</div>
</div>
<div class="item">
<img src="../img/3.jpg" alt="...">
<div class="carousel-caption">
<h3>电脑大促销</h3>
<p>黑马出品电脑黑马出品电脑黑马出品电脑</p>
</div>
</div>
</div>

<!-- Controls -->
<a class="left carousel-control" href="#carousel-example-generic" role="button" data-slide="prev">
<span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span>
<span class="sr-only">Previous</span>
</a>
<a class="right carousel-control" href="#carousel-example-generic" role="button" data-slide="next">
<span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span>
<span class="sr-only">Next</span>
</a>
</div>

</div>

<!--在自己增加三个快的东西 ,使用col-md sm xs去分区域-->

<div class="row">
<div class="col-md-4 col-sm-6 col-xs-4">
<h3>公司简介</h3>
<p>黑马程序员黑马程序员黑马程序员黑马程序员黑马程序员黑马程序员黑马程序员黑马程序员黑马程序员黑马程序员黑马程序员黑马程序员</p>
<a href="http://www.itheima.com" class="btn btn-danger pull-right">了解更多</a>
</div>
<div class="col-md-4 col-sm-6 col-xs-4">
<h3>公司愿景</h3>
<p>黑马程序员黑马程序员黑马程序员黑马程序员黑马程序员黑马程序员黑马程序员黑马程序员黑马程序员黑马程序员黑马程序员黑马程序员</p>
<a href="http://www.itheima.com" class="btn btn-info pull-right">了解更多</a>
</div>
<div class="col-md-4 col-xs-4">
<h3>联系我们</h3>
<p>黑马程序员黑马程序员黑马程序员黑马程序员黑马程序员黑马程序员黑马程序员黑马程序员黑马程序员黑马程序员黑马程序员黑马程序员</p>
<a href="http://www.itheima.com" class="btn btn-primary pull-right">了解更多</a>
</div>
</div>

</div>
</body>

</html>

导航条案例:

,