实验三 嵌入式SQL与数据库编程
一、实验目的
1.理解嵌入式SQL与交互式SQL的区别;
2.掌握数据库连接技术;
3.掌握基于特定宿主语言的数据库连接与访问;
4.能够基于具体功能需求,在特定DBMS上实现简易应用系统开发。
二、实验要求
1.选择宿主语言进行数据库连接的实现;
2.根据具体的功能设计进行嵌入式SQL的编程设计与实现;
3.基于特定的功能设计存储过程并实现调用。
三、实验步骤
1.基于实验一和实验二的数据库,选择宿主语言(Java或python均可),采用JDBC实现数据库连接
2.设计一个贴近具体需求的功能并实现之;
3.基于特定功能设计并实现一个存储过程。
四、实验报告内容
4.1.数据库连接技术简介
简要介绍实验所用的数据库连接技术
本实验使用的是java-JDBC连接的openGauss数据库,使用的驱动jar包是postgresql jdbc
driver
jdbc介绍
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数 据库开发人员能够编写数据库应用程序,同时,JDBC也是个商标名。
4.2.数据库连接环境配置
描述数据库连接的环境配置
4.2.1前期准备:
4.2.1.1.VMware workstation中配置了OpenEuler系统,并且在该系统上成功部署了OpenGauss2.0.0数据库。
4.2.1.2.完成远程连接部署(通过Data Studio工具能成功连接到本地opengauss数据库)
4.2.1.3.配置java环境为jdk1.8版本,具体请参考jdk配置。
4.2.1.4下载opengauss2.0.0-openEuler系统x86_64版本的JDBC驱动安装包,下载完成后解压,找到postgresql.jar文件,将该文件放置到java项目文件夹下。
4.2.2连接步骤
4.2.2.1在eclipse中新建一个java项目
填写项目名称,点击下一步。
直接点击完成即可。提示是否需要创建模块名称,点击创建。
创建成功,左侧菜单栏已经出现项目OpenGauss1
4.2.2.2.新建一个包org.opengauss。
4.2.2.3.在src中新建一个类。
填写类名(ConnectionOpengauss),选择创建主方法,点击完成。
4.2.2.4.首先在module的类中添加requires java.sql;
4.2.2.5.解压下载的JDBC包,将里面的postgresql.jar文件放到和ConnectOpengauss.java文件同一个文件夹下。
4.2.2.6.将jar包加入构建路径。右键OpenGauss项目-构建路径-配置构建路径。
选中我们刚刚添加的postgresql.jar文件
选择应用并关闭。
4.2.3.嵌入式SQL的实现过程
给出宿主语言中连接数据库实现过程,及嵌入式SQL的实现过程,包括数据库的增删查改操作,和存储过程的设计实现与调用。
4.2.3.1.该类中的内容如下:需要根据实际情况修改包名、类名、数据库ip地址、数据库名、用户名、用户密码。
package org.opengauss;
import java.sql.*;
public class ConnectionOpengauss {
static final String JDBC_DRIVER = "org.postgresql.Driver";
static final String DB_URL = "jdbc:postgresql://192.168.56.105:26000/postgres?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";
// 数据库的用户名与密码,需要根据自己的设置
static final String USER = "jerry";
static final String PASS = "qaz123QQ";
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
try{
// 注册 JDBC 驱动
Class.forName(JDBC_DRIVER);
// 打开链接
System.out.println("连接数据库...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
}
// 完成后关闭rs对象
} catch (SQLException se) {
// 处理 JDBC 错误
se.printStackTrace();
} catch (Exception e) {
// 处理 Class.forName 错误
e.printStackTrace();
} finally {
// 关闭资源
try {
if(stmt!=null) stmt.close();
} catch (SQLException se2) {
} // 什么都不做
try {
if(conn!=null) conn.close();
} catch (SQLException se) {
se.printStackTrace();
}
}
System.out.println("Goodbye!");
}
}
运行成功
4.2.3.2.数据库的增删查改操作
- 增加一个sname为张三的员工
// 执行增加
System.out.println("实例化Statement对象...");
stmt = conn.createStatement();
String insersql = "INSERT INTO sy2.yuangong (sno, dno, sname, sbirth, ssex, skey) "
+ "VALUES (?, ?, ?, ?, ?, ?)";
PreparedStatement pstmt = conn.prepareStatement(insersql);
String snoValue = "123";
String dnoValue = "0001";
String snameValue = "张三";
String sbirthValue = "1990.01.01";
String ssexValue = "男";
String skeyValue = "null";
pstmt.setString(1, snoValue);
pstmt.setString(2, dnoValue);
pstmt.setString(3, snameValue);
pstmt.setString(4, sbirthValue);
pstmt.setString(5, ssexValue);
pstmt.setString(6, skeyValue);
int rowsAffected = pstmt.executeUpdate();
System.out.println(rowsAffected + " 行受影响");
pstmt.close();
增加结果
- 更新张三的性别为女
//执行更新
System.out.println("实例化PreparedStatement对象...");
String sql = "UPDATE sy2.yuangong SET ssex=? WHERE sno=?";
PreparedStatement pstmt = conn.prepareStatement(sql);
// 设置参数值
pstmt.setString(1, "女");
pstmt.setString(2, "123");
// 执行更新操作
int rows = pstmt.executeUpdate();
System.out.println("更新了 " + rows + " 行数据");
更新结果
- 查询姓郑的员工
// 执行查询
System.out.println("实例化Statement对象...");
stmt = conn.createStatement();
String sql;
sql = "SELECT sno, sname FROM sy2.yuangong where sname like '郑%';";
ResultSet rs = stmt.executeQuery(sql);
// 展开结果集数据库
while (rs.next()) {
// 通过字段检索
int sno = rs.getInt("sno");
String sname = rs.getString("sname");
// 输出数据
System.out.print("工号: " + sno);
System.out.print(", 姓名: " + sname);
}
// 完成后关闭rs对象
rs.close();
stmt.close();
conn.close();
查询结果
- 删出sno为123的员工
//执行删除
System.out.println("实例化Statement对象...");
stmt = conn.createStatement();
String deleteSql = "DELETE FROM sy2.yuangong WHERE sno=123";
stmt.executeUpdate(deleteSql);
删除结果
4.2.3.3存储过程的设计实现与调用
4.4问题分析
- 问题一:
一开始作连接的时候,由于在做实验2的时候,没有新建角色,而是新建了名为sy2的模式,所以建立连接的时候,使用sy2的时候连接失败,要使用名为jerry的角色。
4.5实验感想
使用JDBC连接OpenGauss数据库进行增删改实验可以帮助我们更好地理解和掌握数据库操作的基本原理和方法。通过这次实验,我明白了使用JDBC连接数据库,需要提供数据库的URL、用户名和密码等信息。也学会了在Java编译环境中使用SQL语句,在不断调节的过程中实现增删查改等操作。总的来说,通过使用JDBC连接OpenGauss数据库进行增删改实验,我们可以更好地理解数据库工作原理和操作方式,并且提高我们的编程技能和数据库管理能力。尽管数据库课程已经结束了,但我们对数据库的学习才刚刚开始,今后我会更加努力学习相关知识,不断尝试,为未来的工作打下坚实的基础。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步