首页 > 其他分享 >HBase13(项目03phoenix视图JDBC开发)

HBase13(项目03phoenix视图JDBC开发)

时间:2023-09-22 14:01:42浏览次数:46  
标签:JDBC varchar sender 03phoenix resultSet 视图 receiver msg C1

1.phoenix视图建立

当创建视图后,就可以使用SQL查询视图,和操作Table一样。

1.视图如何映射到HBase的表?

 

视图的名字必须是:命名空间.表名

2.视图中的列如何映射到HBase的列族和列?

 

列名必须是:列族.列名

3.视图中的类如何映射到HBase的ROWKEY?

 

指定某个列为primary key,自动映射ROWKEY

例子:建立MOMO_CHAT:MSG 视图

 

create view if not exists "MOMO_CHAT"."MSG"(
    id  varchar primary key,
    "C1"."msg_time" varchar,
    "C1"."sender_nickyname" varchar,
    "C1"."sender_account" varchar,
    "C1"."sender_sex" varchar,
    "C1"."sender_ip" varchar,
    "C1"."sender_os" varchar,
    "C1"."sender_phone_type" varchar,
    "C1"."sender_network" varchar,
    "C1"."sender_gps" varchar,
    "C1"."receiver_nickyname" varchar,
    "C1"."receiver_ip" varchar,
    "C1"."receiver_account" varchar,
    "C1"."receiver_os" varchar,
    "C1"."receiver_phone_type" varchar,
    "C1"."receiver_network" varchar,
    "C1"."receiver_gps" varchar,
    "C1"."receiver_sex" varchar,
    "C1"."msg_type" varchar,
    "C1"."distance" varchar,
    "C1"."message" varchar
);

 

条件查询

select * from "MOMO_CHAT"."MSG"
where substr("msg_time", 0, 10) = '2023-09-16'
and "sender_account" = '18862883206'
and "receiver_account" = '13869783495';

 2.编写java代码

  1. 编写PhoenixChatMessageService实现ChatMessageService接口
  2. 在构造器中创建JDBC连接

a) JDBC驱动为:PhoenixDriver.class.getName()

b) JDBC连接URL为:jdbc:phoenix:node1.itcast.cn:2181

  1. 基于JDBC实现getMessage查询
  2. 在close方法中

 

 

 

package cn.itcast.momo_chat.service.impl;

import cn.itcast.momo_chat.entity.Msg;
import cn.itcast.momo_chat.service.ChatMessageService;
import org.apache.phoenix.jdbc.PhoenixDriver;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

public class PhoenixChatMessageService implements ChatMessageService {

    private Connection connection;

    public PhoenixChatMessageService() throws Exception {
        // 1. 加载驱动
        Class.forName(PhoenixDriver.class.getName());
        // 2. 获取JDBC连接
        connection = DriverManager.getConnection("jdbc:phoenix:node1.itcast.cn:2181");
    }

    @Override
    public List<Msg> getMessage(String date, String sender, String receiver) throws Exception {
        // 1. SQL语句
        String sql = "select * from \"MOMO_CHAT\".\"MSG\" where substr(\"msg_time\", 0, 10) = ? and \"sender_account\" = ? and \"receiver_account\" = ?";

        // 2. 构建一个prepareStatement
        PreparedStatement preparedStatement = connection.prepareStatement(sql);

        // 3. 设置Prestatement对应的参数
        preparedStatement.setString(1, date);
        preparedStatement.setString(2, sender);
        preparedStatement.setString(3, receiver);

        // 4. 执行SQL语句,获取到一个ResultSet
        ResultSet resultSet = preparedStatement.executeQuery();

        ArrayList<Msg> msgList = new ArrayList<>();

        // 5. 迭代ResultSet将数据封装在Msg里面
        while(resultSet.next()) {
            Msg msg = new Msg();
            msg.setMsg_time(resultSet.getString("msg_time"));
            msg.setSender_nickyname(resultSet.getString("sender_nickyname"));
            msg.setSender_account(resultSet.getString("sender_account"));
            msg.setSender_sex(resultSet.getString("sender_sex"));
            msg.setSender_ip(resultSet.getString("sender_ip"));
            msg.setSender_os(resultSet.getString("sender_os"));
            msg.setSender_phone_type(resultSet.getString("sender_phone_type"));
            msg.setSender_network(resultSet.getString("sender_network"));
            msg.setSender_gps(resultSet.getString("sender_gps"));
            msg.setReceiver_nickyname(resultSet.getString("receiver_nickyname"));
            msg.setReceiver_ip(resultSet.getString("receiver_ip"));
            msg.setReceiver_account(resultSet.getString("receiver_account"));
            msg.setReceiver_os(resultSet.getString("receiver_os"));
            msg.setReceiver_phone_type(resultSet.getString("receiver_phone_type"));
            msg.setReceiver_network(resultSet.getString("receiver_network"));
            msg.setReceiver_gps(resultSet.getString("receiver_gps"));
            msg.setReceiver_sex(resultSet.getString("receiver_sex"));
            msg.setMsg_type(resultSet.getString("msg_type"));
            msg.setDistance(resultSet.getString("distance"));
            msg.setMessage(resultSet.getString("message"));

            msgList.add(msg);
        }

        // 关闭资源
        resultSet.close();
        preparedStatement.close();

        return msgList;
    }

    @Override
    public void close() throws Exception {
        connection.close();
    }
}

 

 

 

package service;

import cn.itcast.momo_chat.entity.Msg;
import cn.itcast.momo_chat.service.ChatMessageService;
import cn.itcast.momo_chat.service.impl.HBaseNativeChatMessageService;
import org.junit.Test;

import java.util.List;

public class ChatMessageServiceTest {
    private ChatMessageService chatMessageService;

    public ChatMessageServiceTest() throws Exception {
        chatMessageService = new HBaseNativeChatMessageService();
//        chatMessageService = new PhoenixChatMessageService();
    }

    @Test
    public void getMesage() throws Exception {
        List<Msg> message = chatMessageService.getMessage("2023-09-16", "18862883206", "13869783495");
        for (Msg msg : message) {
            System.out.println(msg);
        }
    }
}

 

 

 

 

 

标签:JDBC,varchar,sender,03phoenix,resultSet,视图,receiver,msg,C1
From: https://www.cnblogs.com/hmy22466/p/17707199.html

相关文章

  • JDBC_查询练习
    ###1.查询class表中的数据并将其封装为对象,之后打印输出。###2.代码实现packagecn.itcast.jdbc;publicclassEmp{privateintid;privateStringsname;privatechargender;privateStringcompany;privatedoublesalary;privateintfanbu......
  • JDBC概念
    1.概念2.驱动管理对象(drivermanage)3.获取数据库连接4.数据库连接对象(connection)5.执行sql对象(statemnet)6.代码实现packagecn.itcast.jdbc;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.Statement;publicclassJdbcDemo01{/**JD......
  • Jdbc封装工具
    packagejdbcutils;importjava.io.FileReader;importjava.io.IOException;importjava.net.URL;importjava.sql.*;importjava.util.Properties;//释放资源publicclassJdbcUtils{privatestaticStringurl;privatestaticStringuser;privatesta......
  • SOLIDWORKS三维剖视图怎么做
    1.SOLIDWORKS一般剖视图制作方法,a.先选择剖面视图命令制作(常用)b.先绘制剖切线制作剖视图,绘制剖切线—选择剖面视图命令2.SOLIDWORKS剖面线的调整。当对默认剖面线不满意时,可以双击剖面线对剖面线进行调整调整3.3D剖视图,当我们需要在三维的工程视图中显示局部内部进行剖视时,可以......
  • java通过jdbc复制表数据实现备份
    importorg.apache.commons.lang3.StringUtils;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Service;importjava.sql.*;@Servicepublicclass......
  • 物化视图
    物化视图,它是用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,而从快速的得到结果。物化视图有很多方面和索引很相似:使用物化视图的目的是为了提高查询性能;物化视图对应用透明,增加和删除物化视图不会影响应用程序中SQL语句的正......
  • Odoo看板视图实践案例
    看板视图是一个很常见的可视化解决方案了,例如:联系人卡片,任务卡片,还有二次元朋友们经常逛的哔站。我个人也是非常喜欢看板视图,比起那些呆板的tree视图,看板视图给人的感觉的就是简洁直观又好看。本人也是初学Odoo一个月,其中深意只知其一,但也想跟各位大佬分享交流,于是斗胆以拙见一......
  • Kibana中的数据视图与仪表盘共享实践案例
    前言Kibana是一个非常强大的数据可视化工具,它可以帮助我们快速地将数据转化为可视化的图表和仪表盘。在实际的使用过程中,我们经常会遇到需要将数据视图和仪表盘共享给其他人的情况。本文将介绍如何在Kibana中实现数据视图和仪表盘的共享,并提供一个实际的案例。数据视图的共享在K......
  • 创建视图
    创建视图CREATEVIEW`vw_chengben`AS(select*fromtb_chengben_neibuunionallselect*fromtb_chengben_waibu);CREATEVIEW`vw_shouru`AS(select*fromtb_shouru_neibuunionallselect*fromtb_shouru_waibu);......
  • odoo中在一个模块下修改另一个模块中的视图文件(新增一个字段)
     下面的代码,可以在一个模块中,修改另一个视图的内容,这里是新增一个字段,即:下图中的字段:my_field 固定部分:- <record id="view_order_form_inherit_my_module" model="ir.ui.view">:这是定义一个新的记录的开始标签。model="ir.ui.view"表示这个记录的模型是ir.ui.view,这是O......