链接数据库模板 DataBaseLinkTool
一、
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的更多相关文章
- ThinkPHP框架 基础 链接数据库
在第一次成功访问应用入口文件的时候,会显示出一个系统默认的欢迎页面并自动在APPLication文件夹里生成三个文件夹,如下,第一次访问应用文件路径:localhost/tr/index.php ...
- spring框架使用c3po链接数据库
编辑工具:idea 1.配置pom.xml文件(创建模板时软件自动创建) 导入spring的核心架包 全部架包官网:https://mvnrepository.com/ 1 <dependenc ...
- [Django框架 - 静态文件配置、request对象方法初识、 pycharm链接数据库、ORM实操增删改查、django请求生命周期]
[Django框架 - 静态文件配置.request对象方法初识. pycharm链接数据库.ORM实操增删改查.django请求生命周期] 我们将html文件默认都放在templates文件夹下 将 ...
- PHP学习-链接数据库
链接数据库文件:conn.php <?php $conn = mysql_connect("localhost:3306","root","us ...
- PHP 链接数据库1(连接数据库&简单的登录注册)
对 解析变量的理解 数据库的名称和表的名称不能重复 从结果中取出的数据 都是以数组的形式取出的 1.PHP查询数据库中的某条信息 //PHP链接数据库 /*1.造链接对象 IP地址 用户名 密码 ...
- JDBC的使用(一):引用外部jar;代码链接数据库
一:引用外部jar 1.首先不jar文件放到项目下: 2.在Eclipse中,右键相应的项目--构建路径--配置构建路径--库--添加外部jar:选中-打开-应用-确定. 二:代码链接数据库 1.加载 ...
- Connect to Database Using Custom params链接数据库配置参数说明
使用RF的关键字Connect to Database Using Custom params链接数据库,对应的参数说明: a) 第一个参数我使用的是cx_Oracle,就写这个 b) ...
- php链接数据库
1:找到 ySQL服务器 $conn = mysql_connect("localhost","","") or die("链 ...
- 安装vs2013以后,链接数据库总是报内存损坏,无法写入的错误
安装vs2013以后,链接数据库总是报内存损坏,无法写入的错误 这个错误几个月以前解决过一次,但是到又碰到的时候,竟然完全忘记当时怎么解决的了, 看来上了年纪记忆真是越来越不行了... 解决方案很简单 ...
随机推荐
- 【POJ - 3187】Backward Digit Sums(搜索)
-->Backward Digit Sums 直接写中文了 Descriptions: FJ 和 他的奶牛们在玩一个心理游戏.他们以某种方式写下1至N的数字(1<=N<=10). 然 ...
- 【VS开发】C++异常处理操作
异常处理的基本思想是简化程序的错误代码,为程序键壮性提供一个标准检测机制. 也许我们已经使用过异常,但是你会是一种习惯吗,不要老是想着当我打开一个文件的时候才用异常判断一下,我知道对你来说你喜欢用re ...
- python解析库
BeautifulSoup示例: #!/usr/bin/env python # -*- coding: utf-8 -*- # author: imcati html_doc = "&qu ...
- reduce的使用
reduce的使用:https://blog.csdn.net/xiasohuai/article/details/82152432
- (四)Java秒杀项目之JMeter压测
一.JMeter入门压测 1.打开JMeter工具,选中测试计划->右键添加->线程(用户)->线程组,页面中的线程数就是并发数,页面中的Ramp-Up时间(秒)表示通过多长时间启动 ...
- USB fuzzing
简介 最近看一些USB fuzzing方面的东西,总结一下.主要是软件方面的工作. vUSBf 文章在这里:https://www.blackhat.com/docs/eu-14/materials/ ...
- python网络爬虫(3)python爬虫遇到的各种问题(python版本、进程等)
import urllib2 源地址 在python3.3里面,用urllib.request代替urllib2 import urllib.request as urllib2 import coo ...
- css折叠表格
1.html <div class="custom-fold-table"> <table cellpadding="0" cellspaci ...
- 会计凭证替代 OBBH
单词:Validation: 会计凭证校验 ,Substitution:会计凭证替代 step1: GCX2 gblr: ZRFI_GGBR000 gbls: ZRFI_GGBS000 - step2 ...
- Spring IOC的简单实现
简单的说,Spring就是通过工厂+反射将我们的bean放到它的容器中的,当我们想用某个bean的时候,只需要调用getBean("beanID")方法即可. 原理简单说明: Sp ...