链接数据库模板 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以后,链接数据库总是报内存损坏,无法写入的错误 这个错误几个月以前解决过一次,但是到又碰到的时候,竟然完全忘记当时怎么解决的了, 看来上了年纪记忆真是越来越不行了... 解决方案很简单 ...
随机推荐
- 【计算机视觉】【神经网络与深度学习】论文阅读笔记:You Only Look Once: Unified, Real-Time Object Detection
尊重原创,转载请注明:http://blog.csdn.net/tangwei2014 这是继RCNN,fast-RCNN 和 faster-RCNN之后,rbg(Ross Girshick)大神挂名 ...
- Linux 概念与快捷方式
概念 何为shell Shell 是指"提供给使用者使用界面"的软件(命令解析器),类似于 DOS 下的 command(命令行)和后来的 cmd.exe .普通意义上的 Shel ...
- (转)SQLServer查询数据库各种历史记录
一. 数据库启动记录 1. 最近一次启动SQL Server的时间 select sqlserver_start_time from sys.dm_os_sys_info; --也可参考系统进程创建的 ...
- 对C++类的继承和派生的理解
C++中的继承是类与类之间的关系,是一个很简单很直观的概念,与现实世界中的继承类似,例如儿子继承父亲的财产. 1.继承(Inheritance)可以理解为一个类从另一个类获取成员变量和成员函数的过程. ...
- linux常见的安装软件包命令
常用的 RPM 软件包命令 安装软件的命令格式 rpm -ivh filename.rpm 升级软件的命令格式 rpm -Uvh filename.rpm 卸载软件的命令格式 rpm -e filen ...
- Vue中如何插入m3u8格式视频,3分钟学会!
大家都知道video只支持ogg.webm.MP4格式,但是要是m3u8格式的视频怎么办?最近遇到这个问题在网上找了好多办法都不行,最后找到video.js后才完美解决,所以决定写一 ...
- numpy中与金融有关的函数
fv函数 计算未来的价值 def fv(rate, nper, pmt, pv, when='end'): ... 参数: rate:存款/贷款每期的利率 nper:存款/贷款期数 pmt:存款/贷款 ...
- Linux SUID SGID SBIT 简介和权限设定
SUID :Set UID 1 SUID 权限仅对二进制程序(binary program)有效 2 执行者对于该程序需要具有x的可执行权限 3 本权限仅在执行该程序的过程中有效(run-time) ...
- 线程池ThreadPool
在面向对象编程中,经常会面对创建对象和销毁对象的情况,如果不正确处理的话,在短时间内创建大量对象然后执行简单处理之后又要销毁这些刚刚建立的对象,这是一个非常消耗性能的低效行为,所以很多面向对象语言中在 ...
- D-query SPOJ - DQUERY (莫队算法裸题)
Given a sequence of n numbers a1, a2, ..., an and a number of d-queries. A d-query is a pair (i, j) ...