栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

cgb2108-day06

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

cgb2108-day06

文章目录
    • 一,JDBC
      • --1,创建工具类
      • --2,模拟用户登录
      • --3,JDBC的练习
      • --4,JDBC的总结
      • --5,修改释放资源的代码
    • 二,HTML
      • --1,概述
      • --2,入门案例

一,JDBC –1,创建工具类
package cn.tedu.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;

//提供丰富的方法,方便的jdbc操作
public class JDBCUtils {
    //1,获取数据库的连接(注册驱动+获取连接)
    
    static public Connection getConnection() throws Exception{
        //1,注册驱动
        Class.forName("com.mysql.jdbc.Driver");//全路径
        //2,获取数据库的连接(用户名/密码)
        //jdbc连接mysql数据库的协议//本机:端口号/数据库的名字   解决中文乱码             指定时区                     关闭权限检验
        String url="jdbc:mysql://localhost:3306/cgb2108?characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false" ;
        Connection c = DriverManager.getConnection(
                url,"root","root");
        return c ;//返回给调用者
    }

}


–2,模拟用户登录
package cn.tedu.jdbc;

import java.sql.*;
import java.util.Scanner;

//需求:利用JDBC,查询tb_user表里的数据

public class Test2 {
    public static void main(String[] args) throws Exception {
//        method();//查询tb_user表里的数据
//        method2();//模拟用户登录
        method3();//解决SQL攻击问题
    }
    //解决SQL攻击问题
    private static void method3() throws Exception {
        //1,注册驱动 2,获取连接
        Connection c = JDBCUtils.getConnection();
        //3,执行SQL
        String a = new Scanner(System.in).nextLine();//用户名
        String b = new Scanner(System.in).nextLine();//密码
        //如果动态的拼接字符串时,数据在中间的位置  "+a+"
//        String sql="select * from tb_user where name='jack' and password='321'" ;
//        String sql="select * from tb_user where name='"+a+"' and password='"+b+"'" ;
        //SQL骨架:用?代替了参数的位置,?叫占位符,好处:简洁(避免了SQL拼接参数)
        String sql="select * from tb_user where name=? and password=?" ;
        //4,获取传输器
//        Statement s = c.createStatement();
        PreparedStatement s = c.prepareStatement(sql);
        //设置SQL参数--setXxx()设置不同类型的参数
        s.setString(1,a);//?的索引,要给?设置的值
        s.setString(2,b);//?的索引,要给?设置的值
        //TODO 当用户名输入jack'#时还会发生SQL攻击吗???
        ResultSet r = s.executeQuery();
        //5,解析结果集
        if(r.next()){//查到数据了吗?查到了就登录成功
            System.out.println("登录成功~");
        }else{
            System.out.println("用户名或者密码输入错误,登录失败~");
        }
        //6,关闭资源
        r.close();
        s.close();
        c.close();
    }

    //查询tb_user表里的数据
    private static void method() throws Exception{
        //调用工具类的方法
        Connection c = JDBCUtils.getConnection();
        //3,获取传输器
        Statement s = c.createStatement();
        //4,执行SQL
        ResultSet r = s.executeQuery("select * from tb_user");
        //5,解析结果集
        while(r.next()){//判断r有数据
            //获取r的数据
            int a = r.getInt("id");//获取表里的id字段的值
            String b = r.getString("name");//获取表里的name字段的值
            String c1 = r.getString("password");//获取表里的password字段的值
            System.out.println(a+b+c1);
        }
        //6,释放资源
        r.close();//释放结果集
        s.close();//释放传输器
        c.close();//释放连接器
    }
    
    private static void method2() throws Exception {
        //1,注册驱动 2,获取连接
        Connection c = JDBCUtils.getConnection();
        //3,获取传输器
        Statement s = c.createStatement();
        //4,执行SQL
        String a = new Scanner(System.in).nextLine();//用户名
        String b = new Scanner(System.in).nextLine();//密码
        //如果动态的拼接字符串时,数据在中间的位置  "+a+"
//        String sql="select * from tb_user where name='jack' and password='321'" ;
String sql="select * from tb_user where name='"+a+"' and password='"+b+"'" ;
        ResultSet r = s.executeQuery(sql);
        //5,解析结果集
        if(r.next()){//查到数据了吗?查到了就登录成功
            System.out.println("登录成功~");
        }else{
            System.out.println("用户名或者密码输入错误,登录失败~");
        }
        //6,关闭资源
        r.close();
        s.close();
        c.close();
    }
}

–3,JDBC的练习
package cn.tedu.jdbc;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

//JDBC的练习
public class Test3 {
    public static void main(String[] args) throws Exception{
//        method();//查询部门表的<100数据
        method2();//向dept表里插入数据
    }
    //向dept表里插入数据
    private static void method2() throws Exception {
        Connection c = JDBCUtils.getConnection();
        //插入数据时怎么决定要几个问号? 要看表里有几个字段需要设置值
        String sql = "insert into dept values(?,?,?)" ;
        PreparedStatement p = c.prepareStatement(sql);
        //设置SQL的参数
        p.setObject(1,666);
        p.setObject(2,"软件测试部");
        p.setObject(3,"大山西");
        //执行SQL
        p.executeUpdate();//执行增删改的SQL
        //TODO 会返回结果集吗?返回了的是啥?
    }
    //查询部门表的<100数据
    private static void method() throws Exception{
        Connection c = JDBCUtils.getConnection();//利用工具类,获取数据库的连接
        //获取传输器,执行SQL骨架
        String sql = "select * from dept where deptno < ?";
        PreparedStatement s = c.prepareStatement(sql);
        //设置SQL的参数
        s.setInt(1,100);//给第一个?设置100
        ResultSet r = s.executeQuery();//执行查询的SQL语句
        //处理结果集
        while(r.next()){//next()判断有数据吗
            //获取数据getXxx()--获取表里的dname字段的值,并打印
            String str = r.getString("dname");
            System.out.println(str);
        }
        //关闭资源
        r.close();
        s.close();
        c.close();
    }
}

–4,JDBC的总结

1, 什么是JDBC? java程序连接数据库的标准方案,全称是java database connectivity
2, 使用JDBC步骤? 导入jar包,注册驱动,获取数据库的连接,获取传输器,执行SQL,解析结果集(查询),关闭资源
3, 传输器Statement和PreparedStatement有什么区别? Statement不安全(可能发生SQL攻击),而且低效
4, Statement和PreparedStatement有什么关系? public interface PreparedStatement extends Statement ,是父子接口
5, SQL攻击? 原因是:SQL中出现了特殊符号#(注释符号)改变了SQL的语义 解决方案:使用新的传输器PreparedStatement
6, 执行SQL: 先执行SQL骨架,然后再给SQL设置参数
executeUpdate(): 用来执行增删改的SQL语句,并且返回了影响行数
executeQuery(): 用来执行查的SQL语句,并且返回了结果集ResultSet

–5,修改释放资源的代码
package cn.tedu.jdbc;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

//JDBC的练习
public class Test3 {
    public static void main(String[] args) throws Exception{
        method();//查询部门表的<100数据
//        method2();//向dept表里插入数据
    }
    //向dept表里插入数据
    //为了资源一定会被释放?
    // 把释放资源的代码放入finally里+扩大变量的作用范围
    // +在try里修改变量的默认值null+在finally里进行try catch
    private static void method2(){
        //扩大变量的作用范围?因为想让finally也使用
        Connection c = null ;
        PreparedStatement p = null;
        try{
            c = JDBCUtils.getConnection();
            //插入数据时怎么决定要几个问号? 要看表里有几个字段需要设置值
            String sql = "insert into dept values(?,?,?)" ;
            p = c.prepareStatement(sql);
            //设置SQL的参数
            p.setObject(1,666);
            p.setObject(2,"软件测试部");
            p.setObject(3,"大山西");
            //执行SQL
            int rows = p.executeUpdate();//执行增删改的SQL
            //TODO 会返回结果集吗?返回了的是啥?
            System.out.println("影响的行数是: "+rows);
        }catch (Exception e){
            System.out.println("出错啦~");
        }finally {//资源的释放是一定要执行的
            //关闭资源
            try{
                p.close();
            }catch (Exception e){
                e.printStackTrace();
            }
            try {
                c.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
    }
    //查询部门表的<100数据
    private static void method() {
        Connection c =null;
        PreparedStatement s =null;
        ResultSet r =null;
        try{
            c = JDBCUtils.getConnection();//利用工具类,获取数据库的连接
            //获取传输器,执行SQL骨架
            String sql = "select * from dept where deptno < ?";
             s = c.prepareStatement(sql);
            //设置SQL的参数
            s.setInt(1,100);//给第一个?设置100
             r = s.executeQuery();//执行查询的SQL语句
            //处理结果集
            while(r.next()){//next()判断有数据吗
                //获取数据getXxx()--获取表里的dname字段的值,并打印
                String str = r.getString("dname");
                System.out.println(str);
            }
        }catch (Exception e){
           //项目上线阶段,给出的解决方案,比如输出
            System.out.println("数据库连接出错~~");
           //项目开发调试阶段,给出的解决方案,根据报错信息
            e.printStackTrace();
        }finally {
            //关闭资源
            try {
                r.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
            try {
                s.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
            try {
                c.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
    }
}

二,HTML –1,概述

全称是超文本标记语言
超文本:可以向网页中插入的元素类型丰富(图片,视频,音频,文字…)
标记: HTML提供了各种标记表示是不同类型的元素img video
语法: 由很多的标签组成的, 标签要一对的写要写开始标签和结束标签.

–2,入门案例

1,创建项目:新建项目–设置项目名称–选择存放路径–创建
2,创建HTML文件: 选中项目–右键–新建–HTML文件–输入文件名–创建



	
		
		这是测试文件
	
	
		你好 html~ 
你好 html~
你好 ht      ml~ 你好 html~ 你好 html~ 你好 html~ 你好 html~
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/305173.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号