示例:常用操作
示例1 创建数据库连接、创建表、插入数据示例
此示例将演示如何基于GaussDB提供的JDBC接口开发应用程序。执行示例前,需要加载驱动,驱动的获取和加载方法请参见JDBC包、驱动类和环境类。
|
示例2 客户端内存占用过多解决示例
此示例主要使用setFetchSize来调整客户端内存使用,原理是通过数据库游标来分批获取服务器端数据,但会加大网络交互,可能会损失部分性能。
由于游标事务内有效,故需要先关闭自动提交,最后需要执行手动提交。
|
执行完毕后可执行如下命令恢复自动提交。
conn.setAutoCommit(true);
示例3 常用数据类型使用示例
// 前置操作。
String createsql = "create table if not exists t_bit(col_bit bit, col_bit1 int)";
Statement stmt = conn.createStatement();
stmt.execute(createsql);
stmt.close();
// bit类型使用示例,注意此处bit类型取值范围[0,1]。
Statement st = conn.createStatement();
String sqlstr = "create or replace function fun_1()\n" +
"returns bit AS $$\n" +
"select col_bit from t_bit limit 1;\n" +
"$$\n" +
"LANGUAGE SQL;";
st.execute(sqlstr);
CallableStatement c = conn.prepareCall("{ ? = call fun_1() }");
// 注册输出类型,位串类型。
c.registerOutParameter(1, Types.BIT);
c.execute();
// 使用Boolean类型获取结果。
System.out.println(c.getBoolean(1));
// float8类型使用示例。
st.execute("create table if not exists t_float(col1 float8,col2 int)");
PreparedStatement pstm = conn.prepareStatement("insert into t_float values(?)");
pstm.setDouble(1,123456.123);
pstm.execute();
pstm.close();
// 函数返回值为float8的使用示例。
st.execute("create or replace function func_float() " +
"return float8 " +
"as declare " +
"var1 float8; " +
"begin " +
" select col1 into var1 from t_float limit 1; " +
" return var1; " +
"end;");
CallableStatement cs = conn.prepareCall("{? = call func_float()}");
cs.registerOutParameter(1,Types.DOUBLE);
cs.execute();
System.out.println(cs.getDouble(1));
st.close();
示例4 数据库连接监控功能使用示例
此示例将演示如何使用JDBC驱动的连接监控功能。
// 以下用例以gaussdbjdbc.jar为例。
// 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放,使用时解密),确保安全。
// 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class DBMonitorTest {
// 创建数据库连接。
public static void main(String[] args){
String driver = "com.huawei.gaussdb.jdbc.Driver";
String username = System.getenv("EXAMPLE_USERNAME_ENV");
String passwd = System.getenv("EXAMPLE_PASSWORD_ENV");
String sourceURL
= "jdbc:gaussdb://$ip:$port/database?dbMonitor=true&loggerLevel=debug&loggerFile=dbMonitor.log";
try {
// 加载数据库驱动。
Class.forName(driver).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
Connection conn = null;
Statement statement = null;
try {
// 创建数据库连接。
conn = DriverManager.getConnection(sourceURL, username, passwd);
// 创建表。
statement = conn.createStatement();
String createTableQuery = "CREATE TABLE IF NOT EXISTS mytable (id INT PRIMARY KEY, name VARCHAR(50))";
statement.executeUpdate(createTableQuery);
// 插入数据。
String insertQuery = "INSERT INTO mytable (id, name) VALUES (1, 'John')";
statement.executeUpdate(insertQuery);
// 查询数据。
String selectQuery = "SELECT * FROM mytable ";
ResultSet resultSet = statement.executeQuery(selectQuery);
while (resultSet.next()) {
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
System.out.println("id: " + id + ", name: " + name);
}
// 删除表。
String dropTableQuery = "DROP TABLE IF EXISTS mytable";
statement.executeUpdate(dropTableQuery);
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (statement != null) {
statement.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
在日志文件dbMonitor.log中可以看到输出的连接监控信息,具体包括:
Nov 23, 2023 10:30:54 AM com.huawei.gaussdb.jdbc.qos.DataProcess saveQosResult
FINE: {
"Destination host:port" : "localhost:8000",--服务器的IP和端口。
"Delay" : "1.00 ms",--网络时延。
"Jitter" : "0.04ms",--网络抖动。
"Loss" : "0%",--网络丢包率。
"DownloadSpeed" : "0.395Mbps",--网络下行速率。
"UpLoadSpeed" : "0.498Mbps"--网络下行速率。
}
Nov 23, 2023 10:30:56 AM com.huawei.gaussdb.jdbc.CollectDBData saveCollectResult
FINE: {
"openCount": "1",--应用开启数据库连接的次数。
"closeCount": "1",--应用关闭数据库连接的次数。
"abortedCount": "0",--连接异常断开的次数。
"visitCount": "12",--应用对数据库的访问量。
"cpuUsage": "20.39%",--客户端机器CPU的使用率。
"memoryUsage": "98.32%"--客户端机器内存的使用率。
}
示例5 获取驱动版本示例
Driver.getGSVersion();
浙公网安备 33010602011771号