十二周周四学术交流会报告

这是我会的,在十一周搞懂的。

public class Class_Bean {

    private int id;
    private String name;
    private String teacher;
    private String  place;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    
    public String getTeacher() {
        return teacher;
    }
    public void setTeacher(String teacher) {
        this.teacher = teacher;
    }
    public String getPlace() {
        return place;
    }
    public void setPlace(String place) {
        this.place = place;
    }
    }

很简单的javabean,很容易搞懂,存贮取出来的数据方便操作。

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

import com.oracle.jsp.bean.Class_Bean;
import com.oracle.jsp.util.DB;

public class Class_dao {

    // 登录时核对信息
    public Class_Bean checkLogin(String name, String place ,String teacher) {
        Connection conn = DB.getConn();
        Class_Bean classBean = null;
        try {
            /*
             * Statement 是 Java 执行数据库操作的一个重要方法 用于在已经建立数据库连接的基础上 向数据库发送要执行的SQL语句。 Statement对象
             * 用于执行不带参数的简单SQL语句。
             */
            Statement state = conn.createStatement();
            // 查找数据库中与你输入的username匹配的数据
            /*
             *
             * ResultSet:结果集,封装了使用JDBC进行查询的结果 1.调用Statement对象的excuteQuery(sql)方法可以得到结果集
             * 2.ResultSet返回的实际上就是一张数据表,有一个指针 指向数据表的第一样的前面,可以调用next()方法检测下一行是否有效,若有效则返回true
             * ,并且指针下移,相当于迭代器对象的hasNext()和next()的结合体
             * 3.当指针对位到确定的一行时,可以通过调用getXxx(index)或者getXxx(columnName)
             * 获取每一列的值,例如:getInt(1),getString("name") 4.ResultSet当然也需要进行关闭
             * 
             */

            ResultSet rs = state.executeQuery("select * from kecheng where name='" + name + "'");
            if (rs.next()) {
                // 如果有结果,是认为是通过验证了
                if (rs.getString("place").equals(place)) 
                {
                    if(rs.getString("teacher").equals(teacher))
                    {
                        
                    classBean = new Class_Bean();
                    classBean.setId(rs.getInt("id"));
                    classBean.setName(rs.getString("name"));
                    classBean.setPlace(rs.getString("place"));
                    classBean.setTeacher(rs.getString("teacher"));
                    System.out.println(classBean.getName());
                    
                    }

                } 
            }
            // 关闭连接    
            DB.close(rs, state, conn);
        } catch (Exception e) {
            e.printStackTrace();
        }

        return classBean;
    }
    public Class_Bean checkLogin(String name) {
        Connection conn = DB.getConn();
        Class_Bean classBean = null;
        try {
            /*
             * Statement 是 Java 执行数据库操作的一个重要方法 用于在已经建立数据库连接的基础上 向数据库发送要执行的SQL语句。 Statement对象
             * 用于执行不带参数的简单SQL语句。
             */
            Statement state = conn.createStatement();
            // 查找数据库中与你输入的username匹配的数据
            /*
             *
             * ResultSet:结果集,封装了使用JDBC进行查询的结果 1.调用Statement对象的excuteQuery(sql)方法可以得到结果集
             * 2.ResultSet返回的实际上就是一张数据表,有一个指针 指向数据表的第一样的前面,可以调用next()方法检测下一行是否有效,若有效则返回true
             * ,并且指针下移,相当于迭代器对象的hasNext()和next()的结合体
             * 3.当指针对位到确定的一行时,可以通过调用getXxx(index)或者getXxx(columnName)
             * 获取每一列的值,例如:getInt(1),getString("name") 4.ResultSet当然也需要进行关闭
             * 
             */

            ResultSet rs = state.executeQuery("select * from kecheng where name='" + name + "'");
            if (rs.next()) {
                // 如果有结果,是认为是通过验证了    
                    classBean = new Class_Bean();
                    classBean.setId(rs.getInt("id"));
                    classBean.setName(rs.getString("name"));
                    classBean.setPlace(rs.getString("place"));
                    classBean.setTeacher(rs.getString("teacher"));
                    System.out.println(classBean.getName());
                
            }
            // 关闭连接
            DB.close(rs, state, conn);
        } catch (Exception e) {
            e.printStackTrace();
        }

        return classBean;
    }
    /**
     * 检查是否存在此用户 dada 说实话我感觉没多大用,查询用吧。。嘤嘤嘤
     * 
     * @param name
     * @return
     */

    public boolean checkReg(String name, String place ,String teacher) {// 仅仅是查询数据库中是否有这个用户数据
        boolean flag = false;
        // 查询用户是否已存在
        Connection connection = DB.getConn();
        Statement statement = null;
        ResultSet rs = null;
        try {

            statement = connection.createStatement();
            rs = statement.executeQuery("select name from kecheng");
            while (rs.next()) {
                // System.out.println(name);
                // System.out.println(rs.getString("username"));
                if (name.equals(rs.getString("name"))) {
                    flag = true;
                }

            }
            if (flag == false) {
                System.out.println("没有这个数据");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            DB.close(rs, statement, connection);
        }
        return flag;
    }

    /**
     * 向数据库中添加信息
     */

    public static boolean  add_(String name, String place,String teacher) {
        Connection conn = DB.getConn();
        try {
            Statement state = conn.createStatement();
            System.out.println("添加信息");
            state.execute("insert into kecheng (name,place,teacher) values('" + name + "','" + place+ "','" + teacher+ "')");
            DB.close(state, conn);
        } catch (Exception e) {
            e.printStackTrace();

        }
        return true;
    }

    /**
     * dada 修改信息 调用了存在方法(checkReg)
     */

    public void revise_(String name, String place,String teacher) {
        Connection conn = DB.getConn();
        Statement state = null;

        try {

            if((checkLogin(name, place, teacher))!=null) {
                state = conn.createStatement();
                System.out.println("修改信息");
                state.execute("update kecheng set place='" + place + "' where name='" + name + "' ");
                state.execute("update kecheng set teacher='" + teacher + "' where name='" + name + "' ");
                System.out.println("修改成功");
                DB.close(state, conn);
            }

        } catch (Exception e) {
            e.printStackTrace();

        }
    }

    /**
     * dada 删除信息
     */
    public void delete_(String name ) {
        Connection conn = DB.getConn();
        Statement state = null;

        try {

            
                state = conn.createStatement();
                System.out.println("删除信息");
                state.execute("delete from kecheng where name='" + name + "'");
                System.out.println("删除成功");
                DB.close(state, conn);
            

        } catch (Exception e) {
            e.printStackTrace();

        }

    }
}

dao成,取出数据库数据用的,Connection conn = DB.getConn() 和ResultSet和Statement查明白了,会用了。我这玩意在上周都一个个用控制台试了,弄明白了。

Connection是获得数据库连接的。

student是数据库名字  ?后面有时候需要写,可以解决乱码和一些数据库问题,就比如我这个问题,因为数据库是8.0的,时间对不上,查了一下,必须写这个。

root是我的账号,123456是密码。

Statement向数据库放送语句,基础数据库语句奉上。
1、说明:创建数据库
CREATE DATABASE database-name 
2、说明:删除数据库
drop database dbname
3、说明:备份sql server
--- 创建 备份数据的 device
USE master
EXEC sp_addumpdevice 'disk', 'testBack', 'c:mssql7backupMyNwind_1.dat'
--- 开始 备份
BACKUP DATABASE pubs TO testBack 
4、说明:创建新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)

根据已有的表创建新表: 
A:create table tab_new like tab_old (使用旧表创建新表)
B:create table tab_new as select col1,col2… from tab_old definition only
5、说明:删除新表
drop table tabname 
6、说明:增加一个列
Alter table tabname add column col type
注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
7、说明:添加主键: Alter table tabname add primary key(col) 
说明:删除主键: Alter table tabname drop primary key(col) 
8、说明:创建索引:create [unique] index idxname on tabname(col….) 
删除索引:drop index idxname
注:索引是不可更改的,想更改必须删除重新建。
9、说明:创建视图:create view viewname as select statement 
删除视图:drop view viewname
10、说明:几个简单的基本的sql语句
选择:select * from table1 where 范围
插入:insert into table1(field1,field2) values(value1,value2)
删除:delete from table1 where 范围
更新:update table1 set field1=value1 where 范围
查找:select * from table1 where field1 like%value1%---like的语法很精妙,查资料!
排序:select * from table1 order by field1,field2 [desc]
总数:select count as totalcount from table1
求和:select sum(field1) as sumvalue from table1
平均:select avg(field1) as avgvalue from table1
最大:select max(field1) as maxvalue from table1
最小:select min(field1) as minvalue from table1
11、说明:几个高级查询运算词
A: UNION 运算符 
UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALLUNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。 
B: EXCEPT 运算符 
EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALLEXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。 
C: INTERSECT 运算符
INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALLINTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。 
注:使用运算词的几个查询结果行必须是一致的。 
12、说明:使用外连接 
A、leftouterjoin: 
左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。 
SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
B:rightouterjoin: 
右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。 
C:full/crossouterjoin: 
全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。
12、分组:Group by:
   一张表,一旦分组 完成后,查询后只能得到组相关的信息。
    组相关的信息:(统计信息) count,sum,max,min,avg  分组的标准)
    在SQLServer中分组时:不能以text,ntext,image类型的字段作为分组依据
   在selecte统计函数中的字段,不能和普通的字段放在一起;

13、对数据库进行操作:
   分离数据库: sp_detach_db; 附加数据库:sp_attach_db 后接表明,附加需要完整的路径名
14.如何修改数据库的名称:
sp_renamedb 'old_name', 'new_name'
ResultSet:结果集,封装了使用JDBC进行查询的结果,接收获得你想要的数据,例如查找数据

在kecheng表内name栏中“name”(第二的name就是你要查找的东西)。


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;


/**
 * 数据库的工具类
 * @author dada
 *
 */
public final class DB {

    //Connection主要用于连接数据库
    /*
     * Connection 对象的数据库能够提供描述其表、所支持的 SQL 语法、存储过程、此连接功能等等的信息。
     * 此信息是使用 getMetaData 方法获得的。
     */
    private Connection conn;
    //连接数据库
    public static Connection getConn() {
        Connection conn = null;
        String db_url="jdbc:mysql://localhost:3306/student?serverTimezone=UTC";
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection(db_url, "root", "123456");
             System.out.println("Success connect MySql server!");  
        } catch (Exception e) {
            e.printStackTrace();
        }
        return conn;
    }
    
    public static void close(Statement state, Connection conn) {
        if(state!=null) {
            try {
                state.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(conn!=null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    
    public static void close(ResultSet rs, Statement state, Connection conn) {
        if(rs!=null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(state!=null) {
            try {
                state.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(conn!=null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

工具类

还有jdbc必须导入才行!

servlet等我说完jsp代码细讲。

 先讲一下jsp与servlet的关系,jsp会解析成servlet的。(JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM能够识别的java类)

可以看这个 http://www.fangbangxin.com/news/show-3701.html

  最好看看一下,了解一下jsp与sevlet

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>main</title>
<style> 
body{ text-align:center} 

/* css注释:为了观察效果设置宽度 边框 高度等样式 */ 
</style> 
</head>
<body>
<br><br><br><br><br><br><br>
<div>
<input type="button" onclick="test1()" value="add" style="200px;height:50px" />
<script >
function test1(){
var url = "add.jsp";
window.location.href= url;
}
</script>
</div>
<br><br><br><br><br>
<div>
<input type="button" onclick="test2()" value="delete" style="200px;height:50px"/>
<script >
function test2(){
var url = "delete.jsp";
window.location.href= url;
}
</script>
</div>
<br><br><br><br><br>
<div>
<input type="button" onclick="test3()" value="xiu_gai" style="200px;height:50px"/>
<script >
function test3(){
var url = "xiugai.jsp";
window.location.href= url;
}
</script>
</div>
<br><br><br><br><br>
<div>
<input type="button" onclick="test4()" value="cha_zhao" style="200px;height:50px"/>
<script >
function test4(){
var url = "chazhao.jsp";
window.location.href= url;
}
</script>
</div>
</body>
</html>

 这是main.jsp,写了四个js函数,跳转到相应的页面。

点击执行函数test2()。

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>add</title>
<style> 
body{ text-align:center} 

/* css注释:为了观察效果设置宽度 边框 高度等样式 */ 
</style> 
</head>
<body>
<div>
<form method="post" action="ClassServlet?action=add">
<br><br><br><br><br><br><br>
<div>
  课程名称:<input type="text" name ="name"  value="" />
 
</div>
<br><br>
<div>
  上课地点:
  <select name =place>
  <option value ="一教">一教</option>
  <option value ="基教">基教</option>
  <option value="二教">二教</option>
  <option value="三教">三教</option>
</select>
</div>
<br><br>
<div>
  任课教师:
  <select name =teacher>
  <option value ="王建民">王建民</option>
  <option value ="刘丹">刘丹</option>
  <option value="刘立嘉">刘立嘉</option>
  <option value="杨子光">杨子光</option>
    <option value="王辉">王辉</option>
</select>
</div>
<br><br>
<div><input type="submit" value="保存"/></div>

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

  add函数  

form就是传数值用的,action=ClassServlet(servlet类名)?后面action=“add”什么意思后面讲。

import java.awt.List;
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.oracle.jsp.bean.Class_Bean;
import com.oracle.jsp.dao.Class_dao;

/**
 * Servlet implementation class ClassServlet
 */
@WebServlet("/ClassServlet")
public class ClassServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ClassServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charsetUTF-8");
		response.setCharacterEncoding("UTF-8");
		String action=request.getParameter("action");
		if(action.equals("add"))
		{
			add(request,response);
		}
		if(action.equals("delete"))
		{
			delete(request,response);
		}
		if(action.equals("xiu_gai"))
		{
			xiu_gai(request,response);
		}
		if(action.equals("cha_zhao"))
		{
			cha_zhao(request,response);
		}

	}

	private void cha_zhao(HttpServletRequest request, HttpServletResponse response) {
		// TODO 自动生成的方法存根
		
		String name=request.getParameter("name");
		Class_Bean c=new Class_Bean();
		c.setName(request.getParameter("name"));
		c.setTeacher(request.getParameter("teacher"));
		c.setPlace(request.getParameter("address"));
		System.out.println(c.getName()+"--"+c.getTeacher()+"--"+c.getPlace());
		Class_dao dao=new Class_dao();
		
		
	}

	private void xiu_gai(HttpServletRequest request, HttpServletResponse response) {
		// TODO 自动生成的方法存根
	
		Class_dao dao =new Class_dao();
		String name =request.getParameter("name");
		String place =request.getParameter("place");
		String teacher=request.getParameter("teacher");
		dao.revise_(name, place, teacher);
		
	}

	

	

	private void delete(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
		// TODO 自动生成的方法存根
		Class_Bean s =new Class_Bean();
		Class_dao dao =new Class_dao();
		String name =request.getParameter("name");
		s= dao.checkLogin(name);
		dao.delete_(name);
		PrintWriter out = response.getWriter();
		out.println(s.getName());
		out.println(s.getPlace());
		out.println(s.getTeacher());
		out.println("删除成功");
		request.getRequestDispatcher("delete.jsp").forward(request,response);
	}

	private void add(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
		// TODO 自动生成的方法存根
		Class_Bean c=new Class_Bean();
		String name =request.getParameter("name");
		String place =request.getParameter("place");
		String teacher=request.getParameter("teacher");
	
		c.setName(name);
		c.setPlace(place);
		c.setTeacher(teacher);
		Class_dao dao=new Class_dao();
		//Class_dao.add_("777", "2", "1");
		if(dao.checkLogin(c.getName(),c.getPlace(),c.getTeacher())==null)
		{
			Class_dao.add_(name, place, teacher);
			PrintWriter out = response.getWriter();
			out.println(c.getName());
			out.println(dao.checkLogin(c.getName(),c.getPlace(),c.getTeacher()));
		
			out.print("<script>alert('课程添加成功'); </script>");// window.location='add.jsp'
			out.flush();
			out.close();
			request.getRequestDispatcher("add.jsp").forward(request,response);
		}
		else
		{
			PrintWriter out = response.getWriter();
			out.print("<script>alert('课程名称重复'); </script>");// window.location='add.jsp'
			out.flush();
			out.close();
			request.getRequestDispatcher("add.jsp").forward(request,response);
		}
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

  request这个是用来获取value里面的值的

action就是这个作用,选择相应的函数来做你想要干的。

只给留下add的,剩下的jsp就应该自己完成差不多了。

我是先用控制台来操作先弄明白了dao和数据库。最先干的是下载安装数据库。

然后第二步就是弄明白了jsp和serlet的关系。

第三步就是写出来一步步调试。

原文地址:https://www.cnblogs.com/gonT-iL-evoL-I/p/10093452.html