Phoenix Jdbc 之 ResultSet
ResultSet – next()
ResultSet 对象具有指向其当前数据行的指针。
最初,指针被置于第一行之前。next 方法将指针移动到下一行;因为该方法在 ResultSet 对象中没有下一行时返回 false
代码示例:
// 1. 加载驱动
Class.forName(PhoenixDriver.INSTANCE.getClass.getName)
// 2. 获取JDBC连接
val props: Properties = new Properties()
props.setProperty("phoenix.schema.isNamespaceMappingEnabled", "true");
val conn: Connection = DriverManager.getConnection("jdbc:phoenix:zk:2181", props)
//返回数据只有一行
val rs: ResultSet = conn.getMetaData.getTables(null, null, "WIDTH_TABLE_699_U_TMP", null)
println(rs.next()) //指针移动到第一行 true
println(rs.next()) //指针移动到第二行 false
输出:
true
false
Process finished with exit code 0
打印表的元数据
def main(args: Array[String]): Unit = {
val conn: Connection = PhoenixUtil.getConnection
val rs: ResultSet = conn.getMetaData.getTables(null, null, "WIDTH_TABLE_699_U_TMP", null)
//得到返回的列数
val columnsNumber: Int = rs.getMetaData.getColumnCount
//打印rs的列名 和 列值
while (rs.next()) {
for (i <- 1 to columnsNumber) {
val columnValue: String = rs.getString(i)
println(rs.getMetaData.getColumnName(i)+" : "+columnValue)
}
}
//关闭连接
rs.close()
conn.close()
输出:
TABLE_CAT : null
TABLE_SCHEM : TEST
TABLE_NAME : WIDTH_TABLE_699_U_TMP
TABLE_TYPE : TABLE
REMARKS : null
TYPE_NAME : null
SELF_REFERENCING_COL_NAME : null
REF_GENERATION : null
INDEX_STATE : null
IMMUTABLE_ROWS : false
SALT_BUCKETS : 4
MULTI_TENANT : false
VIEW_STATEMENT : null
VIEW_TYPE : null
INDEX_TYPE : null
TRANSACTIONAL : false
IS_NAMESPACE_MAPPED : true
GUIDE_POSTS_WIDTH : null
TRANSACTION_PROVIDER : null
Process finished with exit code 0
当然还是直接执行下面的 sql 语句,得到的表信息更加丰富
SELECT * FROM SYSTEM."CATALOG" WHERE "TABLE_NAME" = 'WIDTH_TABLE_699_U_TMP';
判断表是否存在
def main(args: Array[String]): Unit = {
val conn: Connection = PhoenixUtil.getConnection
//todo注意: 不同命名空间下的同名表也会返回true
val rs: ResultSet = conn.getMetaData.getTables(null, null, "WIDTH_TABLE_699_U_TMP", null)
if (!rs.next()){
println("表不存在")
}else{
println("表存在")
}
//关闭连接
rs.close()
conn.close()
}