JAVA学习第24天;

JAVA学习第24天;,第1张

JAVA学习第24天; 复习

视图
格式 : creat view 视图名 as 查询的sql语句
视图通常用来查 比如一些效率低的模糊查询不能使用索引,就可以创建视图
好处:提高了sql语句的复用性,解决了业务表的繁杂性,被所有人共享
坏处:视图是一张表,里面是重复的数据,“浪费空间”, 视图创建成功后,无法被优化,数据更新时,视图不便于更新

批量插入 事务由两种管理方式第二种手动管理事务,必须有两个过程: 开启事务 … 结束事务(commit / rollback)
当需要插入多条事务时,需要多次结束事务,所以使用批量插入,只需要一次事务管理

三范式
第一范式: 1NF, 是指 表里的字段值不能再被分割了
第二范式: 2NF, 是指 遵循了1NF的基础上,再遵循2NF.
是指 表里都应该设计主键字段(主属性),
其他的非主属性,应该都围绕着主属性展开描述.
第三范式: 3NF, 是指 遵循了前两范式
是指 字段之间的依赖性是直接的,而不是还要间接的产生依赖,导致查询关闭变得复杂

JDBC

向数据库添加一条数据

public class Test10 {
    public static void main(String[] args) throws Exception {
        //注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        //获取连接
        String url="jdbc:mysql://localhost:3306/cgb211101?characterEncoding=utf8";
        Connection c = DriverManager.getConnection(url, "root", "root");
        System.out.println("连接成功");
        //获取传输器
        Statement s = c.createStatement();
        //在java中执行sql语句
        s.executeUpdate("insert into dept values (null,'蜘蛛侠','皇后区')");
        System.out.println("数据输入成功");


    }
 }

模拟用户登录

public class Test11 {
    public static void main(String[] args) throws Exception {
         //注册驱动
         Class.forName("com.mysql.cj.jdbc.Driver");
         //连接
         String url="jdbc:mysql://localhost:3306/cgb211101?characterEncoding=utf8";
        Connection c = DriverManager.getConnection(url, "root", "root");
        System.out.println("连接成功");
        //获取传输器
        Statement s = c.createStatement();
        System.out.println("请输入您的账号");
        String a = new Scanner(System.in).nextLine();
        System.out.println("请输入您的密码");
        String b = new Scanner(System.in).nextLine();


        String sql="select*from dept where dname='"+a+"' and loc='"+b+"' ";
        //结果集
        ResultSet r = s.executeQuery(sql);
        //处理结果集
        if (r.next()){
            System.out.println("恭喜您登录成功");
        }else{
            System.out.println("登录失败");
        }
        c.close();
        r.close();
        s.close();


    }
}

解决SQL攻击的问题 ,使用新的传输

public class Test12 {
    public static void main(String[] args) throws Exception {
        //旧的传输器 creatStatement 不够安全,用户通过 '#就可以不用输入密码
        //更换新的传输器 prepareStatement

        //创建驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        //获取连接
        String url="jdbc:mysql://localhost:3306/cgb211101?characterEncoding=utf8";
        Connection c = DriverManager.getConnection(url,"root","root");
        //获取新的传输器
        Statement s = c.createStatement();
        System.out.println("请输入您的账号");
        String a = new Scanner(System.in).nextLine();
        System.out.println("请输入您的密码");
        String b = new Scanner(System.in).nextLine();
        String sql="select*from user where name=? and pwd=?";
        PreparedStatement p = c.prepareStatement(sql);
        p.setString(1,a);
        p.setString(2,b);
        //定义结果集
        ResultSet r = p.executeQuery();
        if (r.next()){ //判断是否有下一个数据
            System.out.println("账户登录成功");
        }else{
            System.out.println("账户登录失败");
        }
        c.close();
        p.close();
        s.close();


    }
}

创造一个工具类

public class JDBCUtils1 {
    static public Connection  run() throws Exception {
        //注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        String url="jdbc:mysql://localhost:3306/cgb211101?characterEncoding=utf8";
        Connection c = DriverManager.getConnection(url, "root", "root");
        System.out.println("连接成功");
        return c;
    }

        static public void  play(Connection c ,PreparedStatement p, ResultSet r){
        if (p!=null) {
            try {
                p.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if (c!=null) {
            try {
                c.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
            if (r!=null) {
                try {
                    r.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }



        }

}

利用新的传输器结合着工具类,新增一个用户信息

public class Test13 {
    public static void main(String[] args) throws Exception {
        //方法是静态方法,通过类名直接调用
        Connection c = JDBCUtils1.run();
        //获取新的传输器
        String sql="insert into user values(null,?,?)";
        PreparedStatement p = c.prepareStatement(sql);
        p.setString(1,"super");
        p.setString(2,"777");
        //输出sql
        p.executeUpdate();
        System.out.println("写入成功");
        //关闭资源
        c.close();//关闭连接器
        p.close();//关闭传输器




    }
}

利用新的传输器结合着工具类,新增一个用户信息

public class Test14 {
    public static void main(String[] args) {
        Connection c =null;
        PreparedStatement p =null;

        try {
            //调用工具类方法获取连接
            c=JDBCUtils1.run();
            //获取新的连接器    需要传入参数
            String sql="insert into user values(null,?,?)";
            p= c.prepareStatement(sql);
            //设置参数内容
            p.setString(1,"sman");
            p.setString(2,"258");
            //执行sql语句
            p.executeUpdate();//执行增删改的SQL,返回一个影响行数(通常不处理)
            System.out.println("数据入库成功");

           } catch (Exception e) {
            e.printStackTrace();
            System.out.println("数据异常");
        }finally {
           JDBCUtils1.play(c,p,null);
        }

    }
}

利用新的传输器结合着工具类,查询用户信息

public class Test15 {
    public static void main(String[] args) {
        Connection c =null;
        PreparedStatement p =null;
        ResultSet r =null;

        try {
            //获取工具类中的run方法
            c = JDBCUtils1.run();
             //获取新的传输器  高效,安全  需要传参数
            String sql ="select*from user where name=? ";
            p = c.prepareStatement(sql);
            //设置要查询的字段值
            p.setString(1,"jack");
            //执行sql语句  并返回结果,交给 ResultSet类型的变量 r保存
            r = p.executeQuery();
            //处理返回的结果集
            while (r.next()){
                Object id = r.getObject("id");
                Object name = r.getObject("name");
                Object pwd = r.getObject("pwd");
                System.out.println(id+":"+name+pwd);
            }
          } catch (Exception e) {
            e.printStackTrace();
        }finally {
            JDBCUtils1.play(c,p,r);
        }

    }

}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5697431.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存