链接数据库模板 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以后,链接数据库总是报内存损坏,无法写入的错误 这个错误几个月以前解决过一次,但是到又碰到的时候,竟然完全忘记当时怎么解决的了, 看来上了年纪记忆真是越来越不行了... 解决方案很简单 ...
随机推荐
- TCP/IP中32位IP地址与字符串转化
转载:http://www.cnitblog.com/wujian-IT/archive/2007/10/11/34739.aspx 在网络上面我们用的IP都是数字加点(192.168.0.1)构成的 ...
- TensorFlow自编码器(AutoEncoder)之MNIST实践
自编码器可以用于降维,添加噪音学习也可以获得去噪的效果. 以下使用单隐层训练mnist数据集,并且共享了对称的权重参数. 模型本身不难,调试的过程中有几个需要注意的地方: 模型对权重参数初始值敏感,所 ...
- acrobat xi pro 11 补丁激活
acrobat xi pro 11 是一款专门为Adobe Acrobat XI Pro 11制作的破解补丁,这款补丁可以免去软件的激活步骤,让用户可以永久免费使用这款软件.11是款功能强大的pdf设 ...
- php调用shell的方法
一.配置 查看php.ini中配置是否打开安全模式,主要是以下三个地方safe_mode = (这个如果为off下面两个就不用管了)disable_functions = safe_mode_exe ...
- 【转帖】网卡多队列技术与RSS功能介绍
网卡多队列技术与RSS功能介绍 2017年02月08日 15:44:37 Murphy_0806 阅读数 10665 标签: rss网卡dpdk 更多 个人分类: DPDK https://blog. ...
- Oracle-DDL 3- 触发器
DDL-数据定义语句: 四.触发器 -- 触发器(trigger),与某些特定的操作绑定,当达到触发条件后会自动触发--主要用来将某些操作的过程记录下来,或者阻止某些非法的操作,保护数据 /*触发条件 ...
- Oracle 获取当前日期是月的第几周
函数FUNC_GET_WEEKOFMONTH: IW 是年的自然周: WW是年的第一天起开始算7天为一周 FUNCTION FUNC_GET_WEEKOFMONTH (V_PSD DATE) RETU ...
- 算法 - k-means算法
一.聚类思想 所谓聚类算法是指将一堆没有标签的数据自动划分成几类的方法,属于无监督学习方法,这个方法要保证同一类的数据有相似的特征,如下图所示: 根据样本之间的距离或者说是相似性(亲疏性),把 ...
- ETL初探
初识ETL 概念 ETL即Extract-Transform-Load.目的是将分散.凌乱.异质的数据整合在一起,为决策提供分析数据,是BI项目(Business Intellifence)项目中重要 ...
- Robot Framework-失败用例自动重跑
使用自动化脚本进行测试,经常受环境影响等各方面导致本能成功的脚本失败,下面介绍了RFS框架下,失败重跑的方法: 通过改写RobotFramework源代码增加–retry选项,实现test级别的失败用 ...