公司网站建设沈阳,长春网站优化教程,手机建站系统源码,网站制度建设一、概述
1. 案例介绍
本案例通过本地IDEA连接华为云开发环境#xff0c;通过本地的IDEA进行远程编程并连接GaussDB数据库来构建抽奖小程序应用。
GaussDB 是华为自研的企业级分布式关系型数据库#xff0c;具备强大的分布式事务能力、同城多可用区部署、数据零丢失保障、…一、概述1. 案例介绍本案例通过本地IDEA连接华为云开发环境通过本地的IDEA进行远程编程并连接GaussDB数据库来构建抽奖小程序应用。GaussDB 是华为自研的企业级分布式关系型数据库具备强大的分布式事务能力、同城多可用区部署、数据零丢失保障、PB级存储扩展等特性。它支持高可用、高安全、弹性伸缩、一键部署、备份恢复和监控告警适用于对性能、可靠性和扩展性有高要求的企业级应用场景。华为开发者空间是为全球开发者打造的专属开发者空间致力于为每位开发者提供一台云主机、一套开发工具和云上存储空间汇聚昇腾、鸿蒙、鲲鹏、GaussDB、欧拉等华为各项根技术的开发工具资源并提供配套案例指导开发者从开发编码到应用调测基于华为根技术生态高效便捷的知识学习、技术体验、应用创新。2. 适用对象企业个人开发者高校学生3. 案例时间本案例总时长预计60分钟。4. 案例流程说明用户进入华为开发者空间云开发环境通过CLI工具连接云开发环境获取GaussDB实例并配置编写应用代码并连接数据库构建抽奖应用程序。5. 资源总览本案例预计花费0.8元。资源名称规格单价元时长分钟华为开发者空间 - 云开发环境鲲鹏通用计算增强型 kc1 | 2vCPUs | 4G | HCE免费60GaussDBgaussdb.opengauss.xe.dn.s6.xlarge.x864.ha|4 vCPUs | 16 GB免费60虚拟私有云VPC标配免费60弹性公网IP按流量计费 5Mbit/s0.8元/GB60二、配置云开发环境本案例中使用华为云《开发者空间云开发环境使用指导》的“三、PC端创建和管理云开发环境”章节完成cli工具安装、环境配置、创建云开发环境、开机、建立隧道连接的功能。三、IntelliJ IDEA直连云开发环境参考《本地IntelliJ IDEA 基于华为开发者空间云开发环境的应用开发》的“三、本地IDE直连云开发环境完成上传下载”中的“1.下载IntelliJ IDEA并连接远程开发环境”章节完成IntelliJ IDEA直连云开发环境。四、获取GaussDB数据库实例并配置4.1 获取GaussDB数据库实例默认情况下GaussDB数据库实例已开通如未开通可参考购买GaussDB实例在GaussDB数据库实例的基础信息页修改安全组开放22端口与8000端口新建数据库数据库名称PrizeDrawDB其他参数默认即可4.2 修改GaussDB数据库密码验证方式进入GaussDB数据库控制台进入GaussDB实例点击参数管理修改GaussDB的密码验证参数 password_encryption_type 为 1并点击保存生效。在弹出窗口输入YES点击确定按钮五、使用云开发环境完成抽奖小应用开发5.1 新建远程项目项目名称PrizeDrawAppLocation/home/developerBuild systemMavenJDK默认即可。java项目创建完成后则可以看到相应的代码目录5.2 添加postgresql依赖包在pom.xml中添加依赖dependencies dependency groupIdorg.postgresql/groupId artifactIdpostgresql/artifactId version42.6.0/version !-- 使用适合您环境的版本 -- /dependency /dependencies点击Sync All Maven Projects同步Maven项目下载依赖5.3 编写项目代码替换Main.java中的代码Main.java完整代码package org.example; import java.sql.*; import java.util.Random; import java.util.Scanner; public class Main { // 数据库连接信息 - 请替换为您的实际信息 private static final String JDBC_URL jdbc:postgresql://xx.xx.xx.xx:8000/xxxx; private static final String USERNAME root; private static final String PASSWORD xxxx; // 奖品配置 private static final String[] PRIZES { 谢谢参与, 优惠券10元, 优惠券50元, 华为云代金券100元, 华为手机, 华为笔记本电脑 }; // 奖品概率总和100 private static final int[] PRIZE_PROBABILITY {40, 30, 15, 10, 4, 1}; private static Connection connection; private static Scanner scanner new Scanner(System.in); private static Random random new Random(); public static void main(String[] args) { try { // 初始化数据库 initDatabase(); System.out.println( 欢迎来到华为云幸运抽奖系统 ); while (true) { System.out.println(\n请选择操作:); System.out.println(1. 用户注册); System.out.println(2. 开始抽奖); System.out.println(3. 查看我的中奖记录); System.out.println(4. 退出); System.out.print(请输入选择: ); int choice scanner.nextInt(); scanner.nextLine(); // 消耗换行符 switch (choice) { case 1: registerUser(); break; case 2: drawPrize(); break; case 3: viewRecords(); break; case 4: System.out.println(感谢使用再见); return; default: System.out.println(无效的选择请重新输入); } } } catch (Exception e) { e.printStackTrace(); } finally { closeResources(); } } // 初始化数据库 private static void initDatabase() throws Exception { Class.forName(org.postgresql.Driver); connection DriverManager.getConnection(JDBC_URL, USERNAME, PASSWORD); // 创建用户表 String createUserTable CREATE TABLE IF NOT EXISTS users ( id SERIAL PRIMARY KEY, username VARCHAR(50) UNIQUE NOT NULL, phone VARCHAR(20) UNIQUE NOT NULL, register_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); // 创建抽奖记录表 String createRecordTable CREATE TABLE IF NOT EXISTS prize_records ( id SERIAL PRIMARY KEY, user_id INTEGER REFERENCES users(id), prize_name VARCHAR(100) NOT NULL, draw_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); try (Statement stmt connection.createStatement()) { stmt.execute(createUserTable); stmt.execute(createRecordTable); System.out.println(数据库初始化完成); } } // 用户注册 private static void registerUser() throws SQLException { System.out.println(\n 用户注册 ); System.out.print(请输入用户名: ); String username scanner.nextLine(); System.out.print(请输入手机号: ); String phone scanner.nextLine(); String sql INSERT INTO users (username, phone) VALUES (?, ?); try (PreparedStatement pstmt connection.prepareStatement(sql)) { pstmt.setString(1, username); pstmt.setString(2, phone); pstmt.executeUpdate(); System.out.println(注册成功); } catch (SQLException e) { System.out.println(注册失败: e.getMessage()); } } // 抽奖 private static void drawPrize() throws SQLException { System.out.println(\n 幸运抽奖 ); System.out.print(请输入您的手机号: ); String phone scanner.nextLine(); // 查询用户ID Integer userId getUserIdByPhone(phone); if (userId null) { System.out.println(未找到该用户请先注册); return; } // 随机抽奖 int prizeIndex getRandomPrizeIndex(); String prize PRIZES[prizeIndex]; // 记录中奖信息 String sql INSERT INTO prize_records (user_id, prize_name) VALUES (?, ?); try (PreparedStatement pstmt connection.prepareStatement(sql)) { pstmt.setInt(1, userId); pstmt.setString(2, prize); pstmt.executeUpdate(); } System.out.println(\n恭喜您); System.out.println(您获得了: prize); System.out.println(奖品已记录到您的账户); } // 根据概率随机获取奖品索引 private static int getRandomPrizeIndex() { int randomNum random.nextInt(100) 1; int range 0; for (int i 0; i PRIZE_PROBABILITY.length; i) { range PRIZE_PROBABILITY[i]; if (randomNum range) { return i; } } return 0; // 默认返回谢谢参与 } // 根据手机号获取用户ID private static Integer getUserIdByPhone(String phone) throws SQLException { String sql SELECT id FROM users WHERE phone ?; try (PreparedStatement pstmt connection.prepareStatement(sql)) { pstmt.setString(1, phone); ResultSet rs pstmt.executeQuery(); if (rs.next()) { return rs.getInt(id); } } return null; } // 查看中奖记录 private static void viewRecords() throws SQLException { System.out.println(\n 我的中奖记录 ); System.out.print(请输入您的手机号: ); String phone scanner.nextLine(); Integer userId getUserIdByPhone(phone); if (userId null) { System.out.println(未找到该用户请先注册); return; } String sql SELECT prize_name, draw_time FROM prize_records WHERE user_id ? ORDER BY draw_time DESC; try (PreparedStatement pstmt connection.prepareStatement(sql)) { pstmt.setInt(1, userId); ResultSet rs pstmt.executeQuery(); System.out.println(\n中奖记录:); System.out.println(-----------------------------); boolean hasRecord false; while (rs.next()) { hasRecord true; String prize rs.getString(prize_name); Timestamp time rs.getTimestamp(draw_time); System.out.printf(奖品: %-15s 时间: %tF %tT%n, prize, time, time); } if (!hasRecord) { System.out.println(暂无中奖记录快去抽奖吧); } System.out.println(-----------------------------); } } // 关闭资源 private static void closeResources() { try { if (connection ! null) connection.close(); if (scanner ! null) scanner.close(); } catch (SQLException e) { e.printStackTrace(); } } }注意JDBC_URL中的xx.xx.xx.xx要替换成数据库绑定的弹性公网IPxxxx要替换成数据库名称PASSWORD中的xxxx要替换成登录数据库的密码。5.4 运行代码运行代码后先选择用户注册再选择开始抽奖若出现以下错误Invalid or unsupported by client SCRAM mechanisms则需要重置密码重置密码后回到数据库参数管理界面点击高风险参数输入password_lock_time搜索将password_lock_time的值改为0并保存。即可重新登录。注意代码中需要重新配置新密码。代码运行成功之后我们在数据库SQL查询页面可以看到代码中创建的用户表和抽奖记录表至此就完成了从云开发环境到GaussDB创建应用连接的全部流程了。