package com.DBExercise;
import com.UtilClass.DBUtilImp;
import com.UtilClass.DBUtil;
import com.UtilClass.DealSQL;
import java.util.List;
public class Practice1 {
private static String[] getsqls(){
// 2024/03/26 sql练习
// 1. 创建一个员工表(employee),包含以下字段:
// 员工编号(employee_id)| 整数类型,自增,主键
// 员工姓名(eployee_name)| 字符类型,必输
// 年龄(age)|数字类型,需要接受小数;
// 入职日期(entry_date)|日期类型
// 入职部门(department)|字符类型
// 员工状态(status)|状态;在职、已离职、停薪留职、退休;
// 员工编号(employee_id)|整数类型,自增,主键
// 员工姓名(eployee_name)|字符类型,必输
// 年龄(age)|数字类型,需要接受小数;
// 入职日期(entry_date)|日期类型
// 入职部门(department)|字符类型
// 员工状态(status)|状态;在职、已离职、停薪留职、退休;
// 2. 在员工表中插入10条以上的数据,包含不同员工状态、不同部门的员工数据;
// 3. 编写sql语句,把年龄(age)大于等于60的员工状态(status)变更为“退休”;
// 4. 编写查询语句,分别查询出在职、已离职、停薪留职、退休人员数量;
// 5. 用分组查询语句实现第4题;
// 6. 编写查询语句,查询入职日期早于某一日期的员工姓名;
// 7. 查询出重名的员工有哪些,给出重名员工编号;
// 8. 用你所知的任何方法,对员工表填充1万条数据;
String[] sqlStatements = new String[8];
//1.创建一个员工表(employee)
sqlStatements[0] = """
drop table if exists zj_employee ;
create table zj_employee
(
employee_id int AUTO_INCREMENT primary key not null comment '员工编号',
employee_name varchar(20) not null comment '员工姓名',
age float comment '年龄',
entry_date date comment '入职日期',
department varchar(20) comment '入职部门',
status varchar(20) check (status in ('在职', '已离职', '停薪留职', '退休')) comment '员工状态:在职、已离职、停薪留职、退休'
);
""";
//2.在员工表中插入10条以上的数据,包含不同员工状态、不同部门的员工数据:
sqlStatements[1] = """
INSERT INTO zj_employee (employee_name, age, entry_date, department, status)
VALUES ('香馨', 56.1, '2022-01-01', 'Dept_A', '在职');
INSERT INTO zj_employee (employee_name, age, entry_date, department, status)
VALUES ('向卉', 72.7, '2021-07-15', 'Dept_B', '已离职');
INSERT INTO zj_employee (employee_name, age, entry_date, department, status)
VALUES ('向彤', 24.5, '2020-12-25', 'Dept_C', '已离职');
INSERT INTO zj_employee (employee_name, age, entry_date, department, status)
VALUES ('向雪', 35.6, '2020-12-25', 'Dept_C', '停薪留职');
INSERT INTO zj_employee (employee_name, age, entry_date, department, status)
VALUES ('晓燕', 39.5, '2020-12-25', 'Dept_C', '在职');
INSERT INTO zj_employee (employee_name, age, entry_date, department, status)
VALUES ('晓莉', 75.4, '2020-12-25', 'Dept_C', '已离职');
INSERT INTO zj_employee (employee_name, age, entry_date, department, status)
VALUES ('晓凡', 48.2, '2020-12-25', 'Dept_C', '在职');
""";
//3.编写sql语句,把年龄(age)大于等于60的员工状态(status)变更为“退休”;
sqlStatements[2] = """
update zj_employee
set status ="退休"
where age >= 60;
""";
//4.编写查询语句,分别查询出在职、已离职、停薪留职、退休人员数量;
sqlStatements[3] = """
select count(*) as "在职人数"
from zj_employee
where status = "在职";
select count(*) as "已离职人数"
from zj_employee
where status = "已离职";
select count(*) as "停薪留职人数"
from zj_employee
where status = "停薪留职";
select count(*) as "退休人数"
from zj_employee
where status = "退休";
""";
//5.用分组查询语句实现第4题;
sqlStatements[4] = """
select status, COUNT(*) as cnt
from zj_employee
Group by status;
""";
//6.编写查询语句,查询入职日期早于某一日期的员工姓名;
sqlStatements[5] = """
select employee_name
from zj_employee
where entry_date > "2020-12-25";
""";
//7.查询出重名的员工有哪些,给出重名员工编号;
sqlStatements[6] = """
select employee_id, employee_name from zj_employee
where employee_name in\s
(select employee_name from zj_employee\s
group by employee_name having count(employee_name) > 1);
""";
//8.用你所知的任何方法,对员工表填充1万条数据;
sqlStatements[7] = """
-- 清空员工表
truncate table zj_employee;
-- 如果已存在,删除populateEmployees存储过程
DROP PROCEDURE IF EXISTS populateEmployees;
-- 定义存储过程,用于批量插入员工数据
DELIMITER $$
CREATE PROCEDURE populateEmployees(IN total INT)
BEGIN
-- 定义循环变量
DECLARE i INT DEFAULT 1;
-- 使用循环批量插入数据
WHILE i <= total DO
INSERT INTO zj_employee (
employee_id, employee_name, age,entry_date, Department,status)
-- 生成随机员工信息
VALUES (i+60,
concat(substring('赵钱孙李周吴郑王冯陈诸卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金魏陶姜戚谢邹喻柏水窦章云苏潘葛奚范彭郎鲁韦昌马苗凤花方俞任袁柳酆鲍史唐费廉岑薛雷贺倪汤滕殷罗毕郝邬安常乐于时傅皮齐康伍余元卜顾孟平黄和穆萧尹姚邵堪汪祁毛禹狄米贝明臧计伏成戴谈宋茅庞熊纪舒屈项祝董粱杜阮蓝闵席季麻强贾路娄危江童颜郭梅盛林刁钟徐邱骆高夏蔡田樊胡凌霍虞万支柯咎管卢莫经房裘干解应宗丁宣贲邓郁单杭洪包诸左石崔吉钮龚'
,floor(1+190*rand()),1),
substring('明国华建文平志伟东海强晓生光林小民永杰 军金健一忠洪江福祥中正振勇耀春大宁亮宇兴宝少剑云学仁涛瑞飞鹏安亚泽世汉达卫利胜敏群波成荣新峰刚家龙德庆斌辉良玉俊立浩天宏子松克清长嘉红山贤阳乐锋智青跃元武广思雄锦威启昌铭维义宗英凯鸿
最近练习的源码包,更新ODBC数据库操作
需积分: 0 107 浏览量
更新于2024-04-06
收藏 18KB 7Z 举报
ODBC(Open Database Connectivity)是微软推出的一种数据库访问标准,它提供了一种统一的方式来访问不同类型的数据库系统。这个源码包显然包含了一些用于练习和学习ODBC数据库操作的代码。在编程领域,ODBC接口允许程序员编写一次代码,就可以在支持ODBC的不同数据库上运行,这大大提高了代码的可移植性。
ODBC主要由三个组件构成:驱动程序管理器(Driver Manager)、数据库驱动程序(Database Driver)和应用程序(Application)。驱动程序管理器是ODBC的核心,它负责管理和协调应用程序与数据库驱动程序之间的通信。数据库驱动程序是特定于数据库的,它实现了ODBC API,使得应用程序能够与各种数据库进行交互。应用程序通过调用ODBC函数来执行SQL查询和其他数据库操作。
在这个源码包中,可能包括了以下几个关键知识点:
1. **ODBC连接**:源码可能会展示如何使用`SQLConnect`或`SQLDriverConnect`函数建立到数据库的连接,这些函数需要数据库的DSN(Data Source Name)、用户名和密码等信息。
2. **SQL语句的执行**:通过`SQLExecDirect`或`SQLPrepare`及`SQLExecute`函数,源码可能展示了如何执行预编译或直接的SQL语句,如SELECT、INSERT、UPDATE和DELETE。
3. **结果集处理**:一旦SQL查询执行成功,源码可能会使用`SQLFetch`或`SQLFetchScroll`来获取结果集中的行,并使用`SQLGetData`来获取列数据。
4. **错误处理**:在进行数据库操作时,错误处理是必不可少的。源码可能包含了对`SQLGetDiagRec`和`SQLGetDiagField`的使用,以获取并打印出错误信息。
5. **事务处理**:如果源码涉及到复杂的操作,可能会包含对`SQLEndTran`的调用,以提交或回滚事务。
6. **游标和定位**:ODBC支持游标,源码可能有使用`SQLSetCursorName`和`SQLSetPos`的例子,以便于在结果集中前后移动和更新记录。
7. **参数化查询**:为了提高代码的安全性和效率,可能有使用`SQLPrepare`配合`SQLBindParameter`进行参数化查询的示例,防止SQL注入攻击。
8. **连接池**:在高并发环境下,连接池可以优化性能。源码可能包含如何创建和管理ODBC连接池的实现。
9. **环境、连接和描述符的初始化与释放**:`SQLAllocHandle`和`SQLFreeHandle`用于分配和释放ODBC对象,确保资源的有效管理。
通过研究这个源码包,你可以深入理解ODBC的工作原理,以及如何在实际项目中使用它来与数据库进行交互。对于软件开发人员来说,掌握ODBC是提升数据库编程能力的重要步骤,特别是对于需要跨平台或者多数据库支持的项目。
qq_1694565166
- 粉丝: 135
- 资源: 2
最新资源
- 基于CNN卷积神经网络的网络入侵检测python源码+全部数据(高分毕业设计)
- 2-菜单栏系统状态监视工具Stats v2.11.9,支持监测内存、硬盘、网络等状态
- 火焰烟雾检测测试视频,fire-detect-video
- SAM实验.........
- boost序列化x86和x64兼容
- 脉振方波高频注入代码+增强型滑膜esmo代码,永磁同步电机高频注入程序 资料为C代码一份,大厂代码,可运行,经典流传; 配套一篇代码对应的说明文档,详细算法说明; 脉振方波注入方法相对于脉振正弦信号注
- SQLite数据库浏览器可视化工具-v3.13.1-win32
- 2024年福建省村级(居委会)行政区划shp数据集
- 基于pytorch实现minist手写数字识别源码+数据集(高分项目).zip
- 数字图像处理系统的Python实现:集成功能模块及人脸识别
- 编程直接实现HTML网页燃放烟花效果的代码
- 基于机器学习CNN卷积神经网络的网络入侵检测python源码+文档说明+全部数据
- 基于深度学习的VVC帧内编码中快速QTMT编码单元划分方法
- 15款L1218L1258L1259L3218L3219L3251L3253L3255L3256L3258L3266L3267L3268L3269L5298清零软 图解
- comsol枝晶生长 模型包括:典型,形状成核,随机成核,均匀沉积,雪花晶形成过程 适用于电池,电化学沉积,催化的模拟学习
- 基于javaweb实现的SQL基于JSP的学生信息管理系统源码+数据库.zip