zoukankan      html  css  js  c++  java
  • NoSQL 和关系数据库的操作比较

    (一) MySQL 数据库操作

    学生表 Student

    Name English Math Computer

    zhangsan 69 86 77

    lisi 55 100 88

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

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

      创建数据库

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

    3. 查询 zhangsan Computer 成绩;

    4)修改 lisi Math 成绩,改为 95

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

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

    scofield 45 89 100

    2)获取 scofield English 成绩信息

    package com.mysql;

    import java.sql.*;

    public class MysqlTest {

    static final String DRIVER = "com.mysql.jdbc.Driver";

    static final String DB = "jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=utf-8&useSSL=false";

    static final String USER = "root";

    static final String PASSWD = "hadoop";

    public static void main(String[] args) {

    Connection conn = null;

    Statement stmt = null;

    try {

    Class.forName(DRIVER);

    System.out.println("Connecting to a selected database...");

    conn = DriverManager.getConnection(DB, USER, PASSWD);

    stmt = conn.createStatement();

    String sql = "insert into student values('scofield',45,89,100)";

    stmt.executeUpdate(sql);

    System.out.println("Inserting records into the table successfully!");

    } catch (ClassNotFoundException e) {

    e.printStackTrace();

    } catch (SQLException e) {

    e.printStackTrace();

    } finally {

    if (stmt != null)

    try {

    stmt.close();

    } catch (SQLException e) {

    e.printStackTrace();

    }

    if (conn != null)

    try {

    conn.close();

    } catch (SQLException e) {

    e.printStackTrace();

    }

    }

    }

    }

    (二)HBase 数据库操作

    学生表 Student

    name score

    English Math Computer

    zhangsan 69 86 77

    lisi 55 100 88

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

    1. Hbase Shell 命令创建学生表 Student

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

    1. 查询 zhangsan Computer 成绩;

    4)修改 lisi Math 成绩,改为 95

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

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

    scofield 45 89 100

    2)获取 scofield English 成绩信息。

    public class HbaseTest {

    public static Configuration configuration;

    public static Connection connection;

    public static Admin admin;

    public static void main(String[] args) {

    configuration = HBaseConfiguration.create();

    configuration.set("hbase.rootdir", "hdfs://localhost:9000/hbase");

    try {

    connection = ConnectionFactory.createConnection(configuration);

    admin = connection.getAdmin();

    } catch (IOException e) {

    e.printStackTrace();

    }

    try {

    insertRow("student", "scofield", "score", "English", "45");

    insertRow("student", "scofield", "score", "Math", "89");

    insertRow("student", "scofield", "score", "Computer", "100");

    } catch (IOException e) {

    e.printStackTrace();

    }

    close();

    }

    public static void insertRow(String tableName, String rowKey,

    String colFamily, String col, String val) throws IOException {

    Table table = connection.getTable(TableName.valueOf(tableName));

    Put put = new Put(rowKey.getBytes());

    put.addColumn(colFamily.getBytes(), col.getBytes(), val.getBytes());

    table.put(put);

    table.close();

    }

    public static void close() {

    try {

    if (admin != null) {

    admin.close();

    }

    if (null != connection) {

    connection.close();

    }

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    }

    (三)Redis 数据库操作

    Student 键值对如下:

    zhangsan:

    English: 69

    Math: 86

    Computer: 77

    lisi:

    English: 55

    Math: 100

    Computer: 88

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

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

    2)用 hgetall 命令分别输出 zhangsan lisi 的成绩信息;

    1. hget 命令查询 zhangsan Computer 成绩;

    1. 修改 lisi Math 成绩,改为 95

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

    操作:

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

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

    scofield:

    English: 45

    Math: 89

    Computer: 100

    import java.util.Map;

    import redis.clients.jedis.Jedis;

    public class test {

    public static void main(String[] args) {

    Jedis jedis = new Jedis("localhost");

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

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

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

    Map<String, String> value = jedis.hgetAll("student.scofield");

    for (Map.Entry<String, String> entry : value.entrySet()) {

    System.out.println(entry.getKey() + ":" + entry.getValue());

    }

    }

    }

    2)获取 scofield English 成绩信息

    import redis.clients.jedis.Jedis;

    class RedisTest2 {

    public static void main(String[] args) {

    Jedis jedis = new Jedis("localhost");

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

    System.out.println("scofield's English score is: " + value);

    }

    }

    (四)MongoDB 数据库操作

    Student 文档如下:

    {

    "name": "zhangsan",

    "score": {

    "English": 69,

    "Math": 86,

    "Computer": 77

    }

    }

    {

    "name": "lisi",

    "score": {

    "English": 55,

    "Math": 100,

    "Computer": 88

    }

    }

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

    1)用 MongoDB Shell 设计出 student 集合;

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

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

    2. 修改 lisi Math 成绩,改为 95

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

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

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

    {

    "name": "scofield",

    "score": {

    "English": 45,

    "Math": 89,

    "Computer": 100

    }

    }

    public class MongoTest {

    public static void main(String[] args) {

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

    MongoDatabase mongoDatabase = mongoClient.getDatabase("student");

    MongoCollection<Document> collection = mongoDatabase

    .getCollection("student");

    Document document = new Document("name", "scofield").append(

    "score",

    new Document("English", 45).append("Math", 89).append(

    "Computer", 100));

    List<Document> documents = new ArrayList<Document>();

    documents.add(document);

    collection.insertMany(documents);

    System.out.println("文档插入成功");

    }

    }

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

    public class MongoTest2 {

    public static void main(String[] args) {

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

    MongoDatabase mongoDatabase = mongoClient.getDatabase("student");

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

    MongoCursor<Document> cursor=collection.find( new Document("name","scofield")).

    projection(new Document("score",1).append("_id", 0)).iterator();

    while(cursor.hasNext())

    System.out.println(cursor.next().toJson());

    }

    }

  • 相关阅读:
    我工作三年了,该懂并发了!
    代理,一文入魂
    非典型算法题,用程序和电脑玩一个游戏
    详解command设计模式,解耦操作和回滚
    matplotlib画图教程,设置坐标轴标签和间距
    详解工程师不可不会的LRU缓存淘汰算法
    详解深度学习感知机原理
    详解gitignore的使用方法,让你尽情使用git add .
    算法题 | 你追我,如果你追到我……那就算你赢了
    险些翻车,差一点没做出来的基础算法题
  • 原文地址:https://www.cnblogs.com/aishanyishi/p/10304703.html
Copyright © 2011-2022 走看看