返回首页

gbase数据、南大通用产品文档:GBase8aCOUNT(DISTINCT expr,[expr])

更新日期:2024年09月11日

返回不同的非NULL 的值的总数目。
示例
示例1:返回lo_orderkey 列中不同的非NULL 的值的总数目。
gbase> SELECT COUNT(DISTINCT lo_orderkey) FROM ssbm.lineorder;
+-----------------------------+
| COUNT(DISTINCT lo_orderkey) |
+-----------------------------+
| 1500000 |
+-----------------------------+
1 row in set
在GBase UP 中,用户通过给定一个表达式列表而获取不包含NULL 不同表达式组
合的数目。而在标准SQL 中,用户必须在COUNT(DISTINCT...)中连接所有的表达
式。

该章节分为2 部分:

使用Statement 执行SQL 语句

GBase UP 产品手册 6 应用开发指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 1075

使用PreparedStatement 执行SQL 语句

executeSQLByStatement方法使用Statemen执行SQL语句,
并把ResultSet
中的查询结果通过控制台打印出来。

executeSQLByPreparedStatement 方法使用PreparedStatement 执行SQL
语句,并把ResultSet 中的查询结果通过控制台打印出来。
示例如下:
package com.gbase.jdbc.simple;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;

public class ExecuteSQLByStatement {


private static final String URL =
"jdbc:gbase://192.168.111.95:5258/test?user=sysdba&password=";

public static void main(String[] args) {
prepareTableAndData();
ExecuteSQLByStatement executeSQLByStatement = new
ExecuteSQLByStatement();
executeSQLByStatement.executeSQLByStatement();
executeSQLByStatement.executeSQLByPreparedStatement();
}

/**
* 通过Statement 执行SQL 语句,
* 并把ResultSet 中的结果通过控制台
* 打印出来。
*/
public void executeSQLByStatement() {
Connection conn = null;
Statement stm = null;
ResultSet rs = null;
ResultSetMetaData rsmd = null;
try {
Class.forName("com.gbase.jdbc.Driver");

GBase UP 产品手册 6 应用开发指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 1076
conn = DriverManager.getConnection(URL);
stm = conn.createStatement();
rs = stm.executeQuery("select * from user_info where user_id in (2,3)");

if (rs == null) {
return;
}
rsmd = rs.getMetaData();
int rsColoumnCount = rsmd.getColumnCount();
while (rs.next()) {
System.out.println("executeSQLByStatement
===========================");
for (int i = 0; i < rsColoumnCount; i++) {
System.out.print(rsmd.getColumnName(i + 1).concat(" = "));
System.out.println(rs.getObject(i + 1));
}
System.out.println("executeSQLByStatement
===========================");
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
rs.close();
} catch (NullPointerException e) {
} catch (Exception e) {
rs = null;
}
try {
stm.close();
} catch (NullPointerException e) {
} catch (Exception e) {
stm = null;
}
try {
conn.close();
} catch (NullPointerException e) {
} catch (Exception e) {
conn = null;

GBase UP 产品手册 6 应用开发指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 1077
}
}
}

/**
* 通过PreparedStatement 执行SQL 语句,
* 并把ResultSet 中的结果通过控制台
* 打印出来。
*/
public void executeSQLByPreparedStatement() {
Connection conn = null;
PreparedStatement stm = null;
ResultSet rs = null;
ResultSetMetaData rsmd = null;
try {
Class.forName("com.gbase.jdbc.Driver");
conn = DriverManager.getConnection(URL);
stm = conn.prepareStatement("select * from user_info where user_id in
(?,?)");
stm.setInt(1, 2);
stm.setInt(2, 3);

rs = stm.executeQuery();
if (rs == null) {
return;
}
rsmd = rs.getMetaData();
int rsColoumnCount = rsmd.getColumnCount();
while (rs.next()) {
System.out.println("executeSQLByPreparedStatement
===========================");
for (int i = 0; i < rsColoumnCount; i++) {

System.out.print(rsmd.getColumnName(i + 1).concat(" = "));
System.out.println(rs.getObject(i + 1));
}
System.out.println("executeSQLByPreparedStatement
===========================");
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {

GBase UP 产品手册 6 应用开发指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 1078
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
rs.close();
} catch (NullPointerException e) {
} catch (Exception e) {
rs = null;
}
try {
stm.close();
} catch (NullPointerException e) {
} catch (Exception e) {
stm = null;
}
try {
conn.close();
} catch (NullPointerException e) {
} catch (Exception e) {
conn = null;
}
}
}

/**
* 在test 数据库中创建一个名称为
* “user_info”的表,包含三个字段,
* 并向表中插入三条数据。
*/
private static void prepareTableAndData() {
Connection conn = null;
Statement stm = null;
try {
Class.forName("com.gbase.jdbc.Driver");
conn = DriverManager.getConnection(URL);
stm = conn.createStatement();

/*
* create table user_info (
user_id int(11) ,
user_Name varchar(50),
user_info varchar(200)
)ENGINE=GsDB DEFAULT CHARSET=utf8
*/

GBase UP 产品手册 6 应用开发指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 1079
stm.executeUpdate("drop table if exists `user_info`");
stm.executeUpdate("create table `user_info` ( `user_id`
int(11) ,`user_Name` varchar(50),`user_info` varchar(200))ENGINE=GsDB DEFAULT
CHARSET=utf8");
stm.executeUpdate("insert into `user_info` (`user_id`,`user_name`,
`user_info`) values (1,'张三','南大通用')");
stm.executeUpdate("insert into `user_info` (`user_id`,`user_name`,
`user_info`) values (2,'张四','南大通用-gbase8a')");
stm.executeUpdate("insert into `user_info` (`user_id`,`user_name`,
`user_info`) values (3,'张五','南大通用-gbase8d')");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
stm.close();
} catch (NullPointerException e) {
} catch (Exception e) {
stm = null;
}
try {
conn.close();
} catch (NullPointerException e) {
} catch (Exception e) {
conn = null;
}
}
}
}

在所有平台上,GBase 8s 均可识别因特网协议 V6 (IPv6) 地址(长度为 128 位)和因特
网协议 V4 (IPv4) 地址(长度为 32 位)。
数据库服务器会在启动时检查底层操作系统中是否支持 IPv6。
如果支持 IPv6,
那么将使用
IPv6。如果底层的操作系统不支持 IPv6,那么将使用 IPv4 地址。GBase 8s 和 Client SDK
从名称服务检索 IP 地址。
在同时带有 IPv4 和 IPv6 地址的主机上运行的 GBase 8s 可以按与在多宿主主机上运行
的服务器相同的方式进行处理。可使用以下某种方法在同时带有IPv4 和 IPv6 地址的主机
上配置 GBase 8s:
 创建别名(使用 DBSERVERALIASES 配置参数),向其中某个别名指定 IPv6 地
址而向另一个别名指定 IPv4 地址。
 通过在 sqlhosts 文件中使用带通配符的主机名,
指示 GBase 8s 在主机上配置的所
有 IP 地址上进行侦听。

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 57 -
例如:
#dbservername nettype hostname servicename options
olserver1 onsoctcp *myhost onservice1
如果已对主机配置了 IPv6 地址,
那么 SQLHOSTS 文件中的 hostname 条目将映射到某个
IPv6 地址。如果未对主机配置 IPv6 地址,那么 hostname 条目将映射到 IPv4 地址。
禁用 IPv6 支持
GBase 8s 还提供了在 IPv4 环境中操作时禁用 IPv6 支持的方法。
要对所有数据库实例和客户机应用程序禁用 IPv6 支持,请执行以下操作:
 创建空文件 $GBASEDBTDIR/etc/IFX_DISABLE_IPV6。
用户 gbasedbt 必须具有该文件的读许可权。该文件不可读写,也无需包含任何数据。
要对单个数据库实例或单个客户机应用程序禁用 IPv6 支持,请执行以下操作:
 在数据库服务器实例上或在运行应用程序的工作站上,创建名为
IFX_DISABLE_IPV6 的环境变量,并将其值设置为 yes,如下所示:
IFX_DISABLE_IPV6=yes