返回首页

gbase数据、南大通用产品文档:GBase8a

更新日期:2024年09月11日

加载时对于double 类型数据加载报错
问题现象
在使用load data infile 加载数据的时候,发现一个double 类型的数据加载报
错,发现是源数据超过了字段类型所设置的精度,但insert into t_double2
select 1,35113110100616712000 from dual 这样可以进去并且值发生了变化
解决方法:
单机层对形如double(M, D) 的类型做insert 或sis 的时候,
没有对精度上限
做相应的判定,而select double 的时候也只能保证15 位是精确的,所以使用
decimal 类型替代double 类型

本示例实现了使用Statement.getGeneratedKeys()获取AUTO_INCREMENT 列的值。

示例如下:
package com.gbase.jdbc.simple;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

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

public class SampleGetGeneratedKeys {

public static void main(String[] args) {


try {



(new SampleGetGeneratedKeys()).test();


} catch (Exception ex) {



}

}


public void test() throws Exception {


Connection conn = null;


try {



Class.forName("com.gbase.jdbc.Driver").newInstance();



conn = DriverManager





.getConnection("jdbc:gbase://192.168.5.210:5258/test?user=root&password=");




Statement stmt = null;



ResultSet rs = null;



try {




// 创建Statement 对象




stmt = conn.createStatement(






java.sql.ResultSet.TYPE_FORWARD_ONLY,






java.sql.ResultSet.CONCUR_UPDATABLE);





// 创建表




stmt.executeUpdate("DROP TABLE IF EXISTS autoIncTutorial");




stmt.executeUpdate("CREATE TABLE autoIncTutorial ("






+ "priKey INT NOT NULL AUTO_INCREMENT, "






+ "dataField VARCHAR(64), PRIMARY KEY (priKey))");









// 插入一条数据




stmt.executeUpdate("INSERT INTO autoIncTutorial (dataField) "






+ "values ('Can I Get the Auto Increment Field?')",






Statement.RETURN_GENERATED_KEYS);









// 使用Statement.getGeneratedKeys()获取自增一字段




int autoIncKeyFromApi = -1;




rs = stmt.getGeneratedKeys();




if (rs.next()) {





autoIncKeyFromApi = rs.getInt(1);




}

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




rs.close();




rs = null;




System.out.println("Key returned from getGeneratedKeys():"






+ autoIncKeyFromApi);



} finally {




if (rs != null) {





try {






rs.close();





} catch (SQLException ex) {






}




}




if (stmt != null) {





try {






stmt.close();





} catch (SQLException ex) {






}




}



}


} catch (SQLException ex) {



// 处理错误



System.out.println("SQLException: " + ex.getMessage());



System.out.println("SQLState: " + ex.getSQLState());



System.out.println("VendorError: " + ex.getErrorCode());


} finally {



conn.close();


}

}
}

函数说明
cume_dist 函数用于统计小于等于当前值的行数/窗口内总行数,比如可以用于统
计小于等于当前薪水的人数所占总人数的比例。
cume_dist 函数不需要参数。
示例

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
874
gbase> SELECT *, cume_dist() over (partition by uname order by dt) as
cume_dist from tt;
+----+------------+-------+-------------+-------------------+
| id | dt
| uname | totalamount | cume_dist
|
+----+------------+-------+-------------+-------------------+
|
2 | 2016-06-05 | A
|
148 |
1 |
|
1 | 2016-06-05 | A
|
135 |
1 |
|
4 | 2016-06-02 | B
|
153 | 0.666666666666667 |
|
3 | 2016-06-02 | B
|
120 | 0.666666666666667 |
|
5 | 2016-06-10 | B
|
198 |
1 |
|
8 | 2016-02-05 | C
|
NULL |