day024

/*1.注册驱动

  • 2.获取连接
  • 3.获取传输器
  • 4.传输器执行SQL,返回结果
  • 5.处理结果
  • 6.释放资源*/

继承–强耦合–缺了父类子类连方法都没有
接口–松耦合

高内聚–写一次处处调用,提高代码复用性

Statement和PrepareStatement的区别

其实这俩干的活儿都一样,就是创建了一个对象然后去通过对象调用executeQuery方法来执行sql语句。

PrepareStatement跟Statement的主要区别就是把上面sql语句中的变量抽出来了。
这就是PrepareStatement第一大优点----可以提高代码的可读性。

结果集(ResultSet)是数据中查询结果返回的一种对象,可以说结果集是一个存储查询结果的对象

############################################

/**因为前两步太常见,不适合次次写
 这里封装一个方法(高内聚,一次封装次次调用,提高代码复用性)
 用来  注册驱动  和 获取DB连接*/
public static Connection getConneection() throws Exception{
    Class.forName("com.mysql.jdbc.Driver");//注册驱动
    String url = "jdbc:mysql://localhost:3306/tedu2107";//DB连接
    Connection c = DriverManager.getConnection(url, "root", "root");
    return c;//返回给调用者一个DB连接信息
}//static-->节约内存,每次都可以直接调用














//封装了方法,用来 关闭资源
public static void close(Connection c,ResultSet r,PreparedStatement s){
    if(r!=null) {//为了防止空指针异常
        try {
            r.close();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }
    if(s!=null) {//为了防止空指针异常
        try {
            s.close();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }
    if(c!=null) {//为了防止空指针异常
        try {
            c.close();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }
}















/*鼠标移到方法上,可以查看方法的文档注释*/
private static void method() throws Exception {

    ResultSet r = null;
    PreparedStatement s = null;
    Connection c = null;

    try {
        //模拟登录
        c = getConneection();

        //传输器执行sql
        String a = new Scanner(System.in).next();
        String b = new Scanner(System.in).next();

        String sql = "select * from user where name = ? and password= ?";
        /*这里的sql命令语句称为:SQL骨架,?叫占位符
         * 此处称为用户占位符发起一个sql骨架*/

        //获取全新传输器
        s = c.prepareStatement(sql);//这里已经获取SQL骨架,后面不需再重复获取

        //给SQL设置参数,(给第N个参数设置什么值)
        s.setString(1, a);
        s.setString(2, b);

    /*防范sql注入的解决方案
      单独把骨架和输入分开,使#之类的特殊符号不再有特殊含义,视作普通字符处理
      安全,简单高效
    */

         r = s.executeQuery();//获取结果集

        //处理结果(判断是否查到了,有直接登录,否则失败)
        if (r.next()) {
            System.out.println("恭喜您,登录成功");
        } else {
            System.out.println("登录失败");
        }

    }catch (Exception e) {

        e.printStackTrace();

    }finally{
       //释放资源
       close(c,r,s);
    }
}

/*总结:

  1. SQL攻击:出现了特殊的符号#,改变了SQL语义,本质上是因为用Statement
  2. 解决方案:利用全新的传输器PreparedStatement
    ,本质上 把SQL骨架和SQL的参数分开执行的,遇到了#只是当做一个普通的文本而不是注释符号了
  3. 优点: 省去了拼接SQL语句的麻烦, 防止了SQL攻击, 高效*/

############################################

中文乱码
url增加参数:characterEncoding=utf8防止中文乱码

String url =“jdbc:mysql://localhost:3306/mydb?characterEncoding=utf8&serverTimezone=Asia/Shanghai”;

SQL注入
String condition = “陈强”;
String condition = “陈强’ or 1=1 or '”;
String condition = “陈强’ or true or '”;

String sql = “select * from teachers where tname=’” + condition+"’";

利用sql中’单撇是字符串的结束符,or只要一个条件成立其它就不用再判断,而恶意造成sql查询失效,本应该只展示一条数据,结果全部展现。

注入后形成的SQL:

SELECT * FROM teachers WHERE tname=‘陈强’ OR 1=1 OR ‘’

############################################

DB_JDBC结束

############################################

										<html前端>

<!doctype html>声明这是一个网友文档

										<Git版本控制>

开发难题
在实际开发中我们会遇到一些问题,电脑蓝屏,代码丢了,懊悔不?磁盘坏了,文件没了,懊悔不?时间长了,文件找不到了,懊悔不?
手欠,之前代码运行好好的,非要去优化下,结果还不如以前,信心满满,之前代码没保存,懊悔不?怎么解决呢?版本控制就可以解决这些难题了。

版本控制(Version Control System),它功能强大,不仅能备份你的文件,还可以实现很多:

记录文件的所有历史变化
错误恢复到某个历史版本
多人协作开发编辑同一个文件
实现功能差异版本(分支),如:mysql、mariadb、percona三个分支

注意:Git支持高并发,以及一些分布式.

主流的版本控制产品:CVS,SVN,Git

组成结构:
工作空间:用来保存项目的元数据和对象数据库的地方。 这是 Git 中最重要
的部分,从其它计算机克隆仓库时,拷贝的就是这里的数据。

本地索引:保存了下次将提交的文件列表信息,一般在 Git 仓库目录中。
有时候也被称作"索引",不过一般说法还是叫暂存区域。

本地仓库,之所以说git 快,大部分提交都是对本地仓库而言的,不依赖网络,最后一次会推送的到远程仓库。

远程仓库:可以看做是github,它是一个远程仓库,它提供web服务供大家方便下载、查看、提交、存储。

简易的命令行入门教程:
Git 全局设置:

git config --global user.name “ZIBAOCIGUAI”
git config --global user.email “2986335665@qq.com”

创建 git 仓库:

mkdir online_-git_-local_-cgb
cd online_-git_-local_-cgb
git init
touch README.md
git add README.md
git commit -m “first commit”
git remote add origin https://gitee.com/zibaociguai/online_-git_-local_-cgb.git
git push -u origin master

已有仓库?

cd existing_git_repo
git remote add origin https://gitee.com/zibaociguai/online_-git_-local_-cgb.git
git push -u origin master

点击文件管理器地址栏,进入地址选中状态,输入cmd+回车–>直接在此处进入指定位置的命令行界面

cmd窗口点击右键可以直接粘贴

D:\GIT_LOCAL_CGB\cgb2107>git init 初始化文件夹为GIT本地仓库(标志为文件夹中出现.git隐藏文件)

D:\GIT_LOCAL_CGB\cgb2107>git add . 提交文件至本地索引

git config --global user.name “cgblpx” #配置在gitee上注册的账号
git config --global user.email “2250432165@qq.com” #配置在gitee上注册的邮箱
git config --list #检查配置信息
git init #初始化了git(产生了一个隐藏文件.git)
git add . # 提交本地仓库的所有资源
git commit -m “first commit” #把本地索引的文件提交到本地仓库
git remote add origin https://gitee.com/cgblpx/cgb2107.git #建立本地仓库和远程仓库的关系
git push -u origin master #把本地仓库的资源 提交给Git服务器
#第一次上传文件,需要输入用户名和密码的…

↓↓↓↓↓创建本地仓库及提交文件↓↓↓↓↓

Microsoft Windows [版本 10.0.19042.508]
© 2020 Microsoft Corporation. 保留所有权利。

D:\GIT_LOCAL_CGB>git config --global user.name “ZIBAOCIGUAI”

D:\GIT_LOCAL_CGB>git config --global user.email “2986335665@qq.com”

D:\GIT_LOCAL_CGB>git config --list
diff.astextplain.textconv=astextplain
filter.lfs.clean=git-lfs clean – %f
filter.lfs.smudge=git-lfs smudge – %f
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
http.sslbackend=openssl
http.sslcainfo=E:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt
core.autocrlf=true
core.fscache=true
core.symlinks=false
pull.rebase=false
credential.helper=manager-core
credential.https://dev.azure.com.usehttppath=true
user.name=ZIBAOCIGUAI
user.email=2986335665@qq.com

D:\GIT_LOCAL_CGB>mkdir cgb2107

D:\GIT_LOCAL_CGB>cd cgb2107

D:\GIT_LOCAL_CGB\cgb2107>git init
Initialized empty Git repository in D:/GIT_LOCAL_CGB/cgb2107/.git/

D:\GIT_LOCAL_CGB\cgb2107>git add .

D:\GIT_LOCAL_CGB\cgb2107>git commit -m “first commit”
[master (root-commit) df174a9] first commit
1 file changed, 1 insertion(+)
create mode 100644 1.txt

D:\GIT_LOCAL_CGB\cgb2107>
D:\GIT_LOCAL_CGB\cgb2107>
D:\GIT_LOCAL_CGB\cgb2107>
D:\GIT_LOCAL_CGB\cgb2107>git remote add origin https://gitee.com/zibaociguai/online_-git_-local_-cgb.git

D:\GIT_LOCAL_CGB\cgb2107>git push -u origin master
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 215 bytes | 215.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.1]
To https://gitee.com/zibaociguai/online_-git_-local_-cgb.git

  • [new branch] master -> master
    Branch ‘master’ set up to track remote branch ‘master’ from ‘origin’.

D:\GIT_LOCAL_CGB\cgb2107>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>