一、

1、Dao层 对数据库的底层操作  增删改查

package Dao;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List; import DBUtil.DBUtil;
import User.User; public class Dao{
//Dao层实现对数据库的操作 //增
//添加到 %表名% 表中
public boolean insert(User user){
//插入的sql语句
String sql="insert into user(name,ID,sex,mark) values('"+user.getName()+"','"+user.getID()+"','"+user.getSex()+"','"+user.getMark()+"')";
//insert语句:
//insert into table_name (column1,column2,column3,...) values (value1,value2,value3,...);
//注意:insert这里 values(100,'String','"+bianliang+"'),数字可以直接上,字符串的话用 '',变量的话要用 '"++"' Connection conn=DBUtil.getConn();//添加数据库,加载驱动
Statement state=null;//创建statement对象并置空
try { //实例化statement对象 方便操作
state=conn.createStatement();
state.executeUpdate(sql);
//执行数据库更新操作用于执行insert、update或delete语句以及SQLDDL(数据定义语言)语句,
//例如creattable和droptable,(创建表和删除表) } catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//finally作为异常处理的一部分,它只能用在try/catch语句中,并且附带一个语句块,表示这段语句最终一定会被执行(不管有没有抛出异常),
//经常被用在需要释放资源的情况下。
finally {
DBUtil.close(state, conn);//clase 释放资源
} return false;
} //删
//根据ID删除 public boolean delete(String name,String ID){
//插入sql 语句
String sql="delete from user where ID='"+ID+"' and name='"+name+"' "; //删除语句:
//delete from table_name where some_colume=some_value Connection conn =DBUtil.getConn();
Statement state=null;
try {
state=conn.createStatement();
state.executeUpdate(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
DBUtil.close(state, conn);
}
return false;
} //改
//根据ID更改 public boolean update(User user) {
//插入sql 语句
String sql="update user set name='"+user.getName()+"',sex='"+user.getSex()+"',mark='"+user.getMark()+"' where ID='"+user.getID()+"' ";
//update语句:
//update table_name set column1=value1,column2=value2 where some_column=some_value; Connection conn=DBUtil.getConn();
Statement state=null; try {
state=conn.createStatement();
state.executeUpdate(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
DBUtil.close(state, conn);
} return false;
} //查 //按照ID查
public User select(String ID) {
//插入sql 语句
String sql="select * from where ID='"+ID+"'"; Connection conn=DBUtil.getConn();
Statement state=null;
ResultSet rs=null; try {
state=conn.createStatement();
rs=state.executeQuery(sql);
User user=null;
while(rs.next()) {
String name=rs.getString("name");
String sex=rs.getString("sex");
String mark=rs.getString("mark");
user=new User(name,ID,sex,mark);
return user;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
DBUtil.close(rs, state, conn);
} return null;
}
//遍历
public List<User> list(){
//插入sql语句
String sql="select * from user order by ID asc"; //select语句
//select * from tabel_name 这是查询所有,若要查询某一列
//select column1_name,column2_name,column3_name from table_name List<User>list=new ArrayList<>();
//给集合list创造(new)一个存储空间用于存放数据 Connection conn=DBUtil.getConn();
Statement state=null;
ResultSet rs=null; try{
state=conn.createStatement();
rs=state.executeQuery(sql);
User user=null;
while(rs.next()) {//注意:这里用双引号,ID是表user里的ID列
String name=rs.getString("name");
String ID=rs.getString("ID");
String sex=rs.getString("sex");
String mark=rs.getString("mark");
user=new User(name,ID,sex,mark);
list.add(user);
//表示,把bean里的数据存入到list当中
}
}
catch (SQLException e)
{
e.printStackTrace();
}
finally
{
DBUtil.close(state, conn);
}
return list;
} //验证ID唯一 public boolean only(String ID) {
//定义标记
boolean flag=false;
//插入sql语句
String sql="select * from user where ID = '"+ID+"'";
Connection conn=DBUtil.getConn();
Statement state=null;
ResultSet rs=null; try {
state=conn.createStatement();
rs=state.executeQuery(sql);
//要用statement类的executeQuery()方法来下达select指令以查询数据库,
//executeQuery()方法会把数据库响应的查询结果存放在ResultSet类对象中供我们使用。
while (rs.next()) {
flag = true;
} } catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
DBUtil.close(rs, state, conn);
} return flag;
} }

Dao

2、DBUtil 连接数据库(每次更改的时候只需要更改数据库名,如果有多个数据库需要连接则需要多写几个,没有用连接池)

package DBUtil;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement; public class DBUtil{
//sql语句字符串
public static String db_url="jdbc:mysql://localhost:3306/user?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone = GMT";
//数据库名
public static String db_name="root";
//数据库密码
public static String db_password="123456"; public static Connection getConn() {
//声明connection类型对象,指向空
Connection conn=null; //连接驱动
//链接数据库
try {
//驱动程序名
Class.forName("com.mysql.cj.jdbc.Driver");
//具体地连接到数据库——联接字符串(数据库名),联接用户名,联接密码名
conn =DriverManager.getConnection(db_url, db_name, db_password);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
public static void close(Statement state, Connection conn) {
if(state !=null) {
try {
state.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(conn!=null) {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} public static void close(ResultSet rs,Statement state, Connection conn) {
if(rs!=null) {
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} if(state!=null) {
try {
state.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} if(conn!=null) {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} } }

DBUtil

3、Service层 这个层内没有什么实际的功能,只是对Dao层的调用,有利于增强系统的安全性

package Service;

import java.util.List;
import java.util.ArrayList; import Dao.Dao;
import User.User; //Service 是服务层 相当于一个封装层,封装那些与业务相关的通用数据接口 public class Service{ Dao cdao=new Dao();
/**
* 添加
* @param course
* @return
*/
//增
public boolean insert(User user) {
boolean flag=false;
if(!cdao.only(user.getID())) {
cdao.insert(user);
flag=true;
}
return flag;
} //删
public void delete(String name,String ID) {
cdao.delete(name, ID);
} //改
public void update(User user) {
cdao.update(user);
} //查
//按照ID查
public User select(String ID) {
return cdao.select(ID);
}
//按照name查 //遍历
public List<User> list()
{
return cdao.list();
} }

Service

4.servlet层  负责实现页面和数据库之间数据的传递和跳转,通过接受来自页面的命令来选择接下来调用的方法,类似于接话员,如果有多种跳转方式,可以写多个servlet层,避免代码量太大,分解成一个个小问题,使问题简单化

package Servlet;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List; 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 Service.Service;
import User.User;
@WebServlet("/servlet")
public class Servlet extends HttpServlet { Service service=new Service(); protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//req是Request(请求)的简写,指的是从jsp/html界面请求回数据,即 jsp/html → 底层
//resp是Response(回答)的简写,指的是发送给jsp/html的数据,,即 底层 → jsp/html req.setCharacterEncoding("utf-8");//设置从jsp或HTML中请求数据的值,也就是设置为中文,防止乱码
String method=req.getParameter("method");//getParameter()获取的是客户端设置的数据。 //增
if("insert".equals(method)) {
insert(req,resp);
}
//删
else if("delete".equals(method)) {
delete(req,resp);
}
//改
else if("update".equals(method)) {
update(req,resp);
}
//查
else if("list".equals(method)) {
list(req,resp);
} } //增
private void insert(HttpServletRequest req,HttpServletResponse resp) throws IOException, ServletException {
//首先读取前端网页数据并将数据存入创建的User存储空间里,即 jsp/html → servlet req.setCharacterEncoding("utf-8");//解码方式
String name=req.getParameter("name");
String ID=req.getParameter("ID");
String sex=req.getParameter("sex");
String mark=req.getParameter("mark");
//req.getParameter 只能获得String类型的数据
//如果是其他类型的数据需要用到Integer.parseInt(req.getParameter())来数据类型转换 User user=new User(name,ID,sex,mark); //其次进行把user里的数据与添加到数据库里,即 servlet → mysql数据库
//并跳转,req.getRequestDispatcher("add.jsp").forward(req, resp);这一步是跳转到前端jsp/html界面 if(service.insert(user)) {
//如果添加成功
req.setAttribute("message", "添加成功");
//这里表示,在req的作用域中设置一个massage变量,变量内容是:添加成功
//然后,当跳转到它下一个界面时,这个作用域里的值可以通过Object message =request.getAttribute("message")拿出来使用
req.getRequestDispatcher("login.jsp").forward(req, resp);
}
else {
//处理失败
req.setAttribute("message", "添加重复,请重新输入");
req.getRequestDispatcher("add.jsp").forward(req, resp);
}
} //删除 private void delete(HttpServletRequest req,HttpServletResponse resp)throws IOException, ServletException {
req.setCharacterEncoding("utf-8");
String ID=req.getParameter("ID");
String name=req.getParameter("name");
service.delete(ID, name);
req.setAttribute("message", "删除成功");
req.getRequestDispatcher("servlet?method=list").forward(req, resp);
}
//修改 private void update(HttpServletRequest req,HttpServletResponse resp)throws IOException, ServletException {
req.setCharacterEncoding("utf-8");
String ID=req.getParameter("ID");
String name=req.getParameter("name");
String sex=req.getParameter("sex");
String mark=req.getParameter("mark");
User user=new User(name,ID,sex,mark);
service.update(user);
//对数据库进行修改;
req.setAttribute("message", "修改成功");
req.getRequestDispatcher("servlet?method=list").forward(req,resp);
//?method=list表示传一个叫做method的参数,他的值是list,你可以在Servlet中用request.getParam...获取到。
}
//查
private void select(HttpServletRequest req,HttpServletResponse resp)throws IOException, ServletException {
req.setCharacterEncoding("utf-8");
String ID=req.getParameter("ID");
User user=service.select(ID); req.setAttribute("user", user);
req.getRequestDispatcher("list.jsp").forward(req,resp);
//?method=list表示传一个叫做method的参数,他的值是list,你可以在Servlet中用request.getParam...获取到。
} //全部
private void list(HttpServletRequest req,HttpServletResponse resp)throws IOException, ServletException { req.setCharacterEncoding("utf-8");
List<User> user = service.list();
req.setAttribute("user", user);
req.getRequestDispatcher("select.jsp").forward(req,resp); }
}

Servlet

5、javabean  以user为例,封装一个和数据库相同的类,用来实现数据的封装以及之后数据的传递,内部主要是每个数据成员的get和set以及构造方法的书写和toString等方法的重写等等

package User;

public class User {
private String name;
private String ID;
private String sex;
private String mark;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getID() {
return ID;
}
public void setID(String iD) {
ID = iD;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getMark() {
return mark;
}
public void setMark(String mark) {
this.mark = mark;
} public User() { } public User(String ID, String name, String sex,String mark) {
this.name=name;
this.ID=ID;
this.sex=sex;
this.mark=mark;
} }

User

二、

这个模板是最简单也是最基础的模板,还有高级的如c3p0连接池等等,越高级的代码量越少,所以之后还需要对高级方法的学习。

链接数据库模板 DataBaseLinkTool的更多相关文章

  1. ThinkPHP框架 基础 链接数据库

    在第一次成功访问应用入口文件的时候,会显示出一个系统默认的欢迎页面并自动在APPLication文件夹里生成三个文件夹,如下,第一次访问应用文件路径:localhost/tr/index.php   ...

  2. spring框架使用c3po链接数据库

    编辑工具:idea 1.配置pom.xml文件(创建模板时软件自动创建) 导入spring的核心架包 全部架包官网:https://mvnrepository.com/ 1 <dependenc ...

  3. [Django框架 - 静态文件配置、request对象方法初识、 pycharm链接数据库、ORM实操增删改查、django请求生命周期]

    [Django框架 - 静态文件配置.request对象方法初识. pycharm链接数据库.ORM实操增删改查.django请求生命周期] 我们将html文件默认都放在templates文件夹下 将 ...

  4. PHP学习-链接数据库

    链接数据库文件:conn.php <?php $conn = mysql_connect("localhost:3306","root","us ...

  5. PHP 链接数据库1(连接数据库&简单的登录注册)

    对 解析变量的理解 数据库的名称和表的名称不能重复 从结果中取出的数据   都是以数组的形式取出的 1.PHP查询数据库中的某条信息 //PHP链接数据库 /*1.造链接对象 IP地址 用户名 密码 ...

  6. JDBC的使用(一):引用外部jar;代码链接数据库

    一:引用外部jar 1.首先不jar文件放到项目下: 2.在Eclipse中,右键相应的项目--构建路径--配置构建路径--库--添加外部jar:选中-打开-应用-确定. 二:代码链接数据库 1.加载 ...

  7. Connect to Database Using Custom params链接数据库配置参数说明

    使用RF的关键字Connect to Database Using Custom params链接数据库,对应的参数说明: a)     第一个参数我使用的是cx_Oracle,就写这个 b)     ...

  8. php链接数据库

      1:找到 ySQL服务器 $conn = mysql_connect("localhost","","") or die("链 ...

  9. 安装vs2013以后,链接数据库总是报内存损坏,无法写入的错误

    安装vs2013以后,链接数据库总是报内存损坏,无法写入的错误 这个错误几个月以前解决过一次,但是到又碰到的时候,竟然完全忘记当时怎么解决的了, 看来上了年纪记忆真是越来越不行了... 解决方案很简单 ...

随机推荐

  1. win7中文版 切换成 英文版

      打开[控制面版]-->[更改显示语言] 2.点击[安装/卸载语言] 3.启用Windows Update 4.更新完后,打开可选更新,拉到底,选上 英语语言包 同时记得取消所有重要更新的,再 ...

  2. [python] a little deep learning case

    from numpy import exp, array, random, dot class NeuralNetwork(): def __init__(self): random.seed(1) ...

  3. python简单验证码识别

    在学习python通过接口自动登录网站时,用户名密码.cookies.headers都好解决但是在碰到验证码这个时就有点棘手了:于是通过网上看贴,看官网完成了对简单验证码的识别,如果是复杂的请看大神的 ...

  4. DLL的创建与使用

    一.动态链接库(DLL) 动态链接库提供了一种方法,使进程可以调用不属于其执行代码的函数.函数的可执行代码位于一个.dll文件中,该文件包含一个或多个已被编译.链接并使用它们的进程分开存储的函数. 优 ...

  5. [LGP4859,...] 一类奇怪的容斥套DP

    漫山遍野都是fake的光影. 题目 [LGP4859] 已经没有什么好害怕的了 给定两个长度为n的数组a和b,将a中元素与b中元素配对,求满足ai>bj的配对(i,j)个数减去满足ai<b ...

  6. 安装PIG

    下载Pig 能够执行在Hadoop 0.20.* http://mirror.bit.edu.cn/apache/pig/pig-0.11.1/pig-0.11.1.tar.gz 也能够依据你的Had ...

  7. Http的简单介绍

    之前写过一篇使用HttpListener作为简单的HTTP服务器,后面实际项目中就用到了,测试发现,在Win7下如果不是以管理员权限运行程序,使用HttpListener是会出错了. 所以就很好奇HT ...

  8. position详解

    本文旨在普及一下position的用法,CSS中position的使用率相当之高,对于新入行的小白,不仅要知其然,还要知其所以然. position(定位类型),主要有4种属性值 : static.f ...

  9. 109、Secret的使用场景 (Swarm16)

    参考https://www.cnblogs.com/CloudMan6/p/8082429.html   我们可以用secret管理任何敏感数据.这些敏感数据是容器在运行时需要的.同时我们又不想把这些 ...

  10. mybatis-generator遇到到的问题

    1.Unknown system variable 'query_cache_size' https://blog.csdn.net/qq_21870555/article/details/80711 ...