12.23 NoSQL和关系数据库的操作比较

news/2025/1/2 22:56:41/文章来源:https://www.cnblogs.com/yindantong/p/18642865

1.实验目的

1)理解四种数据库(MySQL、HBase、Redis和MongoDB)的概念以及不同点

2)熟练使用四种数据库操作常用的Shell命令;

3)熟悉四种数据库操作常用的Java API

2.实验平台

1操作系统:Linux(建议Ubuntu16.04Ubuntu18.04);

2Hadoop版本:3.1.3

3MySQL版本:5.6;

4HBase版本:2.2.2

5Redis版本5.0.5

6MongoDB版本4.0.16

7JDK版本:1.8

8Java IDEEclipse;

3.实验步骤

(一) MySQL数据库操作

学生表如14-7所示。

14-7 学生表Student

Name

English

Math

Computer

zhangsan

69

86

77

lisi

55

100

88

  1. 根据上面给出的Student,在MySQL数据库中完成如下操作:

1在MySQL中创建Student表,并录入数据

 

 

2SQL语句输出Student表中的所有记录;

 

 

3查询zhangsanComputer成绩

 

 

4修改lisiMath成绩改为95。

  

 

2.根据上面已经设计出的Student,使用MySQLJAVA客户端编程实现以下操作:

1)向Student表中添加如下所示的一条记录:

scofield

45

89

100

 

2获取scofieldEnglish成绩信息

 

 

package org.example;

 

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

 

public class MySQLClient {

private static final String URL = "jdbc:mysql://192.168.200.129:3306/school";

private static final String USER = "root";

    private static final String PASSWORD = "1";

 

    public static void main(String[] args) {

        try {

            // 确保加载 MySQL JDBC 驱动

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

 

            // 连接到数据库

            Connection connection = DriverManager.getConnection(URL, USER, PASSWORD);

            System.out.println("成功连接到数据库!");

 

            // (1) Student 表中添加记录

            String insertSQL = "INSERT INTO Student (Name, English, Math, Computer) VALUES (?, ?, ?, ?)";

            try (PreparedStatement preparedStatement = connection.prepareStatement(insertSQL)) {

                preparedStatement.setString(1, "scofield");

                preparedStatement.setInt(2, 45);

                preparedStatement.setInt(3, 89);

                preparedStatement.setInt(4, 100);

                int rowsAffected = preparedStatement.executeUpdate();

                System.out.println("成功插入记录,受影响的行数: " + rowsAffected);

            }

 

            // (2) 获取 scofield English 成绩信息

            String selectSQL = "SELECT English FROM Student WHERE Name = ?";

            try (PreparedStatement preparedStatement = connection.prepareStatement(selectSQL)) {

                preparedStatement.setString(1, "scofield");

                ResultSet resultSet = preparedStatement.executeQuery();

                if (resultSet.next()) {

                    int englishScore = resultSet.getInt("English");

                    System.out.println("scofield English 成绩: " + englishScore);

                } else {

                    System.out.println("未找到 scofield 的记录。");

                }

            }

 

            // 关闭连接

            connection.close();

        } catch (ClassNotFoundException e) {

            System.err.println("MySQL JDBC Driver 未找到。请确保已添加 JDBC 驱动到项目中。");

            e.printStackTrace();

        } catch (SQLException e) {

            e.printStackTrace();

        }

    }

}

 

 

(二)HBase数据库操作

学生表Student如表14-8所示。

14-8 学生表Student

     name

score

English

Math

Computer

zhangsan

69

86

77

lisi

55

100

88

  1. 根据上面给出的学生表Student的信息执行如下操作:

1Hbase Shell命令创建学生Student

 

 

2用scan命令浏览Student表的相关信息

 

 

3查询zhangsan的Computer成绩

 

 

4)修改lisi的Math成绩,95。

 

 

2.根据上面已经设计出的Student表用HBase API编程实现以下操作:

1)添加数据:English:45  Math:89 Computer:100

scofield

45

89

100

import org.apache.hadoop.hbase.client.Connection;

import org.apache.hadoop.hbase.client.ConnectionFactory;

import org.apache.hadoop.hbase.client.Put;

import org.apache.hadoop.hbase.client.Table;

import org.apache.hadoop.hbase.util.Bytes;

 

public class HBaseExample {

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

        // 创建HBase连接

        Connection connection = ConnectionFactory.createConnection();

        Table table = connection.getTable(Bytes.toBytes("Student"));

 

        // 创建Put对象,指定行键

        Put put = new Put(Bytes.toBytes("scofield"));

        put.addColumn(Bytes.toBytes("English"), Bytes.toBytes("score"), Bytes.toBytes("45"));

        put.addColumn(Bytes.toBytes("Math"), Bytes.toBytes("score"), Bytes.toBytes("89"));

        put.addColumn(Bytes.toBytes("Computer"), Bytes.toBytes("score"), Bytes.toBytes("100"));

 

        // 将数据插入表中

        table.put(put);

 

        // 关闭连接

        table.close();

        connection.close();

    }

}

2获取scofieldEnglish成绩信息

import org.apache.hadoop.hbase.client.Connection;

import org.apache.hadoop.hbase.client.ConnectionFactory;

import org.apache.hadoop.hbase.client.Get;

import org.apache.hadoop.hbase.client.Result;

import org.apache.hadoop.hbase.client.Table;

import org.apache.hadoop.hbase.util.Bytes;

 

public class HBaseExample {

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

        // 创建HBase连接

        Connection connection = ConnectionFactory.createConnection();

        Table table = connection.getTable(Bytes.toBytes("Student"));

 

        // 创建Get对象,指定行键

        Get get = new Get(Bytes.toBytes("scofield"));

        Result result = table.get(get);

 

        // 获取English成绩

        byte[] englishScore = result.getValue(Bytes.toBytes("English"), Bytes.toBytes("score"));

        System.out.println("scofieldEnglish成绩: " + Bytes.toString(englishScore));

 

        // 关闭连接

        table.close();

        connection.close();

    }

}

(三)Redis数据库操作

Student键值对如下:

zhangsan:

English: 69

Math: 86

Computer: 77

lisi:

English: 55

Math: 100

Computer: 88

 

1. 根据上面给出的键值对,完成如下操作:

1Redis的哈希结构设计出学生表Student键值可以用student.zhangsan和student.lisi来表示两个键值属于同一个表);   

 

 

2hgetall命令分别输出zhangsanlisi的成绩信息

 

 

3hget命令查询zhangsan的Computer成绩

 

 

4)修改lisi的Math成绩,95

 

 

2.根据上面已经设计出的学生表Student,RedisJAVA客户端编程(jedis),实现如下操作:

1)添加数据:English:45  Math:89 Computer:100

该数据对应的键值对形式如下:

scofield:

English: 45

Math: 89

Computer: 100

import redis.clients.jedis.Jedis;

 

public class RedisExample {

    public static void main(String[] args) {

        // 创建Jedis连接

        Jedis jedis = new Jedis("localhost");

 

        // 添加scofield的成绩

        jedis.hset("student:scofield", "English", "45");

        jedis.hset("student:scofield", "Math", "89");

        jedis.hset("student:scofield", "Computer", "100");

 

        // 关闭连接

        jedis.close();

    }

}

2获取scofieldEnglish成绩信息

import redis.clients.jedis.Jedis;

 

public class RedisExample {

    public static void main(String[] args) {

        // 创建Jedis连接

        Jedis jedis = new Jedis("localhost");

 

        // 获取scofieldEnglish成绩

        String englishScore = jedis.hget("student:scofield", "English");

        System.out.println("scofieldEnglish成绩: " + englishScore);

 

        // 关闭连接

        jedis.close();

    }

}

(四)MongoDB数据库操作

Student文档如下:

{

“name”: “zhangsan”,

“score”: {

“English”: 69,

“Math”: 86,

“Computer”: 77

}

}

{

“name”: “lisi”,

“score”: {

“English”: 55,

“Math”: 100,

“Computer”: 88

}

}

 

1.根据上面给出的文档,完成如下操作:

1MongoDB Shell设计出student集合

use dbstudent;

db.student.insertMany([

    {

        "name": "zhangsan",

        "score": {

            "English": 69,

            "Math": 86,

            "Computer": 77

        }

    },

    {

        "name": "lisi",

        "score": {

            "English": 55,

            "Math": 100,

            "Computer": 88

        }

    }

]);

2find()方法输出两个学生的信息

db.student.find().pretty();

(2)find()方法查询zhangsan所有成绩(只显示score)

db.student.find({ "name": "zhangsan" }, { "score": 1, "_id": 0 });

4)修改lisi的Math成绩,95

db.student.updateOne(

    { "name": "lisi" },

    { $set: { "score.Math": 95 } }

);

2.根据上面已经设计出的Student集合,用MongoDBJava客户端编程,实现如下操作:

1添加数据:English:45 Math:89  Computer:100

与上述数据对应的文档形式如下:

{

“name”: “scofield”,

“score”: {

“English”: 45,

“Math”: 89,

“Computer”: 100

}

}

   import com.mongodb.MongoClient;

import com.mongodb.client.MongoCollection;

import com.mongodb.client.MongoDatabase;

import org.bson.Document;

 

public class MongoDBExample {

    public static void main(String[] args) {

        // 创建MongoDB客户端

        MongoClient mongoClient = new MongoClient("localhost", 27017);

        MongoDatabase database = mongoClient.getDatabase("your_database_name");

        MongoCollection<Document> collection = database.getCollection("student");

 

        // 创建scofield的文档

        Document scofield = new Document("name", "scofield")

                .append("score", new Document("English", 45)

                        .append("Math", 89)

                        .append("Computer", 100));

 

        // 插入文档

        collection.insertOne(scofield);

 

        // 关闭客户端

        mongoClient.close();

    }

}

2)获取scofield所有成绩成绩信息(只显示score)

import com.mongodb.MongoClient;

import com.mongodb.client.MongoCollection;

import com.mongodb.client.MongoDatabase;

import org.bson.Document;

import org.bson.conversions.Bson;

 

import static com.mongodb.client.model.Projections.excludeId;

import static com.mongodb.client.model.Projections.include;

 

public class MongoDBExample {

    public static void main(String[] args) {

        // 创建MongoDB客户端

        MongoClient mongoClient = new MongoClient("localhost", 27017);

        MongoDatabase database = mongoClient.getDatabase("your_database_name");

        MongoCollection<Document> collection = database.getCollection("student");

 

        // 查询scofield的成绩

        Document scofieldScore = collection.find(new Document("name", "scofield"))

                .projection(include("score"))

                .first();

 

        System.out.println("scofield的成绩: " + scofieldScore);

 

        // 关闭客户端

        mongoClient.close();

    }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/861658.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

12.24 MapReduce初级编程实践1

1.实验目的 (1)通过实验掌握基本的MapReduce编程方法; (2)掌握用MapReduce解决一些常见的数据处理问题,包括数据去重、数据排序和数据挖掘等。 2.实验平台 (1)操作系统:Linux(建议Ubuntu16.04或Ubuntu18.04) (2)Hadoop版本:3.1.3 3.实验步骤 (一)编程实现文件合…

12.19熟悉常用的HDFS操作1

1.实验目的 (1)理解HDFS在Hadoop体系结构中的角色; (2)熟练使用HDFS操作常用的Shell命令; (3)熟悉HDFS操作常用的Java API。 2. 实验平台 (1)操作系统:Linux(建议Ubuntu16.04或Ubuntu18.04); (2)Hadoop版本:3.1.3; (3)JDK版本:1.8; (4)Java IDE:Eclip…

12.22熟悉常用的HBase操作2

(二)HBase数据库操作 1. 现有以下关系型数据库中的表和数据(见表14-3到表14-5),要求将其转换为适合于HBase存储的表并插入数据: 表14-3 学生表(Student)学号(S_No)姓名(S_Name)性别(S_Sex)年龄(S_Age)2015001Zhangsanmale232015002Maryfemale222015003Lisimale…

12.15熟悉常用的Linux操作和Hadoop操作1

1.实验目的 Hadoop运行在Linux系统上,因此,需要学习实践一些常用的Linux命令。本实验旨在熟悉常用的Linux操作和Hadoop操作,为顺利开展后续其他实验奠定基础。 2.实验平台 (1)操作系统:Linux(建议Ubuntu16.04或Ubuntu18.04); (2)Hadoop版本:3.1.3。 3.实验步骤 1.熟…

某乎搜索接口加密参数分析

打开某乎,打开浏览器开发者工具,某乎主页随便搜索一个词,如 hello,找到接口如下: aHR0cHM6Ly93d3cuemhpaHUuY29tL2FwaS92NC9zZWFyY2hfdjM/ 该接口为 GET 请求,url 参数未加密,请求头参数有几个未知,如 x-zse-93,x-zse-96,x-zst-81,经测试,请求头必带的参数有 cooki…

JVM实战—5.G1垃圾回收器的原理和调优

大纲 1.G1垃圾回收器的工作原理 2.G1分代回收原理—性能为何比传统GC好 3.使用G1垃圾回收器时应如何设置参数 4.如何基于G1垃圾回收器优化性能 5.问题汇总1.G1垃圾回收器的工作原理 (1)ParNew + CMS的组合有哪些痛点 (2)G1垃圾回收器 (3)G1如何实现垃圾回收的停顿时间是可控的 …

大模型--稚晖君开源百万机器人真机数据集 - HPT 具身智能03--43

目录1. 参考2. AgiBot World 数据集1. Arm(手臂)2. Waist(腰部)3. Chassis(底盘)4. Head(头部)5. End-Effector(末端执行器)6. Computing Platform(计算平台)7. Emergency Stop Button(紧急停止按钮)8. Touchscreen Display(触摸屏显示)9. Back Sensor(后部传…

基于FPGA的信号发生器verilog实现,可以输出方波,脉冲波,m序列以及正弦波,可调整输出信号频率

1.算法运行效果图预览 (完整程序运行后无水印)输出方波输出脉冲波 输出m随机序列输出正弦波2.算法运行软件版本 vivado2019.23.部分核心程序 (完整版代码包含详细中文注释和操作步骤视频)//the module of juxin signal signal_jux signal_jux_u(.i_clk (clk_low),.i_rst …

Vue-cli脚手架安装介绍

1、安装Vue-cli 可以使用npm或cnpm安装vue-cli项目构想工具 # 添加国内淘宝镜像加速 sudo npm config set registry https://registry.npmmirror.com/ sudo npm install -g @vue/cli 或使用 # 添加国内淘宝镜像加速 sudo npm install -g cnpm --registry https://registry.npmm…

一名程序员决定学点会计基础知识

1. 概述 企业是一种以营利(即获取经济利润)为目的的经济组织。在会计看来,企业一辈子其实只做了三件事:经营、投资和筹资。 在正常情况下,企业的经济活动是一个川流不息的过程。这一过程也是运用、分配及耗用企业经济资源的过程 。由于资金是企业经济资源的货币表现形式或…

追光记——2024软件工程秋个人总结报告

软件工程 https://edu.cnblogs.com/campus/fzu/SE2024作业要求 https://edu.cnblogs.com/campus/fzu/SE2024/homework/13315作业目标 软件工程个人总结学号 102201311一、学期回顾 1.1 SE之初印象 论:大三上最难的一门课是哪个? 操作系统吧,毕竟是408要求的大课 数据库也算合…

ov5640_lcd_display学习笔记

最近学习了正点原子fpga ov5640摄像头显示例程,特此记录一下。 系统框架与接口FPGA要操控的外围器件为ov5640摄像头、LCD和DDR3,接口方面也并不算复杂,用到的接口为sccb、dvp以及RGB888。 sccb接口用来配置摄像头寄存器参数,并且iic兼容sccb,所以配置寄存器直接调用iic的驱…