MySQL 的 JDBC 编程

MySQL的JDBC编程

使用 java代码操作 数据库

jdbc统一了各种数据库的 api

准备阶段

首先要准备

  1. 编辑语言的安装:java jdk1.8
  2. 数据库
  3. 数据库驱动包 :
    • 中央仓库下载
    • 搜索MySQL 第一个就是 MySQL Connector/j
  4. 下载完成后 在 IDEA 中导入 这个包
    • 打开 IDEA 新建一个 java项目
    • 新建一个目录
    • 然后 将下载好的 复制进去
    • 右键目录 添加到库(add as library)

开始 JDBC 编程

  1. 先 建立 数据源 找到数据库的位置

    DataSource dataSource = new MysqlDataSource();
    

    dataSource 就是 一个数据源 然后利用他的方法 去找到 数据库的位置

    ((MysqlDataSource) dataSource).setUrl()
    

    setUrl() 设置他的 Url

    Url 可以理解成一个网址 他包含了网站信息 Ip地址 端口 以及一些元素 内部设定

    具体看一下这里的Url

    ("jdbc:mysql://127.0.0.1:3306/java109?characterEncoding=utf8&useSSL=false")
    

    127.0.0.1 是 数据库所存在的 Ip 地址

    3306 是 数据库所在端口

    这里可以理解成 IP 是你的家庭地址 端口是你的电话号码

    方便锁定数据库

    java109 是 数据库的名字

    ? 指的是 后面开始 是 这个数据库的一些内部元素

    characterEncoding=utf8 指定字符集为 utf8

    useSSL=false 服务器证书 如果选择了 true 就会验证你的证书 不建议在 没有服务器身份验证的情况下建立 SSL 链接

    设置用户名以及数据库密码

    ((MysqlDaraSource) dataSource).setUser("root");//管理员
    ((MysqlDaraSource) dataSource).setPassword("111111");//密码
    
  2. 建立数据库的连接 再找到数据库后进行对数据库的链接 注意这里会抛出异常

    Connection connection = dataSource.getConnection();
    
  3. 构造 sql 就像 在 MySql 自带的服务端中 构造sql 一样 不过要增加点方法:

    String sql = "insert into student values(1,'张三')";
    PreparedStatement statement = connection.prepareStatement(sql);
    

​ prepareStatement:意思是 准备陈述

​ 在这里 指的是 预准备 预处理

也可以把字符串格式的 sql 直接发送给 mysql 服务器 ,但是这样说做 写的 字符串sql 有可能是 语法错误之类

mysql 服务器需要对 sql 进行解析 和效验

mysql 服务器是服务于 多个客户的 这样开销就很大

预处理:

先解析检查 sql 看 sql 有没有什么问题

解析完毕后会得到接哦古话数据,直接把解析好的结构化数据发给数据库服务器,服务器就省下了这步工作

  1. 把 sql 发送给服务器

    int i = preparedStatement.executeUpdate();
    

    这里的 i 显示的是 处理了 多少行数据

    executeUpdate() : 是针对 写数据 比如 :增 改 删

    executeQue() : 是针对 读数据 比如 :查

  2. 执行完毕 关闭链接 释放资源 后建立的先释放

    preparedStatement.close();
    connection.close();
    

案例

这里 写一个 录入学生的一个案例

public class Demo01{
    public static void main(String[] args) throws SQLException{
       	Scanner scanner = new Scanner(System.in);
        System.out.println("请输入你的姓名");
        String name = scanner.nextLine();
        System.out.println("请输入你的学号");
        int id = scanner.nextInt();
       
        //1.建立数据源
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java109?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("111111");
        
        //2.创建连接
        Connection connection = dataSource.getConnection();
        
        //3.构造 sql
        String sql = "insert into student values(?,?)";
        PreparedStatement statement = connection.preparedStatement(sql);
        statement.setInt(1,id);
        statement.setString(2,name);
        
        //4.把 sql 发送给服务器
        statement.executeUpdate();
        
        //5.执行完毕
        statement.close();
        connection.close();
    }
}

这是一个 写操作的 sql

下面写一个 查的 sql

public class Demo01{
    public static void main(String[] args) throws SQLException{
        //1.先建立数据源
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDatalSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java109?characterEncoding=utf8&useSSL=false");
        ((MysqlDatalSource) dataSource).setUser("root");
        ((MysqlDatalSource) dataSource).setPassword("111111");
        //2.连接到数据库
        Connection connection = dataSource.getConnection();
        //3.构造 sql
        String sql = "select * from student";
        PreparedStatement statement = connection.preparedStatement(sql);
        //4.把 sql 发送给服务器
        ResultSet resultSet = statement.executeQuery();
        //5.遍历结果集 取出结果 
        while(resultSet.next()){
            int id = resultSet.getInt("id");
            String name = result.getString("name");
            System.out.println("id="+id+"name="+name);
        }
        //6.释放内存
        resultSet.close();
        statement.close();
        connection.close();
    }
}

对比写

查操作多了一步 遍历

resultSet 是一个 结果集 用于 存放查到的数据库

遍历这个 结果集 得到结果

posted @   Gargenone  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示