当前位置: 首页 > news >正文

Java-JDBC入门程序、预编译SQL

一. JDBC

        JDBC:Java DataBase Connectivity 就是使用Java语言操作关系型数据库的一套API 

        本质:sun公司官方定义一套操作所有关系型数据库的规范,即接口;各个数据库厂商去实现这套接口,提供数据库驱动jar包。我们可以使用这套接口(JDBC)编程,真正执行代码的是驱动jar包中的实现类。

二.JDBC入门程序

        DML语句

        1. 创建一个Maven项目,引入依赖;并准备数据库表(emp)

//pom.xml引入依赖
<dependencies>
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <version>8.0.33</version>
        </dependency>

        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>5.9.3</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.30</version>
        </dependency>
</dependencies>

        2.代码实现:编写jdbc程序,操作数据库



import org.junit.jupiter.api.Test;

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

public class JdbcTest {
    /*
    * JDBD入门程序
    * */
    @Test
    public void testUpdate() throws Exception {
        //1.注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");

        //2.获取连接
        String url = "jdbc:mysql://localhost:3306/db01";//数据库地址
        String username = "root";//用户名
        String password = "root";//密码
        Connection conn = DriverManager.getConnection(url,username,password);

        //3.获取执行sql的对象
        Statement stmt = conn.createStatement();

        //4.执行sql
        String sql = "update emp set phone = '15935748521' where username = 'taitan'";
        int count = stmt.executeUpdate(sql);//返回受影响的行数
        if (count > 0) {
            System.out.println("修改成功");
        } else {
            System.out.println("修改失败");
        }

        //5.释放资源
        stmt.close();
    }

}

        DQL语句

                ResultSet(结果集对象) :ResultSet rs = statement.executeQuery()

                        (1) next():将光标从当前位置向前移动一行,并判断当前行是否有效行,返回值为boolean;

                                true:有效行。当前行有数据;

                                false:无效行,当前行没有数据

                        (2) getXxx(...):获取数据,可以根据列的编号获取,也可以根据列名获取(推荐)

package com.wyyzs;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

@Data //getter setter toString
@AllArgsConstructor //全参构造
@NoArgsConstructor //无参构造
public class Emp {
    Integer id;
    String username;
    String password;
    String name;
    Integer gender;
    char phone;
    Integer job;
    Integer salary;
    Date entry_date;
    String image;
    Date create_time;
    Date update_time;

}
@Test
    public void testSelete() throws Exception {
        //1.注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");

        //2.获取连接
        String url = "jdbc:mysql://localhost:3306/db01";//数据库地址
        String username = "root";//用户名
        String password = "root";//密码
        Connection conn = DriverManager.getConnection(url,username,password);
        
        //3执行sql  ? 占位符
        String sql = "select id, username, password, name, gender, phone, job, salary, entry_date, image, create_time, update_time from emp where username = ?";
        PreparedStatement stmt = conn.prepareStatement(sql); //预编译sql,减少sql执行
        stmt.setString(1,"taitan");

        //ResultSet 结果集对象
        ResultSet rs = stmt.executeQuery(); //执行sql

        while (rs.next()) {
            Emp emp = new Emp(rs.getInt("id"),
                    rs.getString("username"),
                    rs.getString("password"),
                    rs.getString("name"),
                    rs.getInt("gender"),
                    rs.getString("phone").charAt(0),
                    rs.getInt("job"),
                    rs.getInt("salary"),
                    rs.getDate("entry_date"),
                    rs.getString("image"),
                    rs.getDate("create_time"),
                   rs.getDate("update_time"));
            System.out.println(emp);
        }

        rs.close(); //释放资源
        conn.close(); //释放资源
        stmt.close();//释放资源


    }

三. 预编译SQL

        1. 静态SQL(参数硬编码):直接将参数写到SQL语句中,直接使用Statement对象执行

String sql = "select id, username, password, name, gender, phone, job, salary, entry_date, image, create_time, update_time from emp where username = 'taitan'";

        2. 预编译SQL(参数动态传递):使用?(占位符),需要获取PreparedStatement对象为预编译SQL中的占位符赋值

        String sql = "select id, username, password, name, gender, phone, job, salary, entry_date, image, create_time, update_time from emp where username = ?";

        3. 预编译SQL优势:

                (1)  可以防止SQL注入,更安全;(SQL注入:通过控制输入来修改事先定义好的SQL语句,以达到执行代码对服务器进行攻击的方法。)

                (2) 性能更高

相关文章:

  • 动手学习:路径规划原理及常用算法
  • HTTP协议原理深度解析:从基础到实践
  • FreeRTOS动态任务创建
  • 线代[13]|线性代数题37道以及数学分析题3道(多图预警)
  • 【无标题】spark编程
  • HTTP:二.URI及相关术语
  • Linux 调试代码工具:gdb
  • 九屏图分析法以手机为例
  • OPEX baota 2024.02.26
  • NSGA-II 多目标优化 —— 理论、案例与交互式 GUI 实现
  • OpenCV 图像旋转
  • 笔记:头文件与静态库的使用及组织方式
  • 机器学习 从入门到精通 day_03
  • Android Studio Logcat V2 使用指南(适配 2024 年版本)
  • LangChain4j(2):Chat、流式与文生图模型功能
  • xHCI 上 USB 读写分析
  • Vue3 + TypeScript 的 Hooks 实用示例
  • SpringCloud Alibaba 之分布式全局事务 Seata 原理分析
  • GSO-YOLO:基于全局稳定性优化的建筑工地目标检测算法解析
  • 闭包的理解
  • 阿里云服务器ip做网站/网络营销的发展前景
  • 建设网站基本步骤/关键词一般是指什么
  • 网页设计与制作心得体会1000/优化网络的软件下载
  • 如何跟客户销售做网站/如何自己做一个网页
  • 建设银行信用卡去网站/免费推广网站排名
  • Wordpress热门评论插件/陕西seo关键词优化外包