IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 关于java的jdbc的一概小细节, -> 正文阅读

[大数据]关于java的jdbc的一概小细节,

首先声明,java新手,最近新学的jdbc,感觉细节众多,琐碎每次忘记都需要去查,就自己写篇写点东西用来记录一下,方便自己查阅,小小新手,如有错误敢情看官不吝斧正。

1.1jdbc简介

JDBCJava DateBase connectivityJava数据库简介技术

具体说就是通过Java连接数据库,并对数据库中数据进行增删改查等操作的技术

1.2jdbc相关的API

JDBC要通过Java代码操作数据库,JDBC中定义了各种操作数据库的接口和类。Driver 驱动接口,定义了Java如何和数据库获取连接

DriverManager 工具类 提供了管理驱动的便捷能力,可以获取和数据库的连接

Connection 连接接口 代表了Java和数据库之间的联系

PrepareStatement (statement)发送SQL语句的工具接口 该类型的对象用于向数据库发送一条SQL语句

ResultSet 结果集接口 该类型的对象表示一条查询SQL的结果

1.3 jdbc 是规范不是实现

从根本上来说,JDBC是一种规范,它提供了一整套完整的接口,允许便携式访问底层数据库,因此可以轻松的用

为什么JDBC只有接口,没有提供实现?

不同数据库底层技术不同,不少数据库是闭源的,源代码不公开的,Sun公司无力为所有数据库提供具体实现,只 ?能提供接口而由数据库厂商提供具体实现,Sun公司只是制定了JDBC标准,各个数据库厂商根据标准提供具体实???? 现。


JDBC编写适用于各种数据库的程序

2.0 jdbc的编程

2.1 jdbc的编程步骤

??????? 首先jdbc操作数据库和Navicat操作数剧效果基本一致,操作数据库的步骤也是大同小异,将两者做下对比。

具体步骤:

1.加载驱动

2.获取连接

3.准备一个发送sql的工具

4.发送SQL

5.处理结果集

6.释放资源

准备工作

  1. 准备开发工作(搭建开发环境)

需要在项目中引入数据库驱动jar包(jar包:针对class文件的压缩格式包含了多个带包的class文件,类似于普 通吗文件打包完之后的ziprar

idea

将mysql-connector-java-8.0.23.jar添加到项目中

1.右键选中项目,新建一个lib文件夹,将jar包复制到lib中 2.选中jar包,add as

类似于

编码:

public class JDBCTest01 {
public static void main(String[] args) throws Exception {

//1.加载驱动Class.forName("com.mysql.cj.jdbc.Driver");
//2.获取连接
String username="root"; String password="root";
//url参数用来确定连接的数据库信息
/*
*	数据库机器IP
*	端口号:port
*	数据库名db_name
*	连接的参数 编解码集,时区
*	url格式:jdbc:mysql://ip:port//db_name?k=v参数...
* */
String url="jdbc:mysql://localhost:3306/baizhi? userUnicode=true&characterEncoding=UTF-8&userSSL=false&serverTimezone=Asia/Shanghai";

Connection conn = DriverManager.getConnection(url, username, password);
//3.准备发送SQL的工具
String sql="INSERT INTO t_person VALUES(null,'王五',19,'男','199999999','大学城')";
PreparedStatement pstm = conn.prepareStatement(sql);

//4.发送执行SQL
//有一个返回值update 是告知我们表中数据有多少行发生了变化
int update = pstm.executeUpdate(); System.out.println("被影响的条数"+update);
//5.处理结果集(如果有)

//6.释放资源
//后使用的资源先释放
pstm.close();
conn.close();
}
}

类似的相应的增删改查都可以仿照改写,只是注意执行增删改语句和查询语句的方法不一样

增删改:使用的是发送SQL工具的executeUpdate()

?????????????? 获得的是一个int的返回值

查询:使用的是发送SQL工具的executeQuery()

??????????????? 获得的是

结果集处理:

?

注意:两种结果集数据处理方式,使用序列号获取和使用列名获取,我们推荐使用列名获取。

案例演示:

public class JDBCTest03 {
public static void main(String[] args) throws Exception {

//1.加载驱动Class.forName("com.mysql.cj.jdbc.Driver");
//2.创建和数据库之间的连接
String username="root"; String password="root";
String url="jdbc:mysql://localhost:3306/baizhi?userUnicode=true&characterEncoding=UTF- 8&userSSL=false&serverTimezone=Asia/Shanghai";
Connection conn = DriverManager.getConnection(url, username, password);

//3.准备一个发送SQL的工具
String sql="select * from t_person"; PreparedStatement pstm = conn.prepareStatement(sql);

//4.发送并执行SQL
ResultSet rs = pstm.executeQuery();
//5.处理结果集
/*
* getXxx("列名"):获取到指定列的值 Xxx为数据类型
* getXxx(序列号):获取到指定顺序的列的值
*
* */
while (rs.next()){
int personId = rs.getInt("person_id");
String personName = rs.getString("person_name"); int age = rs.getInt("age");
String sex = rs.getString(4); String mobile = rs.getString(5);
String address = rs.getString(6);

System.out.println("personId="+personId+",personName="+personName+",age="+age+",sex="+sex+",mob
ile="+mobile+",address="+address);
}
//6.释放资源rs.close();
pstm.close();
conn.close();
}
}

关于这里的一些小的细节,可以参照

https://blog.csdn.net/weixin_45802913/article/details/120694804

3.数据绑定

数据绑定:将用户输入的数据,绑定到SQL语句当中

JDBC 执行的SQL中的数据要根据用户的输入发生变化,比如 登录功能背后的查询SQL要根据用户名不同,执行不同的条件,这个就需要将用户输入的数据绑定到SQL语句中。

绑定数据的方式有2种:

??????? 字符串拼接、 占位符绑定

3.1字符串拼接

本质上就是通过Java字符串拼接的语法构造出正确的SQL语句

  1. 在需要数据的地方,使用变量名进行替换
  2. 在变量名前添加"+ 在变量名后添加+"
  3. 如果拼接的是字符串的话,那么需要在"+之前添加' +"之后添加'

代码实例:

static int loginSys(Connection conn) throws SQLException {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入用户名:");
        String adminName = scanner.nextLine();
        System.out.print("请输入密码:");
        String password = scanner.nextLine();
        String sql = "select admin_name, password from admin where admin_name = '"+adminName+"'and password = '"+password+"'";
        PreparedStatement pstm = conn.prepareStatement(sql);

        ResultSet rs = pstm.executeQuery();
        int flag = 0;
        while (rs.next()){
            flag = 1;
            String AdminName = rs.getString("admin_name");
            String PassWord = rs.getString("password");

            System.out.println("用户名:" + AdminName + "密码:" + PassWord);
        }
        System.out.println(rs.next());
        if (flag == 1){
            return 1;
        }
        else{ return 0;}
    }

3.2占位符拼接

?占位符是JDBC 中一种特殊语法,专门用于参数绑定使用步骤:

  1. 在需要数据的地方,使用?代替(占位)
  2. 在发送SQL之前,通过pstmsetXxx方法给?赋值

?代码示例:

public Student findStudent(String name) {

        Student stu = new Student();
        Connection conn = null;
        PreparedStatement pstm = null;
        ResultSet rs = null;

        conn = JDBCUtils.getConnection();
        String sql = "select student_id, student_name, sex, class_id from t_student where student_name = ?";
        try {
            pstm = conn.prepareStatement(sql);
            pstm.setString(1,name);
            rs = pstm.executeQuery();
            if ( rs != null){
                while (rs.next()){
                    stu.setStudentId(rs.getString("student_id"));
                    stu.setStudentName(rs.getString("student_name"));
                    stu.setSex(rs.getString("sex"));
                    stu.setClassId("class_id");
                    stu.toString();
                }
            }else{
                stu = null;
            }

        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        finally {
            if (null != conn || pstm != null || rs != null){
                JDBCUtils.free(rs,null,conn,pstm);
            }
        }
        return stu;

    }

?3.3字符串拼接和?占位符拼接的 区别

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-10-11 17:35:16  更:2021-10-11 17:35:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 1:26:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码