zoukankan      html  css  js  c++  java
  • 链接数据库模板 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连接池等等,越高级的代码量越少,所以之后还需要对高级方法的学习。

  • 相关阅读:
    总结(yst)
    iOS 中 OC项目使用swift第三方工具(OC、swift 混合)
    iOS Appstore 版本更新
    软件设计模式
    iOS huhuProject积累
    iOS暴力禁用navigationviewcontroller右滑手势和手势的优先级
    ios 真机调试支持包的路径
    ios 沙盒路径
    Undefined symbols for architecture x86_64 "_OBJC_CLASS_$_类名",referenced fromobjc-class in .o
    pako.js GZIP定义解压和压缩的方法
  • 原文地址:https://www.cnblogs.com/suanai/p/11983362.html
Copyright © 2011-2022 走看看