最新消息:天气越来越冷,记得加一件厚衣裳

Kylin JDBC 驱动

Kylin w3sun 2120浏览 0评论

身份认证

基于Apache Kylin身份认证的restful服务支持以下参数:

  • user : username
  • password : password
  • ssl: true/false,默认为 false,如果设置为true那么所有的服务都会遵循https协议。

URL连接格式

jdbc:kylin://<hostname>:<port>/<kylin_project_name>

  • 如果 “ssl” = true, 那么连接端口”port” 应该是Kylin服务器的HTTPS端口;
  • 如果 端口”port”没有指定,driver将会使用默认端口: HTTP协议端口号为 80,HTTPS协议端口号为 443;
  • 必须指定Kylin Server上的工程名”kylin_project_name”,并确保该工程下的Model和Cube可用。

通过Statement进行查询

 /**
 * 使用Statement进行查询
 *
 * @param connection JDBC Connection
 */
private static void queryWithStatement(Connection connection) {
    Statement state = null;
    try {
        state = connection.createStatement();
        ResultSet resultSet = state.executeQuery("SELECT * FROM kylin_country LIMIT 15");
        showQueryResult(resultSet);
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        closeStatement(state);
    }
}

通过PreparedStatement进行查询

目前prepared statement支持的占位符参数类型:

  • setString
  • setInt
  • setShort
  • setLong
  • setFloat
  • setDouble
  • setBoolean
  • setByte
  • setDate
  • setTime
  • setTimestamp
/**
     * 使用PrepareStatement进行查询
     *
     * @param connection JDBC Connection
     */
    private static void queryWithPrepareStatement(Connection connection) {
        PreparedStatement pstm = null;
        try {
            pstm = connection.prepareStatement("SELECT * FROM kylin_country WHERE country=?");
            pstm.setString(1, "PS");
            ResultSet resultSet = pstm.executeQuery();
            showQueryResult(resultSet);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            closeStatement(pstm);
        }
    }

获取ResultSet 结果集metadata

Kylin JDBC驱动提供了相关方法以获取元数据信息,可以借助sql模式过滤器(比如%)列出catalog, schema, table 和column等 。

/**
     * 展示元数据信息
     *
     * @param connection Kylin JDBC Connection
     */
    private static void showMetaData(Connection connection) {
        ResultSet tables = null;
        try {
            tables = connection.getMetaData().getTables(null, null, "%", null);
            while (tables.next()) {
                for (int i = 0; i < 10; i++) {
                    System.out.println(tables.getString(i + 1));
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            closeResultSet(tables);
        }
    }

完整版代码

public class KylinJDBC {
    public static void main(String[] args) {
        Driver driver = null;
        Connection connection = null;
        try {
            driver = (Driver) Class.forName("org.apache.kylin.jdbc.Driver").newInstance();
            Properties info = new Properties();
            info.put("user", "ADMIN");
            info.put("password", "KYLIN");
            connection = driver.connect("jdbc:kylin://ip:7070/learn_kylin", info);

            queryWithStatement(connection);

            queryWithPrepareStatement(connection);

            showMetaData(connection);

        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            closeConnection(connection);
        }
    }

    /**
     * 使用Statement进行查询
     *
     * @param connection JDBC Connection
     */
    private static void queryWithStatement(Connection connection) {
        Statement state = null;
        try {
            state = connection.createStatement();
            ResultSet resultSet = state.executeQuery("SELECT * FROM kylin_country LIMIT 15");
            showQueryResult(resultSet);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            closeStatement(state);
        }
    }

    /**
     * 使用PrepareStatement进行查询
     *
     * @param connection JDBC Connection
     */
    private static void queryWithPrepareStatement(Connection connection) {
        PreparedStatement pstm = null;
        try {
            pstm = connection.prepareStatement("SELECT * FROM kylin_country WHERE country=?");
            pstm.setString(1, "PS");
            ResultSet resultSet = pstm.executeQuery();
            showQueryResult(resultSet);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            closeStatement(pstm);
        }
    }

    /**
     * 展示元数据信息
     *
     * @param connection Kylin JDBC Connection
     */
    private static void showMetaData(Connection connection) {
        ResultSet tables = null;
        try {
            tables = connection.getMetaData().getTables(null, null, "%", null);
            while (tables.next()) {
                for (int i = 0; i < 10; i++) {
                    System.out.println(tables.getString(i + 1));
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            closeResultSet(tables);
        }
    }

    /**
     * 查询结果ResultSet进行格式化显示
     *
     * @param resultSet Kylin JDBC 查询结果
     */
    private static void showQueryResult(ResultSet resultSet) {
        ResultSetMetaData metaData = null;
        try {
            metaData = resultSet.getMetaData();
            int columnCount = metaData.getColumnCount();
            for (int i = 0; i < columnCount; i++) {
                System.out.print(metaData.getColumnLabel(i + 1) + "\t");
            }
            System.out.println();
            while (resultSet.next()) {
                for (int i = 0; i < columnCount; i++) {
                    System.out.print(resultSet.getObject(i + 1) + "\t");
                }
                System.out.println();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            closeResultSet(resultSet);
        }
    }

    /**
     * 关闭JDBC连接
     *
     * @param connection JDBC Connection
     */
    private static void closeConnection(Connection connection) {
        if (connection != null) {
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 关闭Statement
     *
     * @param statement JDBC JDBC Connection Statement
     */
    private static void closeStatement(Statement statement) {
        if (statement != null) {
            try {
                statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 关闭ResultSet
     *
     * @param resultSet Kylin JDBC 查询结果集
     */
    private static void closeResultSet(ResultSet resultSet) {
        if (resultSet != null) {
            try {
                resultSet.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.w3sun.kylin.jdbc</groupId>
    <artifactId>jdbc-test</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <kylin.version>2.0.0</kylin.version>
        <encoding>UTF-8</encoding>
    </properties>

    <dependencies>
        <!-- 导入Kylin JDBC的依赖 -->
        <dependency>
            <groupId>org.apache.kylin</groupId>
            <artifactId>kylin-jdbc</artifactId>
            <version>${kylin.version}</version>
        </dependency>

    <build>
        <pluginManagement>
            <plugins>
                <!-- 编译scala的插件 -->
                <plugin>
                    <groupId>net.alchim31.maven</groupId>
                    <artifactId>scala-maven-plugin</artifactId>
                    <version>3.2.2</version>
                </plugin>
                <!-- 编译java的插件 -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.5.1</version>
                </plugin>
            </plugins>
        </pluginManagement>
        <plugins>
            <plugin>
                <groupId>net.alchim31.maven</groupId>
                <artifactId>scala-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>scala-compile-first</id>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>add-source</goal>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>scala-test-compile</id>
                        <phase>process-test-resources</phase>
                        <goals>
                            <goal>testCompile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>compile</phase>
                        <goals>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>


            <!-- 打jar插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>2.4.3</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <filters>
                                <filter>
                                    <artifact>*:*</artifact>
                                    <excludes>
                                        <exclude>META-INF/*.SF</exclude>
                                        <exclude>META-INF/*.DSA</exclude>
                                        <exclude>META-INF/*.RSA</exclude>
                                    </excludes>
                                </filter>
                            </filters>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

转载请注明:雪后西塘 » Kylin JDBC 驱动

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址