首页 > 编程语言 >JavaSE基础知识分享(十一)

JavaSE基础知识分享(十一)

时间:2024-08-20 19:04:49浏览次数:9  
标签:分享 Java 对象 数据库 基础知识 MySQL new JavaSE 序列化

写在前面

今天继续讲Java连接MySQL数据库和Java中的对象流(序列化与反序列化)的知识!

Java 与 MySQL 连接

要使用 Java 操作 MySQL 数据库,我们需要通过 JDBC(Java Database Connectivity)进行连接。JDK 本身不提供对具体数据库的操作能力,因此需要使用数据库提供的驱动包来实现。

JDBC 编程 6 步

  1. 注册驱动
    告诉 Java 程序即将连接的数据库类型。

    Class.forName("com.mysql.cj.jdbc.Driver");
    
  2. 获取连接
    打开 JVM 进程和数据库进程之间的通道。

    Connection conn = DriverManager.getConnection(
        "jdbc:mysql://主机的IP地址:3306/数据库名?useUnicode=true&characterEncoding=utf-8&useSSL=false",
        "root", "123456");
    
  3. 获取数据库操作对象
    创建用于执行 SQL 语句的对象。

    Statement state = conn.createStatement();
    

    注意:进行查询操作时,推荐使用 PreparedStatement,以防止 SQL 注入。

    PreparedStatement ps = conn.prepareStatement(
        "UPDATE user SET password=? WHERE username=?");
    
  4. 执行 SQL 语句

    • executeQuery: 用于查询(DQL)。
    • executeUpdate: 用于增删改(DML)。
    // 执行查询
    ResultSet resultSet = state.executeQuery("SELECT * FROM tableName");
    
    // 执行更新
    int rowsAffected = state.executeUpdate("UPDATE tableName SET column=value WHERE condition");
    
  5. 处理查询结果集

    • 仅在执行查询语句(SELECT)时需要处理。
    while (resultSet.next()) {
        // 获取每列的值
        int eno = resultSet.getInt("eno");
    }
    
  6. 释放资源
    使用完资源后关闭连接。

    state.close();
    conn.close();
    

MySQL Connector/J 版本对比

  • MySQL Connector/J 5.1

    • 支持 Java 5 及以上版本。
    • 支持 MySQL 5.6、5.7 和 8.0。
    • 支持 JDBC 3.0、4.0、4.1 和 4.2。
    • Driver 实现类:com.mysql.jdbc.Driver.
  • MySQL Connector/J 8.0

    • 支持 Java 8 及以上版本。
    • 支持 MySQL 5.6、5.7 和 8.0。
    • 支持 JDBC 4.2。
    • Driver 实现类:com.mysql.cj.jdbc.Driver.

对象流

序列化与反序列化

序列化流

  • 序列化:将对象转换为可以通过网络传输的字节流。

    • 对象输出流:ObjectOutputStream
  • 反序列化:将字节流还原为对象。

    • 对象输入流:ObjectInputStream

示例代码

读取对象

ObjectInputStream ois = new ObjectInputStream(new FileInputStream("和输出文件路径一样的路径,编码不一样也会出现不能反序列化"));
Object o = ois.readObject(); // 例如 new Student("魏一民", 18);
Student student = (Student) o;
System.out.println(student);

写入对象

ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("输入文件路径"));
Student s1 = new Student("魏一民", 18, "安徽合肥", "110");
oos.writeObject(s1);
oos.flush(); // 确保数据写入文件

序列化操作问题

  • 为什么要实现序列化?

    • 持久化:将对象状态保存到磁盘或数据库中,以便后续恢复。
    • 通信:在网络中将对象通过字节流发送到远程计算机。
    • 深度复制:通过序列化和反序列化实现对象的深度复制。
  • 如何实现序列化?

    • 类必须实现 java.io.Serializable 接口。这个接口是一个标记接口,没有方法需要实现。
    import java.io.Serializable;
    
    public class MyClass implements Serializable {
        private static final long serialVersionUID = 1L; // 推荐使用
    
        private String name;
        private int age;
    
        // Getter 和 Setter 方法
    }
    
    • serialVersionUID:用于版本控制,确保序列化和反序列化时的类版本一致。
  • 使用 transient 关键字声明不需要序列化的成员变量

    import java.io.Serializable;
    
    public class MyClass implements Serializable {
        private static final long serialVersionUID = 1L;
    
        private String name;
        private transient int age; // 不会被序列化
    
        // Getter 和 Setter 方法
    }
    
  • 序列化数据后,再次修改类文件,如何解决问题?

    • 版本控制:使用 serialVersionUID 来控制版本匹配,确保序列化和反序列化的类版本一致。
    • 自定义 readObjectwriteObject 方法:处理类的版本变化。
    • transient 关键字:标记不需要序列化的字段,避免因字段缺失导致问题。

标签:分享,Java,对象,数据库,基础知识,MySQL,new,JavaSE,序列化
From: https://www.cnblogs.com/cjybigdatablog/p/18370074

相关文章

  • 2024年“研究生科研素养提升”考试答案分享
    1、下列哪个数据库文献不包含在知网研学平台里面()。 A、期刊文献✓ B、标准 C、硕博文献 D、年鉴文献您的答案: B 参考答案: B 收藏答案解析:知网研学平台数据库文献主要包括期刊、硕博、年签、报纸、会议。2、下列选项中,不属于全文数据库的是() A、Springerlin......
  • uni-app vue3 实现微信朋友圈和朋友分享功能
     1.新建share.jsexportdefault{data(){return{}},//1.配置发送给朋友onShareAppMessage(){return{title:'分享的标题',//分享的标题path:'pages/index',//点击分享链接之后进入的页面路径imageUrl:''//分享发......
  • 一汽集团数据专家分享:实时数据技术在汽车行业的应用与实践经验
    【导读】在当今快速变化的商业环境中,数据的实时性和准确性是企业制胜的关键。然而,数据孤岛、数据分散、处理时效差等难题却成为制约企业发展的瓶颈。本文将围绕实时数据技术在汽车行业的应用与实践经验分享展开。本次分享主要涵盖三个方面展开。第一,关于数据技术的起源以及其与......
  • 【开源分享】2024好用的PHP在线客服系统源码 带搭建教程
    安装教程1.上传源码压缩包到网站目录并解压2.设置网站运行目录public3.设置伪静态,选择thinkphp4.创建数据库,导入数据库:public/service.sql5.修改.env里的数据库配置信息6.启动命令(根目录终端) phpthinkworker:gateway-d更详细的搭建文档需下载压缩包,安装教程.docx......
  • 【开源分享】2024好用的PHP工单管理系统 带搭建教程
    在日益复杂的企业运营环境中,工单管理成为企业提升运维效率、优化服务质量的关键环节。工单管理系统源码以其高效、稳定、灵活的特点,为企业提供了强大的工单管理解决方案。未来,我们将继续优化系统功能,提升用户体验,为企业创造更大的价值。同时,我们也期待更多企业加入我们的行列,共......
  • TA实践分享:材质与渲染——植物与风(Unity+UE)
    【USparkle专栏】如果你深怀绝技,爱“搞点研究”,乐于分享也博采众长,我们期待你的加入,让智慧的火花碰撞交织,让知识的传递生生不息!一、美术分析下面是风格化和写实两种风格的草地效果,看上去是两种不搭边的美术表现形式,但拆解其背后的美术特征和实现原理二者在我们的眼中应该是一......
  • 文心快码 Baidu Comate 前端工程师观点分享:以文心快码 Baidu Comate为例,智能代码助手
    本系列视频来自百度工程效能部的前端研发经理杨经纬,她在由开源中国主办的“AI编程革新研发效能”OSC源创会·杭州站·105期线下沙龙活动上,从一款文心快码(BaiduComate)前端工程师的角度,分享了关于智能研发工具本身的研发历程和理念。以下视频是关于【智能代码助手需要什么】的......
  • 【C语言】基础知识详解(二) 字符串
    一、什么是字符串?在C语言中,字符串是一种特殊的字符数组,用于存储一系列字符。字符串的表示:在C语言中,字符串是由字符组成的数组,并以空字符'\0'结束。空字符用于标识字符串的结束。例如,字符串"hello"在内存中实际上是{'h','e','l','l','o','\0'}。字符串声明:可以使......
  • 《安富莱嵌入式周报》第341期:Stack Overflow调查报告分享开发者年薪情况,开源USB高速分
    周报汇总地址:http://www.armbbs.cn/forum.php?mod=forumdisplay&fid=12&filter=typeid&typeid=104视频版:https://www.bilibili.com/video/BV1Gw4m1k7jw目录:1、开源多功能USB2.0高速分析仪2、开源100W微型无刷伺服电机控制器3、MicroChip新款DSC系单片机集成40Msps12bitAD......
  • 数据结构day01(数据结构、算法基础知识)
    目录【1】数据结构基础知识1》什么是数据结构2》数据 3》逻辑结构1>线性关系2>层次关系3>网状关系4》存储结构  1>顺序存储 2>链式存储3>索引存储结构 4>散列存储 5》操作【2】算法基础知识1>什么是算法 2>算法设计 3>算法的特性 4>评价算法的......