精华内容
下载资源
问答
  • jdbc案例
    千次阅读
    2020-09-16 21:19:34

    系列文章目录

    【设计模式】策略模式——支付案例
    【设计模式】适配器模式——登录案例
    【设计模式】委派模式——登录案例



    前言

            假如开一把lol,必须要做哪些事呢?可以简化位这三个步骤。选择英雄,开始游戏,投降。这三个步骤必须按照顺序执行。映射到代码中可以想到socket信息传输,建立连接,传输数据,关闭连接;
            这就是模板模式了大概的样子,在模板模式中,一个抽象类公开定义了执行它的方法的方式模板,它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。
    比如玩一把lol,选择什么英雄都可以,开始游戏后,每个人也有自己的发育路线,最后是15分钟投降,还是20分钟投降,每一局也都不一定(赢了暂时不算)不管谁来玩, 都要遵循这个路线。


    一、lol案例

    通过玩一盘游戏来初步了解下模板模式

    代码如下(游戏步骤):

    public interface PlaylolGame {
        //选择英雄
        void selectHero();
        //开始游戏
        void startGame();
        //游戏结束
        void GameOver();
    }
    

    代码如下(玩游戏模板):通过play()方法来固定玩游戏的顺序。通过传入接口来让不同的玩家来实现。

    public class PlayGameTemplate {
        private PlaylolGame playlolGame;
        public PlayGameTemplate(PlaylolGame playlolGame) {
            this.playlolGame = playlolGame;
        }
        public void play(){
            playlolGame.selectHero();
            playlolGame.startGame();
            playlolGame.GameOver();
        }
    }
    

    代码如下(德玛玩家的玩法):

    public class PlayGailun implements PlaylolGame {
        @Override
        public void selectHero() {
            System.out.println("人在塔在!~");
        }
        @Override
        public void startGame() {
            System.out.println("草丛阴一下,一个Q沉默,转两圈,一个大招带走!~");
        }
        @Override
        public void GameOver() {
            System.out.println("汗,队友太坑,20分投了~~");
        }
    }
    

    代码如下(剑豪的玩法):

    public class PlayJifengjianhao implements PlaylolGame {
        @Override
        public void selectHero() {
            System.out.println("长路漫漫,唯剑作伴!~");
        }
    
        @Override
        public void startGame() {
            System.out.println("哈撒给!~,快了起来!~");
        }
    
        @Override
        public void GameOver() {
            System.out.println("汗,队友太坑,25分投了~~");
        }
    }
    

    代码如下(入口):

    public class Test {
    
        public static void main(String[] args) {
        	//德玛玩家
            PlayGameTemplate playGame = new PlayGameTemplate(new PlayGailun());
            playGame.play();
    		//剑豪玩家
            PlayGameTemplate jianhao = new PlayGameTemplate(new PlayJifengjianhao());
            jianhao.play();
        }
        /**
         * 人在塔在!~
         * 草丛阴一下,一个Q沉默,转两圈,一个大招带走!~
         * 汗,队友太坑,20分投了~~
         * -----------------------
         * 长路漫漫,唯剑作伴!~
         * 哈撒给!~,快了起来!~
         * 汗,队友太坑,25分投了~~
         */
    }
    

    这样既可实现,不管谁来玩这个游戏,都要来按照这个步骤来玩。

    二、jdbc案例

            在真实的情况中并不一定会遇到玩游戏的案例,但是jdbc连接的案例肯定会遇到。每次数据库都要设置连接信息。就是DataSource这个接口,这个接口是javax.sql包下的,是jdk带的接口,意思是说哪种数据库想通过java语言进行连接,就要实现DataSource这个官方的接口。比如如果引入mysql的驱动,那么就会有一个MysqlDataSource实现了DataSource这个接口。
            JdbcTemplate有一个传入DataSource的的构造方法。
    代码如下:

        private DataSource dataSource;
        
        public JdbcTemplate(DataSource dataSource) {
            this.setDataSource(dataSource);
            this.afterPropertiesSet();
        }
    

    通过构造方法来设置DataSource的实现。设置完成之后,即可使用JdbcTemplate,最多的方法可能就是execute方法
    代码如下:现在暂且把代码分为3步,1.建立连接,2传输信息,3关闭连接

        public <T> T execute(StatementCallback<T> action) throws DataAccessException {
            Assert.notNull(action, "Callback object must not be null");
            //1 获取连接,通过con来接收连接信息
            Connection con = DataSourceUtils.getConnection(this.getDataSource());
            Statement stmt = null;
    
            Object var7;
            try {
                Connection conToUse = con;
                if(this.nativeJdbcExtractor != null && this.nativeJdbcExtractor.isNativeConnectionNecessaryForNativeStatements()) {
                    conToUse = this.nativeJdbcExtractor.getNativeConnection(con);
                }
    
                stmt = conToUse.createStatement();
                this.applyStatementSettings(stmt);
                Statement stmtToUse = stmt;
                if(this.nativeJdbcExtractor != null) {
                    stmtToUse = this.nativeJdbcExtractor.getNativeStatement(stmt);
                }
    			//2 传输并且接收返回的信息
                T result = action.doInStatement(stmtToUse);
                this.handleWarnings(stmt);
                var7 = result;
            } catch (SQLException var11) {
                JdbcUtils.closeStatement(stmt);
                stmt = null;
                DataSourceUtils.releaseConnection(con, this.getDataSource());
                con = null;
                throw this.getExceptionTranslator().translate("StatementCallback", getSql(action), var11);
            } finally {
            	//3.关闭连接
                JdbcUtils.closeStatement(stmt);
                DataSourceUtils.releaseConnection(con, this.getDataSource());
            }
    
            return var7;
        }
    

    由以上代码发现,不管使用mysql还是Oracle,如果想使用JdbcTemplate,必须要实现DataSource接口,通过传入DataSource创建JdbcTemplate对象。JdbcTemplate的方法已经固定,不管什么数据库都要遵循这种执行流程。

    总结

    模板模式重点是有固定的处理流程无法修改,但是可以改变某一些流程的处理方式;相对于策略模式来说,策略模式是处理方式(或者说算法)已经固定好,但是可以选择其中一个来处理,侧重于选择。
    更多相关内容
  • 使用Spring JDBC 案例

    2018-08-25 10:02:48
    有spring jdbctemplate 增删改查 配置spring自带的、c3p0、dbcp、druid 4种连接池 以及读取jdbc.properties数据源 自己写的一个行映射器工具类
  • jdbc案例

    2020-10-09 13:10:47
    07-jdbc案例-需求介绍和数据准备 08-jdbc案例-需求一查询所有学生信息 09-jdbc案例-需求二根据id查询学生信息 10-jdbc案例-需求三添加学生信息 11-jdbc案例-需求四修改学生信息 12-jdbc案例-需求五删除学生信息 1....

    07-jdbc案例-需求介绍和数据准备

    08-jdbc案例-需求一查询所有学生信息

    09-jdbc案例-需求二根据id查询学生信息

    10-jdbc案例-需求三添加学生信息

    11-jdbc案例-需求四修改学生信息

    12-jdbc案例-需求五删除学生信息

    1.数据准备

    • 数据库和数据表
    -- 创建db14数据库
    CREATE DATABASE db14;
    
    -- 使用db14数据库
    USE db14;
    
    -- 创建student表
    CREATE TABLE student(
    	sid INT PRIMARY KEY AUTO_INCREMENT,	-- 学生id
    	NAME VARCHAR(20),					-- 学生姓名
    	age INT,							-- 学生年龄
    	birthday DATE						-- 学生生日
    );
    
    -- 添加数据
    INSERT INTO student VALUES (NULL,'张三',23,'1999-09-23'),(NULL,'李四',24,'1998-08-10'),(NULL,'王五',25,'1996-06-06'),(NULL,'赵六',26,'1994-10-20');
    
    • 实体类
      • Student类,成员变量对应表中的列
      • 注意:所有的基本数据类型需要使用包装类,以防null值无法赋值
    package com.itheima02.domain;
    
    import java.util.Date;
    
    public class Student {
        private Integer sid;
        private String name;
        private Integer age;
        private Date birthday;
    
        public Student() {
        }
    
        public Student(Integer sid, String name, Integer age, Date birthday) {
            this.sid = sid;
            this.name = name;
            this.age = age;
            this.birthday = birthday;
        }
    
        public Integer getSid() {
            return sid;
        }
    
        public void setSid(Integer sid) {
            this.sid = sid;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
        public Date getBirthday() {
            return birthday;
        }
    
        public void setBirthday(Date birthday) {
            this.birthday = birthday;
        }
    
        @Override
        public String toString() {
            return "Student{" +
                    "sid=" + sid +
                    ", name='" + name + '\'' +
                    ", age=" + age +
                    ", birthday=" + birthday +
                    '}';
        }
    }
    

    2.需求一:查询全部

    • 持久层
    /*
         查询所有学生信息
    */
    @Override
    public ArrayList<Student> findAll() {
        ArrayList<Student> list = new ArrayList<>();
        Connection con = null;
        Statement stat = null;
        ResultSet rs = null;
        try{
            //1.注册驱动
            Class.forName("com.mysql.jdbc.Driver");
    
            //2.获取数据库连接
            con = DriverManager.getConnection("jdbc:mysql://192.168.59.129:3306/db14", "root", "itheima");
    
            //3.获取执行者对象
            stat = con.createStatement();
    
            //4.执行sql语句,并且接收返回的结果集
            String sql = "SELECT * FROM student";
            rs = stat.executeQuery(sql);
    
            //5.处理结果集
            while(rs.next()) {
                Integer sid = rs.getInt("sid");
                String name = rs.getString("name");
                Integer age = rs.getInt("age");
                Date birthday = rs.getDate("birthday");
    
                //封装Student对象
                Student stu = new Student(sid,name,age,birthday);
    
                //将student对象保存到集合中
                list.add(stu);
            }
    
        } catch(Exception e) {
            e.printStackTrace();
        } finally {
            //6.释放资源
            if(con != null) {
                try {
                    con.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
    
            if(stat != null) {
                try {
                    stat.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
    
            if(rs != null) {
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        //将集合对象返回
        return list;
    }
    
    • 业务层
    /*
        查询所有学生信息
    */
    @Override
    public ArrayList<Student> findAll() {
        return dao.findAll();
    }
    
    • 控制层
    /*
        查询所有学生信息
    */
    @Test
    public void findAll() {
        ArrayList<Student> list = service.findAll();
        for(Student stu : list) {
            System.out.println(stu);
        }
    }
    

    3.需求二:条件查询

    • 持久层
    /*
        条件查询,根据id查询学生信息
    */
    @Override
    public Student findById(Integer id) {
        Student stu = new Student();
        Connection con = null;
        Statement stat = null;
        ResultSet rs = null;
        try{
            //1.注册驱动
            Class.forName("com.mysql.jdbc.Driver");
    
            //2.获取数据库连接
            con = DriverManager.getConnection("jdbc:mysql://192.168.59.129:3306/db14", "root", "itheima");
    
            //3.获取执行者对象
            stat = con.createStatement();
    
            //4.执行sql语句,并且接收返回的结果集
            String sql = "SELECT * FROM student WHERE sid='"+id+"'";
            rs = stat.executeQuery(sql);
    
            //5.处理结果集
            while(rs.next()) {
                Integer sid = rs.getInt("sid");
                String name = rs.getString("name");
                Integer age = rs.getInt("age");
                Date birthday = rs.getDate("birthday");
    
                //封装Student对象
                stu.setSid(sid);
                stu.setName(name);
                stu.setAge(age);
                stu.setBirthday(birthday);
            }
    
        } catch(Exception e) {
            e.printStackTrace();
        } finally {
            //6.释放资源
            if(con != null) {
                try {
                    con.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
    
            if(stat != null) {
                try {
                    stat.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
    
            if(rs != null) {
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        //将对象返回
        return stu;
    }
    
    • 业务层
    /*
        条件查询,根据id查询学生信息
    */
    @Override
    public Student findById(Integer id) {
        return dao.findById(id);
    }
    
    • 控制层
    /*
        条件查询,根据id查询学生信息
    */
    @Test
    public void findById() {
        Student stu = service.findById(3);
        System.out.println(stu);
    }
    

    4.需求三:新增数据

    • 持久层
    /*
          添加学生信息
    */
    @Override
    public int insert(Student stu) {
        Connection con = null;
        Statement stat = null;
        int result = 0;
        try{
            //1.注册驱动
            Class.forName("com.mysql.jdbc.Driver");
    
            //2.获取数据库连接
            con = DriverManager.getConnection("jdbc:mysql://192.168.59.129:3306/db14", "root", "itheima");
    
            //3.获取执行者对象
            stat = con.createStatement();
    
            //4.执行sql语句,并且接收返回的结果集
            Date d = stu.getBirthday();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            String birthday = sdf.format(d);
            String sql = "INSERT INTO student VALUES ('"+stu.getSid()+"','"+stu.getName()+"','"+stu.getAge()+"','"+birthday+"')";
            result = stat.executeUpdate(sql);
    
        } catch(Exception e) {
            e.printStackTrace();
        } finally {
            //6.释放资源
            if(con != null) {
                try {
                    con.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
    
            if(stat != null) {
                try {
                    stat.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        //将结果返回
        return result;
    }
    
    • 业务层
    /*
        新增学生信息
    */
    @Override
    public int insert(Student stu) {
        return dao.insert(stu);
    }
    
    • 控制层
    /*
      	新增学生信息
    */
    @Test
    public void insert() {
        Student stu = new Student(5,"周七",27,new Date());
        int result = service.insert(stu);
        if(result != 0) {
            System.out.println("新增成功");
        }else {
            System.out.println("新增失败");
        }
    }
    

    5.需求四:修改数据

    • 持久层
    /*
        修改学生信息
    */
    @Override
    public int update(Student stu) {
        Connection con = null;
        Statement stat = null;
        int result = 0;
        try{
            //1.注册驱动
            Class.forName("com.mysql.jdbc.Driver");
    
            //2.获取数据库连接
            con = DriverManager.getConnection("jdbc:mysql://192.168.59.129:3306/db14", "root", "itheima");
    
            //3.获取执行者对象
            stat = con.createStatement();
    
            //4.执行sql语句,并且接收返回的结果集
            Date d = stu.getBirthday();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            String birthday = sdf.format(d);
            String sql = "UPDATE student SET sid='"+stu.getSid()+"',name='"+stu.getName()+"',age='"+stu.getAge()+"',birthday='"+birthday+"' WHERE sid='"+stu.getSid()+"'";
            result = stat.executeUpdate(sql);
    
        } catch(Exception e) {
            e.printStackTrace();
        } finally {
            //6.释放资源
            if(con != null) {
                try {
                    con.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
    
            if(stat != null) {
                try {
                    stat.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        //将结果返回
        return result;
    }
    
    • 业务层
    /*
        修改学生信息
    */
    @Override
    public int update(Student stu) {
        return dao.update(stu);
    }
    
    • 控制层
    /*
        修改学生信息
    */
    @Test
    public void update() {
        Student stu = service.findById(5);
        stu.setName("周七七");
    
        int result = service.update(stu);
        if(result != 0) {
            System.out.println("修改成功");
        }else {
            System.out.println("修改失败");
        }
    }
    

    6.需求五:删除数据

    • 持久层
    /*
        删除学生信息
    */
    @Override
    public int delete(Integer id) {
        Connection con = null;
        Statement stat = null;
        int result = 0;
        try{
            //1.注册驱动
            Class.forName("com.mysql.jdbc.Driver");
    
            //2.获取数据库连接
            con = DriverManager.getConnection("jdbc:mysql://192.168.59.129:3306/db14", "root", "itheima");
    
            //3.获取执行者对象
            stat = con.createStatement();
    
            //4.执行sql语句,并且接收返回的结果集
            String sql = "DELETE FROM student WHERE sid='"+id+"'";
            result = stat.executeUpdate(sql);
    
        } catch(Exception e) {
            e.printStackTrace();
        } finally {
            //6.释放资源
            if(con != null) {
                try {
                    con.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
    
            if(stat != null) {
                try {
                    stat.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        //将结果返回
        return result;
    }
    
    • 业务层
    /*
        删除学生信息
    */
    @Override
    public int delete(Integer id) {
        return dao.delete(id);
    }
    
    • 控制层
    /*
        删除学生信息
    */
    @Test
    public void delete() {
        int result = service.delete(5);
    
        if(result != 0) {
            System.out.println("删除成功");
        }else {
            System.out.println("删除失败");
        }
    }
    
    展开全文
  • 一个Spring的JDBC案例 一个项目变成Spring项目的步骤 XML配置方式依赖注入 调整包和目录结构,将其变成一个maven项目 编写pom文件。导入spring依赖。依赖配置见spring.io官网 在resource目录下创建application-...
  • mydriver=com.mysql.jdbc.Driver myurl=jdbc:mysql://localhost:3306/mydb2 myuser=root mypwd=123456
  • jsp+servlet+jdbc案例

    2016-04-23 16:52:51
    mvc三层框架+servlet+filter+jsp+jdbc
  • 传智播客崔希凡JavaWeb-day19JDBC第三天(DBUtil使用、jdbc案例)-全部资料.rar,5.高级搜索.bmp,day19_res,customer.sql,customer原型,customer,.project,.mymetadata,src,WebRoot,top.jsp,WEB-INF,classes,lib,web....
  • java的JDBC简单案例

    千次阅读 2021-11-23 22:27:00
    java的JDBC简单案例 Driver接口 Driver是每个驱动程序类必须实现的接口,专门提供给数据厂商使用 在编写JDBC程序时,必须要把所使用的数据库驱动程序和类库 (指MySQL的驱动JAR包)加载到项目的classpath中。 ...

    java的JDBC简单案例

    Driver接口

    Driver是每个驱动程序类必须实现的接口,专门提供给数据厂商使用

    在编写JDBC程序时,必须要把所使用的数据库驱动程序和类库
    (指MySQL的驱动JAR包)加载到项目的classpath中。

    jar包下载地

    在这里插入图片描述

    解压后添加到项目中

    在这里插入图片描述

    根据代码提示加载Driver的包

    Class.forName("com.mysql.jdbc.Driver");
    

    Connection接口

    Connection接口用于创建数据库的连接,只有获得该连接对象后才可以访问数据库,并操作数据表。

    在这里插入图片描述

               String url = "jdbc:mysql://127.0.0.1:3306/xiaoxiaoran";
               String username = "root";
               String password = "root";
               conn = DriverManager.getConnection(url, username, password);
             
    
    

    Statement接口

    利用该对象把普通的SQL语句发送到数据库进行编译,然后返回数据库的处理结果。

    在这里插入图片描述

    PreparedStatement接口

    PreparedStatement是Statement的子接口,拥有Statement接口的所有方法,并且可以对SQL语句进行预编译,预编译后的数据会存储在PreparedStatement对象中

    PreparedStatement接口还扩展了带有参数SQL语句的执行操作,应用于该接口中的SQL语句可以使用占位符“?”代替其参数,然后通过setXxx()方法为SQL语句的参数赋值

    在这里插入图片描述

    	 		sql = "select * from books where bId>? ";
                PreparedStatement ptmt = conn.prepareStatement(sql);
                ptmt.setInt(1, 40);
                rs = ptmt.executeQuery();
                while (rs.next()) {
                    System.out.println(rs.getString(1) + "\t" + rs.getString(2) + "-此书作者-->" + rs.getString("author"));
                }
                rs.close();
    
    
      			sql = "UPDATE books SET bName=? WHERE bid =? ";
                PreparedStatement ptmt2 = conn.prepareStatement(sql);
                ptmt2.setString(1, "xiaoxiaoran");
                ptmt2.setInt(2, 45);
                ptmt2.execute();
    
    

    ResultSet接口

    ResultSet接口用于保存JDBC执行查询时返回的结果集,该结果集与数据库表字段相对应。

    在应用程序中经常使用next()方法作为while循环的条件以迭代ResultSet结果集

    在这里插入图片描述

                String sql = "select * from books where bId>40 ";
                rs = stmt.executeQuery(sql);
    
                while (rs.next()) {
                    System.out.println(rs.getString(1) + "\t" + rs.getString(2) + "-此书作者-->" + rs.getString("author"));
                }
                rs.close();
    

    案例代码

    案例数据库表结构

    在这里插入图片描述

    import java.sql.*;
    
    public class Sql {
        public static void main(String[] args) throws SQLException {
            Statement stmt = null;
            ResultSet rs = null;
            Connection conn = null;
    
            try {
                Class.forName("com.mysql.jdbc.Driver");
    
                String url = "jdbc:mysql://127.0.0.1:3306/xiaoxiaoran";
                String username = "root";
                String password = "root";
    
                conn = DriverManager.getConnection(url, username, password);
                stmt = conn.createStatement();
    
                String sql = "select * from books where bId>40 ";
                rs = stmt.executeQuery(sql);
    
                while (rs.next()) {
                    System.out.println(rs.getString(1) + "\t" + rs.getString(2) + "-此书作者-->" + rs.getString("author"));
                }
                rs.close();
    
                sql = "select * from books where bId>? ";
                PreparedStatement ptmt = conn.prepareStatement(sql);
                ptmt.setInt(1, 40);
                rs = ptmt.executeQuery();
                while (rs.next()) {
                    System.out.println(rs.getString(1) + "\t" + rs.getString(2) + "-此书作者-->" + rs.getString("author"));
                }
                rs.close();
             
    
                sql = "UPDATE books SET bName=? WHERE bid =? ";
                PreparedStatement ptmt2 = conn.prepareStatement(sql);
                ptmt2.setString(1, "xiaoxiaoran");
                ptmt2.setInt(2, 45);
                ptmt2.execute();
    
                
    
    
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } finally {
                if (rs != null)
                    rs.close();
                rs = null;
    
                stmt.close();
                stmt = null;
    
                conn.close();
                conn = null;
            }
    
        }
    }
    
    

    运行结果

    在这里插入图片描述


    展开全文
  • Swing JDBC 案例

    2011-08-27 13:39:34
    一个关于 swing 的jdbc练习 包括查询 修改 添加 删除 分页
  • springMVC+jdbc(基于注解和标签两种实现方式)
  • JDBC案例-用java操作数据库增删改查

    千次阅读 2022-02-10 22:11:38
    JDBC,用java来操作数据库增删改查 建表代码 这里是建表需要的代码,这里规定一个表,初始是这样的 --建表的代码 CREATE TABLE ceshi( id INT PRIMARY KEY AUTO_INCREMENT, people VARCHAR(50) NOT NULL UNIQUE, age...

    JDBC,用java来操作数据库增删改查

    建表代码

    这里是建表需要的代码,这里规定一个表,初始是这样的

    --建表的代码
    CREATE TABLE ceshi(
    id INT PRIMARY KEY AUTO_INCREMENT,
    people VARCHAR(50) NOT NULL UNIQUE,
    age INT NOT NULL
    );
    -- 插入的四条数据
    INSERT INTO ceshi(people,age) VALUES("张珊",18);
    INSERT INTO ceshi(people,age) VALUES("李思",20);
    INSERT INTO ceshi(people,age) VALUES("王无",19);
    INSERT INTO ceshi(people,age) VALUES("周九",21);
    

    在这里插入图片描述

    用户类

    接下来这个是建立了一个数据表的类,用于后续构建对象使用。

    public class cePeople {
        //主键id,基本数据类型使用对应好的包装类型
        private Integer id;
        //名字
        private String Pname;
        //年龄
        private Integer age;
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getPname() {
            return Pname;
        }
    
        public void setPname(String pname) {
            Pname = pname;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
        @Override
        public String toString() {
            return "people{" +
                    "id=" + id +
                    ", Pname='" + Pname + '\'' +
                    ", age=" + age +
                    '}';
        }
    }
    
    核心代码

    PreparedStatement后面有讲是干什么的

    import org.junit.Test;
    
    import java.sql.*;
    import java.util.ArrayList;
    import java.util.List;
    
    public class CeTest {
        // 查询表中所有数据到集合中显示出来
        @Test
        public void selectTest() throws ClassNotFoundException, SQLException {
            //1.注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            //2.获取连接
            String url = "jdbc:mysql://127.0.0.1:3306/test?useSSL=false&useServerPrepStmts=true";
            String username = "你的账户名称";
            String password = "你的账户密码";
            Connection conn = DriverManager.getConnection(url, username, password);
            //4.定义sql
            String sql = "select * from ceshi";
            //5.获取pstmt对象
            PreparedStatement pstmt = conn.prepareStatement(sql);
            //6.设置参数
            //7.执行sql
            ResultSet rs = pstmt.executeQuery();
            //8.处理结果
    
            List<cePeople> peList = new ArrayList<>();
            while (rs.next()) {
                //1.获取数据。
                int id = rs.getInt("id");
                String Pname = rs.getString("people");
                int age = rs.getInt("age");
                //2.封装对象。
                cePeople peop = new cePeople();
                peop.setId(id);
                peop.setPname(Pname);
                peop.setAge(age);
                //3.集合处理
                peList.add(peop);
            }
            //System.out.println(peList);
            for (int i = 0; i < peList.size(); i++) {//循环遍历1.0
                cePeople c1 = peList.get(i);//得到下标的每一个元素
                System.out.println(c1.getId() + "," + c1.getPname() + "," + c1.getAge());
            }
            //9.关闭资源
            rs.close();
            pstmt.close();
            conn.close();
        }
    
        // 添加数据
        @Test
        public void addTest() throws ClassNotFoundException, SQLException {
            //添加数据
            String Pname = "麻子";
            int age = 21;
            //1.注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            //2.获取连接
            String url = "jdbc:mysql://127.0.0.1:3306/test?useSSL=false&useServerPrepStmts=true";
             String username = "你的账户名称";
            String password = "你的账户密码";
            Connection conn = DriverManager.getConnection(url, username, password);
            //4.定义sql
            String sql = "insert into ceshi(people,age) values(?,?)";
            //5.获取pstmt对象
            PreparedStatement pstmt = conn.prepareStatement(sql);
            //6.设置参数
            pstmt.setString(1, Pname);
            pstmt.setInt(2, age);
            //7.执行sql
    
            int count = pstmt.executeUpdate();//得到影响行数
            //8.处理结果
            System.out.println(count > 0);
    
        //9.关闭资源
            pstmt.close();
            conn.close();
    }
        // 删除数据,根据id
        @Test
        public void deleteTest() throws ClassNotFoundException, SQLException{
            //删除id是5的数据
            int id=5;
    
            //1.注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            //2.获取连接
            String url = "jdbc:mysql://127.0.0.1:3306/test?useSSL=false&useServerPrepStmts=true";
            String username = "你的账户名称";
            String password = "你的账户密码";
            Connection conn = DriverManager.getConnection(url, username, password);
            //4.定义sql
            String sql = "delete from ceshi where id=?";
            //5.获取pstmt对象
            PreparedStatement pstmt = conn.prepareStatement(sql);
            //6.设置参数
            pstmt.setInt(1, id);
            //7.执行sql
    
            int count = pstmt.executeUpdate();//得到影响行数
            //8.处理结果
            System.out.println(count > 0);
    
            //9.关闭资源
            pstmt.close();
            conn.close();
        }
        // 修改数据,根据名字
        @Test
        public void alterTest() throws ClassNotFoundException, SQLException{
            //修改的数据
            int id=5;
            int age = 18;
            //1.注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            //2.获取连接
            String url = "jdbc:mysql://127.0.0.1:3306/test?useSSL=false&useServerPrepStmts=true";
            String username = "你的账户名称";
            String password = "你的账户密码";
            Connection conn = DriverManager.getConnection(url, username, password);
            //4.定义sql
            String sql = "update ceshi set age=? where id=?";
            //5.获取pstmt对象
            PreparedStatement pstmt = conn.prepareStatement(sql);
            //6.设置参数
            pstmt.setInt(1,age);
            pstmt.setInt(2, id);
            //7.执行sql
    
            int count = pstmt.executeUpdate();//得到影响行数
            //8.处理结果
            System.out.println(count > 0);
    
            //9.关闭资源
            pstmt.close();
            conn.close();
    
        }
    }
    

    查询输出的数据
    在这里插入图片描述

    添加好的一条数据
    在这里插入图片描述

    tips:定义sql语句,先写单引号,在添双引号的内容。

    String name="xxx";
    String pwd="223";
    String sql="select * from user_tb where username= '"+name+"' and password='"+pwd+"'";
    

    PreparedStatement函数

    下面是上次JDBC中的API没有讲解完,是防止sql注入的函数。
    prepareStatement对象防止sql注入的方式是把用户非法输入的单引号用\反斜杠做了转义,从而达到了防止sql注入的目的。
    下面是样例,这样可以防止pwd="'or ‘1’='1"这样的sql数字型注入

    String url="jdbc:mysql://127.0.0.1:3306/test?useSSL=false&useServerPrepStmts=true";
    这里记得添加预编译功能,因为他默认是关闭的,你要自己打开。       
    
    //定义变量
     String name="qww";
     String pwd="223";
     String pwd2="'or '1'='1";这个是sql注入简单版的。
     
     //定义sql
     String sql="select * from user_tb where username= ? and password=?";
     
     //获取pstmt对象
      PreparedStatement pstmt = conn.prepareStatement(sql);
      
      //设置问号的值,相当于进行一个转义,让特殊字符无法注入数据库
     pstmt.setString(1,name);
     pstmt.setString(2,pwd);
    
     //执行sql
     ResultSet rs=pstmt.executeQuery();
     
     //判断是否成功
     if(rs.next()){
         System.out.println("成功登录");
     }else{
         System.out.println("失败了");
     }
     
    // 释放资源
     rs.close();
     pstmt.close();
     conn.close();
    

    :|

    展开全文
  • 目录1 需求描述2 数据库设计3 环境说明4....本案例实现功能如下: 1、添加商品 2、商品分页查询 4、商品统计 2 数据库设计 数据库设计如下,其中商品与店铺信息之间进行了垂直分库,分为了PRODUCT_DB
  • 6.【Sharding-JDBC案例

    2022-08-14 19:30:35
    电商平台商品列表展示,每个列表项中除了包含商品基本信息、商品描述信息之外,还包括了商品所属的店铺信息,如下:本案例实现功能如下:1、添加商品2、商品分页查询4、商品统计。
  • JDBC经典例子

    2013-04-26 21:19:25
    UN公司设计接口(或者规范、标准),生产厂商来实现这些接口,即它们各自的Driver。
  • Sharding-jdbc 5.1.2案例

    2022-07-07 11:35:17
    sharding-jdbc案例,版本5.1.2 springboot + mybatis-plus + sharding-jdbc
  • 汽车出租系统jdbc案例

    2010-03-18 16:48:11
    jdbcDemo2.rar,jdbcDemo2,.project,.mymetadata,WebRoot,WEB-INF,web.xml,lib,ojdbc14.jar,nls_charset12.jar,classes,com,bluedot,test,Test.class,MyDriver.class,Count.class,domain,User.class,commons,config....
  • 1、本课程讲解了JDBC技术的基本技术以及statement、preparedstatement、对存储过程的调用、事物控制、批处理、处理结果、数据库连接池、代码生成器、元数据以及项目实战等经典案例; 2、本课程提供所有代码笔记素材...
  • shareding-jdbc分库分表

    2019-04-01 10:26:05
    Sharding-JDBC 是当当网开源的适用于微服务的分布式数据访问基础类库,完整的实现了分库分表,读写分离和分布式主键功能,并初步实现了柔性事务。从 2016 年开源至今,在经历了整体架构的数次精炼以及稳定性打磨后,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 64,691
精华内容 25,876
关键字:

jdbc案例

友情链接: 恒速运行.rar