本文主要是介绍使用Phoenix的JDBC接口,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
使用Phoenix的JDBC接口
Phoenix提供了JDBC接口,可以在Client中方便地以SQL的形式来访问HBase中的数据。
下面以Java代码来展示用法
/*** Created by tao on 4/20/15.** 运行方法:* java -cp rest-server-1.0-SNAPSHOT.jar:jars/* cn.gridx.examples.TestPhoenix** 其中,目录jars中的文件为:avro-1.7.7.jar, bigdata-1.0-SNAPSHOT.jar, phoenix-4.3.1-client.jar** 通过JDBC接口访问Phoenix时,不需要包含hbase-site.xml、core-site.xml等配置文件,也不需要在classpath中包含hadoop有关的jar包** 如果出现类似于如下的异常:* Exception in thread "main" java.lang.RuntimeException: hbase-default.xml file seems to be for and old version of HBase (0.98.9-hadoop2), this version is 0.98.6-cdh5.2.0** 说明classpath有问题*/
public class TestPhoenix {public static void main(String[] args) throws SQLException {Statement stmt = null;ResultSet rs = null;String viewName = "\"food:products\""; // 这是对HBase表"food:products"创建的Phoenix viewSystem.err.println("\n[viewName = " + viewName + "]\n" );/* ecs1.njzd.com:2181是zookeeper的某一个节点的ip:port 即使集群中的ZooKeeper存在多个节点,这里也只需要写出一个节点的ip:port就可以了*/// 如果是Scala,还需要这一句//Class.forName("org.apache.phoenix.jdbc.PhoenixDriver");Connection conn = DriverManager.getConnection("jdbc:phoenix:ecs1.njzd.com:2181");/* 在Phoenix中,如果table name/view name、column name等字符串不加上双引号就会被认为是大写。所以,这里的brand_name要加上双引号 */PreparedStatement pstmt = conn.prepareStatement("select * from " + viewName + " where \"brand_name\" like '%雀巢%' limit 1");rs = pstmt.executeQuery();StringBuffer sb = new StringBuffer();while (rs.next()) { ProductData product = new ProductData(rs.getString("pk"), rs.getString("product_name"), rs.getString("format"),rs.getString("regularity"), rs.getString("img_url"), rs.getString("brand_name"), rs.getString("producer_address"),rs.getString("shelf_life"), rs.getString("category_name"), rs.getString("ingredient"), rs.getString("brand_id"),rs.getString("producer_id"), rs.getString("category_code"), rs.getString("batch_id_list"), rs.getString("ingredient_id_list"));System.err.println(product.toString());System.err.println("\n=========================================================");}/* 关闭资源*/rs.close();pstmt.close();}
}
说明:
- 在利用
rs.getString("columnName")
查询某一列值时,如果该列未定义,那么会报一个SQLException类型的异常:Undefined column. columnName=product_ids
- 如果该列没有值,那么
rs.getString("columnName")
将会返回null
这篇关于使用Phoenix的JDBC接口的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!