cgb2108-day06

2024-08-22 06:58
文章标签 day06 cgb2108

本文主要是介绍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,获取数据库的连接(注册驱动+获取连接)/*** 获取数据库的连接* @return 数据库的连接对象Connection* @throws Exception*/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表里的数据
/* 1,创建表,并插入数据 2,利用JDBC,查询数据
CREATE TABLE tb_user(id int PRIMARY KEY auto_increment,name varchar(20) default NULL,password varchar(20) default NULL
)
insert into tb_user values(null,'jack','321')*/
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,执行SQLString 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,执行SQLResultSet 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();//释放连接器}/* 模拟用户登录
1,发起SQL:select * from tb_user where name='jack' and password='321'
2,判断result,如果有结果就登录成功,没结果就登录失败问题: SQL攻击/SQL注入,
本质上就是因为SQL语句中出现了特殊符号(#,注释掉了一些条件),导致了SQL语义改变了
解决方案:Statement低级的传输器,不安全,低效换成PreparedStatement高级,安全*/private static void method2() throws Exception {//1,注册驱动 2,获取连接Connection c = JDBCUtils.getConnection();//3,获取传输器Statement s = c.createStatement();//4,执行SQLString 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,"大山西");//执行SQLp.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);//给第一个?设置100ResultSet 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 catchprivate 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,"大山西");//执行SQLint 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);//给第一个?设置100r = 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文件–输入文件名–创建

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>这是测试文件</title></head><body>你好 html~ <br/>  你好 html~ <br/>你好 ht &nbsp;&nbsp;&nbsp;&nbsp; ml~你好 html~你好 html~你好 html~你好 html~</body>
</html>

这篇关于cgb2108-day06的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1095566

相关文章

鸿蒙开发入门day06-ArkUI简介

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,还请三连支持一波哇ヾ(@^∇^@)ノ) 目录 ArkUI简介 基本概念 两种开发范式 不同应用类型支持的开发范式 UI开发(ArkTS声明式开发范式)概述 特点 整体架构 开发布局 布局结构 布局元素的组成 布局位置 对子元素的约束 ArkUI简介 ArkUI(方舟UI框架)为应用

Python大数据之Hadoop学习——day06_hive学习02

一.hive内外表操作 1. 建表语法 create [external] table [if not exists] 表名(字段名 字段类型 ,字段名 字段类型,...) [partitioned by (分区字段名 分区字段类型)]        # 分区表固定格式 [clustered by (分桶字段名) into 桶个数 buckets]        # 分桶表固定格式 [sor

IO进程day06(进程间通信、信号、共享内存)

目录 【1】进程间通信 IPC 1》 进程间通信方式 2》 无名管道 1> 特点 2> 函数接口 3> 注意事项 练习:父子进程实现通信,父进程循环从终端输入数据,子进程循环打印数据,当输入quit结束。 3》有名管道  1> 特点 2> 函数接口 3> 注意事项  练习:通过两个进程实现 cp功能  4> 有名管道和无名管道的区别 【2】信号  1》概念  2》信

linux笔记_day06

linux笔记_day06 1.用户:表示符,凭证 2.用户组:表示符 进程也是有属主和属组的 安全上下文(secure context):     用户:UID,/etc/pawwd 组:GID ,/etc/group 影子口令:   用户:/etc/shadow     组:/etc/gshadow 用户类别:   管理员:uid=0   普通用户:1-65535     系统用

入门Java编程的知识点—>方法(day06)

重点掌握方法是什么?为什么要使用?如何进行方法的定义? 方法 方法又称为函数,在程序中方法表示功能。 方法的适用性:当程序中有一段表示是功能且重复的业务逻辑代码,可以用方法来封装,模块化编程,易于程序维护。 方法的好处:使用方法封装功能,那么该功能只需要定义一次,多次使用,实现复用,减少代码冗余。 方法语法: [访问修饰符] 返回值类型 方法名 ([参数]){方法体} 访

cgb2108-day12

文章目录 一,DOM/JSON的练习--1,测试 二,Vue的语法--1,定义函数--2,定义复杂数据并解析--3,data的三种写法 三,Vue指令--1,概述--2,测试--3,测试 一,DOM/JSON的练习 –1,测试 <!DOCTYPE html><html><head><meta charset="utf-8"><title>测试 json的练习</tit

cgb2108-day11

文章目录 一,JS练习--1,测试 二,DOM--1,概述--2,测试 三,JSON--1,概述--2,测试创建js文件,存放js代码创建html网页文件,引入js代码 四,Vue--1,概述--2,入门案例--3,总结4,改造入门案例 五,Vue的运算符--1,测试 一,JS练习 –1,测试 <!DOCTYPE html><html><head><meta chars

CGB2108笔记的链接大全

dy同名: cgblpx day18:https://blog.csdn.net/u012932876/article/details/120945595 day17:https://blog.csdn.net/u012932876/article/details/120898860 day16:https://blog.csdn.net/u012932876/article/details/1

day06-SpringBootWeb请求响应

前言 在上一次的课程中,我们开发了springbootweb的入门程序。 基于SpringBoot的方式开发一个web应用,浏览器发起请求 /hello 后 ,给浏览器返回字符串 “Hello World ~”。 其实呢,是我们在浏览器发起请求,请求了我们的后端web服务器(也就是内置的Tomcat)。而我们在开发web程序时呢,定义了一个控制器类Controller,请求会被部署在Tom

day06——前后端交互

一、计算属性 计算属性就是基于现有的数据推算出来的新属性,只要依赖的数据变化,新属性就会自动更新,而且计算属性多次调用的情况下只会计算一次,效率非常高 简化写法 const app = new Vue({el: '#app',data: {},methods: {//跟data平级函数名(){return 计算结果} }, computed:{//跟data平级计算属性名(