hbase jdbc相关

A table of data representing a database result set, which is usually generated by executing a statement that queries the database.

ResultSet

ResultSet是一个接口,用于存放从sql查询的结果
在这里插入图片描述
常用方法
在这里插入图片描述

next方法

next() 判断是否有下一个.源码如下
抽象方法,返回值为布尔类型.

public abstract boolean next()
throws java.sql.SQLException

说明
将光标从当前位置向前移动一行。 ResultSet游标最初位于第一行之前; 对该方法的第一次调用next使第一行成为当前行; 第二个调用使第二行成为当前行,依此类推。
当对next方法的调用返回false时,光标将位于最后一行之后。 任何需要当前行的ResultSet方法的调用都会导致抛出SQLException。 如果结果集类型为TYPE_FORWARD_ONLY,则由供应商指定其JDBC驱动程序实现将返回false还是在后续对next的调用上引发SQLException。
如果为当前行打开了输入流,则对next方法的调用将隐式将其关闭。 读取新行时,将清除ResultSet对象的警告链。

getString方法

public abstract String getString(String columnLabel)
throws java.sql.SQLException

以Java编程语言中String的形式检索此ResultSet对象的当前行中指定列的值。

参数:
columnLabel –使用SQL AS子句指定的列的标签。 如果未指定SQL AS子句,则标签为列的名称
返回值:
列值; 如果值为SQL NULL,则返回的值为null
抛出:
java.sql.SQLException-如果columnLabel无效;否则为false。 如果发生数据库访问错误或在封闭的结果集上调用此方法

PreparedStatement类

表示预编译的SQL语句的对象。
SQL语句已预编译并存储在PreparedStatement对象中。 然后可以使用该对象多次有效地执行该语句。
注意:用于设置IN参数值的setter方法(setShort,setString等)必须指定与输入参数的已定义SQL类型兼容的类型。 例如,如果IN参数的SQL类型为INTEGER,则应使用setInt方法。
如果需要任意参数类型转换,则应将setObject方法与目标SQL类型一起使用。
在以下设置参数的示例中,con表示活动连接:

   PreparedStatement pstmt = con.prepareStatement(“ UPDATE EMPLOYEES
                                        SET SALARY =? WHERE ID =?“);
      pstmt.setBigDecimal(1153833.00)
      pstmt.setInt(2110592

setstring方法

public abstract void setString(int parameterIndex,
                               String x)
throws java.sql.SQLException

用法说明
将指定参数设置为给定的Java String值。 驱动程序在将其发送到数据库时,将其转换为SQL VARCHAR或LONGVARCHAR值(取决于参数的大小,相对于驱动程序对VARCHAR值的限制)。

参数:
parameterIndex –第一个参数为1,第二个参数为2,…
x –参数值
抛出java.sql.SQLException-如果parameterIndex与SQL语句中的参数标记不对应; 如果发生数据库访问错误或在封闭的PreparedStatement上调用此方法

executeQuery方法

public abstract java.sql.ResultSet executeQuery()
throws java.sql.SQLException

在此PreparedStatement对象中执行SQL查询,并返回查询生成的ResultSet对象。

返回值:
包含查询产生的数据的ResultSet对象; 永不为空
抛出:
java.sql.SQLTimeoutException-当驱动程序确定已经超过了setQueryTimeout方法指定的超时值并且至少已尝试取消当前正在运行的Statement时
java.sql.SQLException-如果发生数据库访问错误; 在关闭的PreparedStatement上调用此方法,或者SQL语句不返回ResultSet对象

体系结构

在这里插入图片描述

Connection类

与特定数据库的连接(会话)。执行SQL语句,并在连接的上下文中返回结果。
Connection对象的数据库能够提供描述其表,其支持的SQL语法,其存储过程,此连接的功能等信息。此信息是使用getMetaData方法获得的。

注意:配置连接时,JDBC应用程序应使用适当的连接方法,例如setAutoCommit或setTransactionIsolation。当有JDBC方法可用时,应用程序不应直接调用SQL命令来更改连接的配置。默认情况下,Connection对象处于自动提交模式,这意味着它在执行每个语句后自动提交更改。如果禁用了自动提交模式,则必须显式调用方法commit才能提交更改;否则,必须执行以下操作:否则,将不会保存数据库更改。

prepareStatement方法

java.sql.Connection public abstract java.sql.PreparedStatement prepareStatement(String sql)
throws java.sql.SQLException

创建一个PreparedStatement对象,用于将参数化的SQL语句发送到数据库。
可以预编译带有或不带有IN参数的SQL语句,并将其存储在PreparedStatement对象中。然后可以使用该对象多次有效地执行该语句。
注意:此方法已优化用于处理受益于预编译的参数SQL语句。如果驱动程序支持预编译,则prepareStatement方法会将语句发送到数据库以进行预编译。某些驱动程序可能不支持预编译。在这种情况下,在执行PreparedStatement对象之前,该语句可能不会发送到数据库。这对用户没有直接影响;但是,它确实会影响哪些方法抛出某些SQLException对象。
默认情况下,使用返回的PreparedStatement对象创建的结果集的类型为TYPE_FORWARD_ONLY,并发级别为CONCUR_READ_ONLY。可以通过调用getHoldability来确定创建的结果集的可保存性。

参数:
sql –可能包含一个或多个“?”的SQL语句参数占位符
返回值:
包含预编译的SQL语句的新的默认PreparedStatement对象
抛出:
java.sql.SQLException-如果发生数据库访问错误或在关闭的连接上调用此方法

DriveManager类

用于管理一组JDBC驱动程序的基本服务。注意:JDBC 2.0 API中的新增功能javax.sql.DataSource接口提供了另一种连接数据源的方法。使用DataSource对象是连接到数据源的首选方法。

作为其初始化的一部分,DriverManager类将尝试加载“ jdbc.drivers”系统属性中引用的驱动程序类。这允许用户自定义其应用程序使用的JDBC驱动程序。例如,在〜/ .hotjava / properties文件中,您可以指定:

   jdbc.drivers = foo.bah.Driver:wombat.sql.Driver:bad.taste.ourDriver

DriverManager方法getConnection和getDrivers已得到增强,以支持Java Standard Edition Service Provider机制。 JDBC 4.0驱动程序必须包含文件META-INF / services / java.sql.Driver。该文件包含java.sql.Driver的JDBC驱动程序实现的名称。例如,要加载my.sql.Driver类,META-INF / services / java.sql.Driver文件将包含以下条目:
my.sql.Driver

应用程序不再需要使用Class.forName()显式加载JDBC驱动程序。当前使用Class.forName()加载JDBC驱动程序的现有程序将继续运行,而无需进行修改。
调用方法getConnection时,DriverManager将尝试从初始化时加载的驱动程序和使用与当前applet或应用程序相同的类加载器显式加载的驱动程序中查找合适的驱动程序。

代码示例

public class JDBCdemo {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        Class.forName("org.apache.phoenix.jdbc.PhoenixDriver");

        Properties prop = new Properties();

        prop.setProperty("phoenix.schema.isNamespaceMappingEnabled", "true");
        Connection conn = DriverManager.getConnection("jdbc:phoenix:server01,server02,server03:2181", prop);
        PreparedStatement prep = conn.prepareStatement("select state,count(*) rn from us_population where state in(?,?) group by state");
        prep.setString(1, "TX");
        prep.setString(2, "AZ");


        /**
         * ResultSet 对象具有指向其当前数据行的指针。
         * 最初,指针被置于第一行之前。next 方法将指针移动到下一行;
         * 因为该方法在 ResultSet 对象中没有下一行时返回 false,所以可以在 while 循环中使用它来迭代结果集。
         * 默认的 ResultSet 对象不可更新,仅有一个向前移动的指针。因此,只能迭代它一次,并且只能按从第一行到最后一行的顺序进行.
         */
        ResultSet resultSet = prep.executeQuery();
        while (resultSet.next()) {
            /**
             * 对于获取方法,JDBC 驱动程序尝试将基础数据转换为在获取方法中指定的 Java 类型,并返回适当的 Java 值。
             * JDBC 规范有一个表,显示允许的从 SQL 类型到供 ResultSet 获取方法使用的 Java 类型的映射关系。
             */
            String state = resultSet.getString("state");
            int num = resultSet.getInt("rn");
            System.out.println(state + "\t" + num);
        }
        resultSet.close();
        prep.close();
        conn.close();

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值