首页 > 其他分享 >Ignite系列1-jdbc连接,建表,查询示例

Ignite系列1-jdbc连接,建表,查询示例

时间:2024-09-10 12:54:01浏览次数:14  
标签:Ignite ignite jdbc 示例 cache ccfg import apache org

一、JDBC方式连接Ignite集群

        通过JDBC方式连接Ignite集群,执行SQL进行见表,merge into插入数据,并执行结果查询示例如下:

/**
     * 测试 ignite jdbc连接,简单创建按一张表,插入一条数据,然后查询出来,并验证字段是否正确
     * @throws ClassNotFoundException
     * @throws SQLException
     */
    @Test
    public void testIgniteJdbcConnection() throws ClassNotFoundException, SQLException, IOException, InvocationTargetException, IllegalAccessException {
        EnvConfig envConfig = ConfigUtils.getEnvConfig();
        Class.forName("org.apache.ignite.IgniteJdbcThinDriver");
        Connection conn = DriverManager.getConnection(envConfig.getJdbcUrl());
        Statement statement = conn.createStatement();
        statement.execute("CREATE TABLE IF NOT EXISTS City (\n" +
                "  ID INT(11),\n" +
                "  Name CHAR(35),\n" +
                "  CountryCode CHAR(3),\n" +
                "  District CHAR(20),\n" +
                "  Population INT(11),\n" +
                "  PRIMARY KEY (ID, CountryCode)\n" +
                ") WITH \"backups=1, CACHE_NAME=City\";\n");

        statement.execute("MERGE INTO public.City (ID,Name,CountryCode) VALUES (1,'testName','95')");
        ResultSet resultSet = statement.executeQuery("select Name from PUBLIC.City");
        String name = null;
        while (resultSet.next()){
            name = resultSet.getString("Name");
            break;
        }
        Assert.assertEquals(name,"testName");
    }

二、java client方式连接Ignite集群

 * 1、缓存表的创建,索引创建(显式+注解)
 * 2、数据put
 * 3、数据get
 * 4、查询数据
 * 5、然后基于此cache表执行task任务(统计数据条数并返回)
import com.hs.bigdata.ignite.testcase.env.EnvConfig;
import com.hs.bigdata.ignite.testcase.model.Person;
import com.hs.bigdata.ignite.testcase.utils.ConfigUtils;
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.Ignition;
import org.apache.ignite.cache.CacheAtomicityMode;
import org.apache.ignite.cache.CacheMode;
import org.apache.ignite.cache.CacheWriteSynchronizationMode;
import org.apache.ignite.cache.query.FieldsQueryCursor;
import org.apache.ignite.cache.query.SqlFieldsQuery;
import org.apache.ignite.configuration.CacheConfiguration;
import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.spi.deployment.uri.UriDeploymentSpi;
import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
import org.apache.ignite.spi.discovery.tcp.ipfinder.multicast.TcpDiscoveryMulticastIpFinder;
import org.junit.Assert;
import org.junit.Test;

import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Iterator;
import java.util.List;

public class IgniteTest2_JavaClientTestCase {

    /**
     * 通过 java client方式连接Ignite,
     * 然后测试
     * 1、缓存表的创建,索引创建(显式+注解)
     * 2、数据put
     * 3、数据get
     * 4、查询数据
     * 5、然后基于此cache表执行task任务(统计数据条数并返回)
     */
    @Test
    public void testIgniteJdbcConnection() throws IOException, InvocationTargetException, IllegalAccessException {
        EnvConfig envConfig = ConfigUtils.getEnvConfig();
        List<String> igniteAddress1 = envConfig.getIgniteAddress1();
        IgniteConfiguration cfg = new IgniteConfiguration();

        cfg.setClientMode(true);
        cfg.setPeerClassLoadingEnabled(true);
        TcpDiscoveryMulticastIpFinder ipFinder = new TcpDiscoveryMulticastIpFinder();
        ipFinder.setAddresses(igniteAddress1);
        cfg.setDiscoverySpi(new TcpDiscoverySpi().setIpFinder(ipFinder));

        UriDeploymentSpi uriDeploymentSpi = new UriDeploymentSpi();
        cfg.setDeploymentSpi(uriDeploymentSpi);
        Ignite ignite = Ignition.start(cfg);

        //1、定义缓存配置
        String cacheName = Person.class.getSimpleName();
        CacheConfiguration<Long, Person> ccfg = new CacheConfiguration<>();
        ccfg.setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL_SNAPSHOT);
        //1.1 注册索引类型
        ccfg.setIndexedTypes(Long.class, Person.class);
        ccfg.setName(cacheName);
        ccfg.setCacheMode(CacheMode.REPLICATED);
        ccfg.setBackups(0);
        ccfg.setWriteSynchronizationMode(CacheWriteSynchronizationMode.FULL_SYNC);
        ccfg.setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL);
        ccfg.setSqlSchema("PUBLIC");

        //缓存已经存在则删除
        ignite.destroyCache(cacheName);

        //1.2、注册缓存
        IgniteCache<Long, Person> cache = ignite.getOrCreateCache(ccfg);
        //2、Put api写入数据到缓存,也可以使用insert方式
        long id = 1L;
        String name = "xiaohua";
        int age = 12;
        float salary = 123.01f;
        Person person = new Person(id,name,age,salary);
        cache.put(id,person);
        //3、get数据
        Person personTemp = cache.get(id);
        Assert.assertEquals(id,personTemp.getId());
        Assert.assertEquals(name,personTemp.getName());
        Assert.assertEquals(age,personTemp.getAge());
        Assert.assertEquals(salary,personTemp.getSalary(),0l);
        //4、查询缓存表
        SqlFieldsQuery qry = new SqlFieldsQuery("SELECT * from public.Person where name=" + "'" + name + "'");
        FieldsQueryCursor<List<?>> query = cache.query(qry);
        Iterator<List<?>> iterator = query.iterator();
        while (iterator.hasNext()){
            List<?> next = iterator.next();
            Assert.assertEquals(next.get(0),personTemp.getId());
            Assert.assertEquals(next.get(1),personTemp.getName());
            Assert.assertEquals(next.get(2),personTemp.getSalary());
        }

        ignite.close();
    }
}

三、maven依赖

<properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <junit.version>4.12</junit.version>
        <ignite.version>2.14.0</ignite.version>
        <slf4j.version>1.7.15</slf4j.version>
        <slf4j.simple.version>1.7.25</slf4j.simple.version>
        <common.lang3.version>3.11</common.lang3.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.example</groupId>
                <artifactId>model</artifactId>
                <version>${project.version}</version>
                <scope>compile</scope>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.ignite</groupId>
                <artifactId>ignite-core</artifactId>
                <version>${ignite.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.ignite</groupId>
                <artifactId>ignite-spring</artifactId>
                <version>${ignite.version}</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>${slf4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-simple</artifactId>
                <version>${slf4j.simple.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>${common.lang3.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.ignite</groupId>
                <artifactId>ignite-urideploy</artifactId>
                <version>${ignite.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

标签:Ignite,ignite,jdbc,示例,cache,ccfg,import,apache,org
From: https://blog.csdn.net/qq_43462685/article/details/142095899

相关文章

  • Ignite系列之2-xml如何配置代码部署
    一、Ignite代码部署属性配置除了对等类加载之外,还可以通过配置UriDeploymentSpi部署用户代码。使用这种方法,可以在节点配置中指定库文件的位置。Ignite会定期扫描该位置,并在类文件有变更时重新部署。该位置可以是文件系统目录或HTTP(S)位置。当Ignite检测到库文件已从该位置删......
  • QT简易右键菜单示例
    widget.h#ifndefWIDGET_H#defineWIDGET_H#include<QWidget>#include<QMenu>classWidget:publicQWidget{Q_OBJECTpublic:Widget(QWidget*parent=nullptr);~Widget();private:voidcontextMenuEvent(QContextMenuEvent*event)overri......
  • 7种提示词应用技巧:细节法、分解法、投票法、示例法、角色法、反思法、记忆法
    找到好的prompt是个持续迭代的过程,需要不断调优。善于使用方法,才能事半功倍。细节法:就像你做饭时,要记得放多少盐、多少水一样,细节法就是让我们在解决问题时,注意到每一个小步骤和小事情,这样我们就不会漏掉重要的信息。分解法:这个方法就像把一个大苹果切成小块,这样吃的时候更容易......
  • Javaweb-JDBC练习
    packagePRACTICE;importDUIXIANG.Brand;importcom.alibaba.druid.pool.DruidDataSourceFactory;importjavax.sql.DataSource;importjava.io.FileInputStream;importjava.sql.*;importjava.util.ArrayList;importjava.util.List;importjava.util.Properties;......
  • 在 Android 应用中使用 VideoView 播放视频的示例
    这段代码片段是在Android应用中使用VideoView播放视频的示例。下面是对代码的详细解析:代码解析findViewById<VideoView>(R.id.vv).apply{setVideoURI("${baseURL}VideoSrc/${o.getString("Src")}".toUri())start()}查找​VideoView​控件:findViewById<Vi......
  • 值得细细品味的7个内容示例
    作为一名内容营销人员,你经常被要求付出更多来提升品牌形象。但在美国的感恩节,你可以要求更多——火鸡、填料和蔓越莓酱。与家人和朋友分享一餐或只是放松和恢复创造力的精力,是值得感恩的礼物。为此,我收集了一些优秀的内容营销案例,它们捕捉到了这个节日的本质。其中一些已经在......
  • openVX加速-新增自定义节点和示例代码
    在OpenVX中添加自定义节点大概通过以下步骤实现:定义自定义节点的计算逻辑:你需要编写一个C函数来实现自定义的图像处理操作。创建自定义节点:通过定义一个自定义节点核(kernel),并将其注册到OpenVX上下文中。在图中使用自定义节点:使用你定义的节点与OpenVX提供的内......
  • 发票真伪识别接口费用-发票真伪查验接口-发票验真示例
    发票信息核验是一个重要的财务和会计过程,涉及到对发票上的信息进行验证,以确保其真实性和准确性。在数字化时代,这一过程企业通常想通过调用发票查验接口的方式实现自动化管理模式。发票查验接口费用不同的服务提供商会有不同的收费标准,例如翔云平台提供的发票验真接口可以免费测试......
  • 身份证实名认证接口费用-身份证信息核验-实名认证示例
    身份证信息核验是实名认证中一种常见的认证方式,它通过比对用户提交的身份证信息与权威数据库中的信息,来确认用户身份是否真实有效,一般情况下,线上平台实现实名认证功能主要依赖于调用第三方接口​平台来实现。实名认证接口费用通常由提供该服务的第三方平台来设定,以翔云实名认......
  • Javaweb-JDBC-API详解
    packageDUIXIANG;publicclassAccount{privateintid;privateStringname;privateDoublemoney;publicintgetId(){returnthis.id;}publicvoidsetId(intid){this.id=id;}publicStringgetName(){returnthis.name;}publicvoidsetName(String......