一、DCL(了解)

-- 1. 创建用户
CREATE USER 'zhangsan'@'%' IDENTIFIED BY 'zhangsan';
-- 2. 用户授权
GRANT ALL ON heima62.* TO 'zhangsan'@'%';
-- 3. 查看权限
SHOW GRANTS FOR 'zhangsan'@'%';
-- 4. 取消授权
REVOKE INSERT,UPDATE,DELETE ON heima62.* FROM 'zhangsan'@'%';
-- 5. 删除用户
DROP USER 'zhangsan'@'%';

-- 6. 修改用户密码的操作
SET PASSWORD FOR 'zhangsan'@'%' = PASSWORD('1234');

-- 7. 修改root自己的密码
SET PASSWORD = PASSWORD ('root');

二、JDBC

1. JDBC简介

  • JDBC:Sun公司提供的一套操作数据库规范(接口),由一堆接口和工具类组成的,实现了Java程序对不同数据库的统一操作

  • 驱动:由数据库厂商提供的、JDBC规范的实现类,所打包成的jar包。每种数据库都有自己的驱动包,我们要操作数据库,就必须引入驱动包

  • MySql的驱动包:mysql-connector-java-5.1.37-bin.jar

2. ==JDBC快速入门==

//1. 注册驱动
//2. 获取连接
//3. 创建SQL执行平台
//4. 执行SQL语句
//5. 处理结果
//6. 释放资源
  • 涉及的API简介

    JDBC所有的接口、工具类都在:java.sql.*

    • java.sql.DriverManager:JDBC的一个工具类,驱动管理

    • java.sql.Driver:JDBC规范的数据库驱动类的接口

    • java.sql.Connection:JDBC规范的连接对象接口

    • java.sql.Statement:JDBC规范的SQL执行平台对象接口

    • java.sql.ResultSet:JDBC规范的查询结果集对象接口

  • 注意:

    • 在JDBC操作过程中,忽略驱动包里提供的实现类

3. JDBC的API详解

3.1 注册驱动

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

//DriverManager.registerDriver(new com.mysql.jdbc.Driver()); 不推荐
  • DriverManager.registerDriver(new com.mysql.jdbc.Driver());有问题:

    • 注册了2次

    • 有硬编码问题

3.2 获取连接

Connection connection = DriverManager.getConnection("url","username","password");

参数说明:

  • url:数据库连接地址。写法示例:jdbc:mysql://localhost:3306/heima62。规范:

    • 协议名:固定值jdbc

    • 子协议:通常是数据库类型,MySql的是mysql

    • 具体地址:MySql的写法是://ip:port/database。如果连接本机、默认端口的MySql,可以简写成:///database

  • username:数据库登录名

  • password:数据库密码

3.3 SQL执行平台,执行SQL语句

//获取SQL执行平台
Statement statement = connection.createStatement();

//使用SQL执行平台,执行SQL语句
//执行DQL:statement.executeQuery(sql),得到ResultSet对象
ResultSet resultSet = statement.executeQuery("select * from emp");

//执行DML:statement.executeUpdate(sql),得到int表示影响的行数
int count = statement.executeUpdate("delete from account where name = 'jack'");

//执行其它任意SQL:statement.execute(sql),得到boolean结果,表示 是否执行了查询/是否有ResultSet
boolean isQuery = statement.execute("select * from account");

3.4 结果集ResultSet的处理

  • ResultSet:是查询的结果集对象,自带一个行指针,默认指向第一行之前必须要向下移动一次之后,才可以获取数据

  • 向下移动行指针:resultSet.next()。返回值:

    • true:向下移动成功,表示下一行存在

    • false:向下移动失败,表示下一行不存在

  • 获取行指针所在行的某一列:

    • resultSet.getXXX("列名称"):XXX是列的类型

    • resultSet.getXXX(列序号):XXX是列的类型,序号从1开始

//5.处理结果
while (resultSet.next()) {
   //int id = resultSet.getInt("id");
   //int id = resultSet.getInt(1);
   String id = resultSet.getString("id");

   String ename = resultSet.getString("ename");
   //int ename = resultSet.getInt("ename");
   Date joindate = resultSet.getDate("joindate");

   System.out.println("id:" + id + ", 姓名:" + ename + ", 入职时间:" + joindate);
}

3.5 释放资源

//6.释放资源: 顺序是resultSet->Statement->Connection
resultSet.close();
statement.close();
connection.close();

4. JDBC工具类的封装

5. ==JDBC的事务管理==

5.1 管理的步骤

  • 开启事务:connection.setAutoCommit(false)

  • 提交事务:connection.commit()

  • 回滚事务:connection.rollback()

try{
   //1.注册驱动
   //2.获取连接
   //=====开启事务=====
   //3.创建SQL执行平台
   //4.执行SQL语句
   //5.处理结果
   //=====关闭事务:提交事务=====
}catch (Exception e){
   //=====关闭事务:回滚事务=====
}finally{
   //6.释放资源
}

5.2 事务管理的示例

  • 需求:用户在控制台输入转账人、收款人、转账金额。我们完成转账操作,如果出现异常,要回滚事务

  • 实现:

public class DemoTransactionManager {
   public static void main(String[] args) throws SQLException {
       //获取用户输入的信息:转账人、收款人、转账金额
       Scanner scanner = new Scanner(System.in);
       System.out.println("请输入转账人:");
       String out = scanner.nextLine();
       System.out.println("请输入收款人:");
       String in = scanner.nextLine();
       System.out.println("请输入转账金额:");
       String money = scanner.nextLine();

       transfer(out, in, money);
  }

   /**
    * 银行转账的方法。带事务管理
    * @param out 转账人
    * @param in 收款人
    * @param money 转账金额
    */
   private static void transfer(String out, String in, String money) throws SQLException {
       Connection connection = null;
       Statement statement = null;
       try {
           //1.注册驱动获取连接
           connection = JdbcUtils.getConnection();
           //====开启事务=====
           connection.setAutoCommit(false);

           //2.创建SQL执行平台
           statement = connection.createStatement();
           //3.执行SQL语句
           //3.1 转账人扣钱
           String outSql = "UPDATE account SET balance = balance - "+money+" WHERE NAME = '"+out+"'";
           int outCount = statement.executeUpdate(outSql);
           System.out.println("转账人扣钱操作,影响行数:" + outCount);

           //扣钱之后,出现异常
           //int i = 1/0;

           //3.2 收款人加钱
           String inSql = "UPDATE account SET balance = balance + "+money+" WHERE NAME = '"+in+"'";
           int inCount = statement.executeUpdate(inSql);
           System.out.println("收款人加钱操作,影响行数:" + inCount);

           //4.处理结果
           System.out.println("转账成功");
           //====关闭事务:提交事务===
           connection.commit();
           System.out.println("事务提交");
      } catch (Exception e) {
           //====关闭事务:回滚事务===
           System.out.println("事务回滚");
           connection.rollback();
           e.printStackTrace();
      } finally {
           //5.释放资源
           statement.close();
           connection.close();
      }
  }
}
  1. JDBC的快速入门步骤:导入jar包之后,代码有6步

    1. 注册驱动

    2. 获取连接

    3. 创建SQL执行平台

    4. 执行SQL语句

    5. 处理结果

    6. 释放资源

  2. Statement执行SQL的几种方法:

    //执行DQL
    ResultSet resultSet = statement.executeQuery(sql);
    //执行DML,返回值int,表示影响行数
    int count = statement.executeUpdate(sql);
    //执行其它SQL,返回boolean,表示是否执行了查询/是否有结果集产生
    boolean isQuery = statement.execute(sql);
  3. 处理结果集ResultSet的方法:

    while(resultSet.next()){//一定要先next一次,才可以获取数据
       XXX value = resultSet.getXXX(int 列序号);//列序号从1开始
       XXX value = resultSet.getXXX(String 列名称);
    }
  4. JDBC的事务管理

    1. 相关的方法:都是Connection对象的方法

      1. 开启事务:setAutoCommit(false)

      2. 提交事务:commit()

      3. 回滚事务:rollback()

    2. 事务管理的步骤

      try{
         //获取连接
         //==开启事务:获取连接之后,执行SQL之前开启即可
         //创建SQL执行平台
         //执行SQL语句
         //处理结果
         //==关闭事务:提交事务,在关闭连接之前提交事务即可
      }catch(Exception e){
         //==关闭事务:回滚事务
      }finally{
         //释放资源
      }

JDBC基础原理的更多相关文章

  1. Unit01: JDBC原理 、 JDBC基础编程

    Unit01: JDBC原理 . JDBC基础编程 这个文件里面有两块内容: 1.用比较麻烦的方式连接数据库,test1(),test4() 2.创建DBTool,测试DBTool连接数据库 ,tes ...

  2. jdbc基础 (五) 连接池与数据源 DBCP以及C3P0的使用

    一.连接池的概念和使用 在实际应用开发中,特别是在WEB应用系统中,如果JSP.Servlet或EJB使用JDBC直接访问数据库中的数据,每一次数据访问请求都必须经历建立数据库连接.打开数据库.存取数 ...

  3. JDBC基础教程

    本文实例讲述了JDBC基础知识与技巧.分享给大家供大家参考.具体分析如下: 1.什么是JDBC? 通俗来讲JDBC技术就是通过java程序来发送SQL语句到数据库,数据库收到SQL语句后执行,把结果返 ...

  4. JDBC基础:JDBC快速入门,JDBC工具类,SQL注入攻击,JDBC管理事务

    JDBC基础 重难点梳理 一.JDBC快速入门 1.jdbc的概念 JDBC(Java DataBase Connectivity:java数据库连接)是一种用于执行SQL语句的Java API,可以 ...

  5. I2C 基础原理详解

    今天来学习下I2C通信~ I2C(Inter-Intergrated Circuit)指的是 IC(Intergrated Circuit)之间的(Inter) 通信方式.如上图所以有很多的周边设备都 ...

  6. jdbc基础 (四) 批处理

    批处理,就是字面上的意思,一次性处理一批sql语句. 直接看例子吧: package com.cream.ice.jdbc; import java.sql.Connection; import ja ...

  7. jdbc基础 (三) 大文本、二进制数据处理

    LOB (Large Objects)   分为:CLOB和BLOB,即大文本和大二进制数据 CLOB:用于存储大文本 BLOB:用于存储二进制数据,例如图像.声音.二进制文件 在mysql中,只有B ...

  8. jdbc基础 (二) 通过properties配置文件连接数据库

    csdn博文地址:jdbc基础 (二) 通过properties配置文件连接数据库 上一篇描述了对mysql数据库的简单操作,下面来看一下开发中应该如何灵活应用. 因为jdbc对数据库的驱动加载.连接 ...

  9. C#基础原理拾遗——引用类型的值传递和引用传递

    C#基础原理拾遗——引用类型的值传递和引用传递 以前写博客不深动,只搭个架子,像做笔记,没有自己的思考,也没什么人来看.这个毛病得改,就从这一篇开始… 最近准备面试,深感基础之重要,奈何我不是计算机科 ...

随机推荐

  1. HTML5实现中国象棋游戏

    在线演示 本地下载

  2. 关于Dubbo

    什么是Dubbo 一款分布式服务框架 高性能和透明化的RPC远程服务调用方案 SOA服务治理方案 每天为2千多个服务提供大于30亿次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点以及别的公司的业务 ...

  3. 【详解】苹果AppStore审核被拒,原因终逃不过这些!

    近日,相信很多开发者都留意到了: 苹果针对应用标题的审核确有明显的变严趋势!我们在<惊!苹果再次加强审核力度,众App纷纷止步应用标题>中也对该现象进行了详细的分析,并给出了相应的解决方案 ...

  4. Java接口 详解(二)

    上一篇Java接口 详解(一)讲到了接口的基本概念.接口的使用和接口的实际应用(标准定义).我们接着来讲. 一.接口的应用—工厂设计模式(Factory) 我们先看一个范例: package com. ...

  5. Nginx中如何限制某个IP同一时间段的访问次数

    如何设置能限制某个IP某一时间段的访问次数是一个让人头疼的问题,特别面对恶意的ddos攻击的时候.其中CC攻击(Challenge Collapsar)是DDOS(分布式拒绝服务)的一种,也是一种常见 ...

  6. HttpClient_02_实现https协议

    二.参考文档 1.Java 和 HTTP 的那些事(四) HTTPS 和 证书 1. 轻松把玩HttpClient之配置ssl,采用设置信任自签名证书实现https 2.如何使用HttpClient来 ...

  7. PS 滤镜— — 万花筒效果

    clc; clear all; close all; addpath('E:\PhotoShop Algortihm\Image Processing\PS Algorithm'); I=imread ...

  8. Linux命令汇总(二)

    1.登录用户设置 新创建了一个用户,用useradd指令,但是发现通过终端无法登陆:  echo password | passwd --stdin username  或者  passwd --st ...

  9. vijos:P1190繁忙的都市

    描述 城市C是一个非常繁忙的大都市,城市中的道路十分的拥挤,于是市长决定对其中的道路进行改造.城市C的道路是这样分布的:城市中有n个交叉路口,有些交叉路口之间有道路相连,两个交叉路口之间最多有一条道路 ...

  10. python基础知识-数字

    数字分为: 整数(int) 长整型(long) 浮点型(float) 一,整数 整数(int):即不带小数点的数字,如 12 ,45 ,0 ,3 #!/usr/bin/env python class ...