这是我会的,在十一周搞懂的。
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:\mssql7backup\MyNwind_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)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。 B: EXCEPT 运算符 EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。 C: INTERSECT 运算符 INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。 注:使用运算词的几个查询结果行必须是一致的。 12、说明:使用外连接 A、left (outer) join: 左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。 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:right (outer) join: 右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。 C:full/cross (outer) join: 全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。 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="width: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="width: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="width: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="width: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