注意:修正错误:
创建数据库/创建表的表名或字段名为关键字
时应该用 `表名/字段名`
,而不是‘表名/字段名’
不建议写法
| |
| CREATE TABLE NAME( |
| DATA DATETIME, |
| ); |
| |
| CREATE TABLE ‘name’( |
| ‘data’ DATETIME, |
| ); |
推荐使用:
| CREATE TABLE `name`( |
| `data` DATETIME, |
| ); |
1. 创建表
| CREATE TABLE emp ( |
| id INT PRIMARY KEY AUTO_INCREMENT, |
| ‘name’ VARCHAR (32), |
| sex CHAR (1), |
| brithday DATE, |
| entry_data DATETIME, |
| |
| job VARCHAR (32), |
| Salary DOUBLE, |
| ‘resume’ TEXT |
| |
| ) CHARSET utf8 COLLATE utf8_bin ENGINE INNODB; |
| |
| SELECT *FROM emp |
| |
| INSERT INTO emp VALUES(1,'白骨精','女','2001-1-1','2022-2-4 10:32:11','大王',6000,'抓唐僧') |
| |
| |
| INSERT INTO emp(id)VALUES(2); |
| |
| INSERT INTO emp(id,user_name)VALUES(3,'牛魔王'); |
2. 修改表
| # 修改表 |
| |
| ALTER TABLE emp |
| |
| ADD image VARCHAR(32) NOT NULL DEFAULT '' |
| |
| AFTER ‘resume’; |
| |
| |
| ALTER TABLE emp MODIFY job VARCHAR(60); |
| |
| ALTER TABLE emp DROP sex; |
| |
| RENAME TABLE emp TO employee; |
| |
| SELECT *FROM employee; |
| |
| INSERT INTO employee(id)VALUES(2); |
| |
| INSERT INTO employee(id,user_name)VALUES(3,'牛魔王'); |
| |
| DESC employee |
| |
| ALTER TABLE employee CHARSET utf8; |
| |
| |
| |
| ALTER TABLE employee CHANGE |
| ‘name’ |
| user_name |
| VARCHAR(64); |
3. 增删改操作
| #增删改语句和注意事项 |
| SELECT *FROM employee; |
| |
| |
| |
| INSERT INTO employee VALUES(1,'白骨精','女','2001-1-1','2022-2-4 10:32:11','大王',6000,'抓唐僧') |
| |
| |
| INSERT INTO employee(id)VALUES(2); |
| |
| INSERT INTO employee(id,user_name)VALUES(3,'牛魔王'); |
| |
| |
| |
| |
| UPDATE employee SET Salary =5000; |
| |
| UPDATE employee SET Salary =3000 WHERE user_name='牛魔王' ; |
| |
| UPDATE employee SET Salary =Salary+1000 WHERE user_name='白骨精' ; |
| |
| UPDATE employee SET Salary =3000,job='火焰山大王' WHERE user_name='牛魔王' ; |
| |
| |
| |
| |
| DELETE FROM employee WHERE id =2; |
| |
| |
| DROP TABLE employee; |
4. 查询操作
4.1 查询01
| #select查询 |
| |
| CREATE TABLE student ( |
| id INT NOT NULL DEFAULT 1, |
| NAME VARCHAR (20) NOT NULL DEFAULT '', |
| chinese FLOAT NOT NULL DEFAULT 0.0, |
| english FLOAT NOT NULL DEFAULT 0.0, |
| math FLOAT NOT NULL DEFAULT 0.0 |
| ); |
| |
| INSERT INTO student(id,NAME,chinese,english,math)VALUES(1,'韩函',89,78,90); |
| INSERT INTO student(id,NAME,chinese,english,math)VALUES(2,'张飞',67,98,56); |
| INSERT INTO student(id,NAME,chinese,english,math)VALUES(3,'米江',87,78,77); |
| INSERT INTO student(id,NAME,chinese,english,math)VALUES(4,'关羽',88,98,90); |
| INSERT INTO student(id,NAME,chinese,english,math)VALUES(5,'赵云',82,84,67); |
| INSERT INTO student(id,NAME,chinese,english,math)VALUES(6,'欧阳锋',55,85,15); |
| INSERT INTO student(id,NAME,chinese,english,math)VALUES(7,'黄蓉',75,65,30); |
| |
| |
| SELECT * FROM student; |
| |
| SELECT NAME,english FROM student; |
| |
| SELECT DISTINCT * FROM student; |
| SELECT DISTINCT english FROM student; |
| SELECT DISTINCT NAME , english FROM student; |
| |
| |
| SELECT NAME,(chinese+english+math) FROM student; |
| |
| SELECT NAME,(chinese+english+math+10) FROM student; |
| |
| SELECT NAME AS '姓名',(chinese+english+math) AS '总分' FROM student; |
| |
| # where —————————————————————————————————————————————————————————————————————————————————————————————————— |
| |
| |
| SELECT * FROM student WHERE math > 60 AND id > 3; |
| |
| SELECT * FROM student WHERE english > chinese; |
| |
| |
| SELECT * FROM student |
| WHERE (chinese+english+math) > 200 |
| AND math > chinese AND NAME LIKE '韩%'; |
| |
| SELECT * FROM student WHERE english >= 80 AND english <= 90; |
| SELECT * FROM student WHERE english BETWEEN 80 AND 90; |
| |
| SELECT * FROM student WHERE math = 89 OR math = 90 OR math = 77; |
| SELECT * FROM student WHERE math IN (89,90,77); |
| |
| SELECT * FROM student WHERE NAME LIKE '赵%'; |
| |
| SELECT * FROM student WHERE (math - chinese) =1; |
| |
| # order by 排序 —————————————————————————————————————————————————————————————————————————————————————————————————— |
| |
| |
| |
| SELECT math FROM student ORDER BY math ASC; |
| |
| |
| SELECT NAME,(chinese+english+math) AS '总分' FROM student ORDER BY 总分 DESC; |
| |
| # count() 统计 —————————————————————————————————————————————————————————————————————————————————————————————————— |
| |
| |
| |
| SELECT COUNT(*) AS '总人数' FROM student; |
| |
| SELECT COUNT(*) AS '数学成绩大于90分' FROM student WHERE math > 60 ; |
| |
| SELECT COUNT(*) AS '总分大于250分' FROM student WHERE (chinese+english+math) > 250 ; |
| |
| |
| |
| |
| |
| CREATE TABLE count_test ( |
| ‘name’ VARCHAR(20)); |
| |
| INSERT INTO count_test VALUES('jake'); |
| INSERT INTO count_test VALUES('qimu'); |
| INSERT INTO count_test VALUES('marry'); |
| INSERT INTO count_test VALUES(NULL); |
| |
| SELECT * FROM count_test; |
| |
| SELECT COUNT(*) FROM count_test; |
| |
| SELECT COUNT(‘name’) FROM count_test; |
| |
| |
| |
| |
| |
| |
| |
| SELECT SUM(math) FROM student; |
| |
| SELECT SUM(chinese),SUM(english),SUM(math) FROM student; |
| |
| SELECT SUM(chinese+english+math) AS '成绩总和' FROM student; |
| |
| SELECT SUM(chinese)/COUNT(*) FROM student; |
| |
| |
| |
| |
| SELECT AVG(math) FROM student; |
| |
| SELECT AVG(chinese+english+math) FROM student; |
| |
| |
| |
| |
| SELECT |
| MAX(chinese + english + math) AS '最高分', |
| MIN(chinese + english + math) AS '最低分' |
| FROM |
| student; |
| |
| SELECT MAX(math) AS '数学最高分', |
| MIN(math) AS '数学最低分' FROM student; |
4.2 查询02
| |
| CREATE TABLE dept( |
| deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0, |
| dname VARCHAR(20) NOT NULL DEFAULT "", |
| loc VARCHAR(13)NOT NULL DEFAULT "" |
| ); |
| |
| INSERT INTO dept VALUES (10,'ACCOUNTING','NEW YORK'), |
| (20,'RESEARCH','DALLAS'), |
| (30,'SALES','CHICAGO'), |
| (40,'OPERATIONS','BOSTON'); |
| SELECT * FROM dept; |
| |
| |
| CREATE TABLE emp( |
| empno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0, |
| ename VARCHAR(20) NOT NULL DEFAULT "", |
| job VARCHAR(9) NOT NULL DEFAULT "", |
| mgr MEDIUMINT UNSIGNED, |
| hiredate DATE NOT NULL , |
| sal DECIMAL(7,2) NOT NULL, |
| comn DECIMAL(7,2), |
| deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0 |
| ); |
| |
| INSERT INTO emp VALUES(7369,'SMITH','CLERK',7902,'1990-12-17',800.00,NULL,20), |
| (7499,'ALLEN','SALESMAN',7698,'1991-2-20',1600.00,300.00,30), |
| (7521,'WARD','SALESMAN',7698,'1991-2-22',1250.00,500.00,30), |
| (7566,'JONES','MANAGER',7839,'1991-4-2',2975.00,NULL,20), |
| (7654,'MARTIN','SALESMAN',7698,'1991-9-28',1250.00,1400.00,30), |
| (7698,'BLAKE','MANAGER',7839,'1991-5-1',2850.00,NULL,30), |
| (7782,'CLARK','MANAGER',7839,'1991-6-9',2450.00,NULL,10), |
| (7788,'SCOTT','ANALYST',7566,'1997-4-19',3000.00,NULL,20), |
| (7839,'KING','PRESIDENT',NULL,'1991-11-17',5000.00,NULL,10), |
| (7844,'TURNER','SALESMAN',7698,'1991-9-8',1500.00,NULL,30), |
| (7900,'JAMES','CLERK',7698,'1991-12-3',950.00,NULL,30), |
| (7902,'FoRD','ANALYST',7566,'1991-12-3',3000.00,NULL,20), |
| (7934,'MILLER','CLERK',7782,'1992-1-23',1300.00,NULL,10); |
| |
| SELECT * FROM emp; |
| |
| |
| CREATE TABLE salgrade( |
| grade MEDIUMINT UNSIGNED NOT NULL DEFAULT 0, |
| losal DECIMAL (17,2) NOT NULL, |
| hisal DECIMAL(17,2)NOT NULL |
| ); |
| INSERT INTO salgrade VALUES (1,700,1200); |
| INSERT INTO salgrade VALUES (2,1201,1400); |
| INSERT INTO salgrade VALUES (3,1401,2000); |
| INSERT INTO salgrade VALUES (4,2001,3000); |
| INSERT INTO salgrade VALUES (5,3001,9999); |
| |
| |
| SELECT * FROM dept; |
| SELECT * FROM emp; |
| SELECT * FROM salgrade; |
| |
| # group by + having —————————————————————————————————————————————————————————————————————————————————— |
| |
| |
| SELECT AVG(sal) ,MAX(sal),deptno FROM emp GROUP BY deptno; |
| |
| |
| SELECT AVG(sal) ,MIN(sal),deptno,job FROM emp GROUP BY deptno ,job; |
| |
| |
| SELECT AVG(sal) AS sal_avg, deptno FROM emp GROUP BY deptno HAVING sal_avg<2000; |
4.3 查询增强
| SELECT * FROM dept; |
| SELECT * FROM emp; |
| SELECT * FROM salgrade; |
| |
| |
| |
| |
| SELECT * FROM emp WHERE hiredate > '1992-01-01'; |
| |
| |
| |
| |
| SELECT ename,sal FROM emp WHERE ename LIKE 'S%'; |
| |
| |
| SELECT ename,sal FROM emp WHERE ename LIKE '__O%'; |
| |
| |
| SELECT * FROM emp WHERE mgr IS NULL; |
| |
| |
| DESC emp; |
| |
| |
| |
| SELECT * FROM emp ORDER BY sal; |
| |
| |
| SELECT * FROM emp ORDER BY deptno ,sal DESC; |
| |
| # 分页查询 ———————————————————————————————————————————————————————————————————————————————————————————— |
| |
| |
| SELECT * FROM emp ORDER BY empno LIMIT 0 ,3; |
| |
| SELECT * FROM emp ORDER BY empno LIMIT 3 ,3; |
| |
| SELECT * FROM emp ORDER BY empno LIMIT 6 ,3; |
| |
| |
| |
| SELECT COUNT(*),AVG(sal),job FROM emp GROUP BY job; |
| |
| |
| SELECT COUNT(*),COUNT(comn)FROM emp; |
| |
| |
| SELECT COUNT(*),COUNT(IF(comn IS NULL,1,NULL)) FROM emp; |
| SELECT COUNT(*),COUNT(*)-COUNT(comn) FROM emp; |
| |
| |
| SELECT COUNT(DISTINCT mgr)FROM emp; |
| |
| |
| SELECT MAX(sal)-MIN(sal) FROM emp; |
| |
| |
| |
| |
| |
| |
| |
| SELECT AVG(sal) AS avg_sal,deptno FROM emp GROUP BY deptno |
| HAVING avg_sal>1000 |
| ORDER BY avg_sal DESC |
| LIMIT 0,2 ; |
| |
5.多表查询
5.1 笛卡尔集
多表查询的条件不能少于表的个数-1,否则会出现笛卡尔集
| |
| |
| SELECT * FROM emp , dept; |
| |
| |
| |
| SELECT ename ,sal, dname , emp.deptno |
| FROM emp , dept |
| |
| WHERE emp.deptno = dept.deptno; |
| |
| |
| SELECT ename,sal,dname ,emp.deptno FROM emp,dept |
| WHERE emp.deptno = dept.deptno |
| AND emp.deptno=10; |
| |
| |
| SELECT ename ,sal ,grade FROM emp, salgrade |
| WHERE sal BETWEEN losal AND hisal ; |
| |
| |
| SELECT ename ,sal ,dname,emp.deptno |
| FROM emp , dept |
| WHERE emp.deptno = dept.deptno |
| ORDER BY emp.deptno DESC; |
5.2 自连接
自连接特点 :
- 把同一张表当做两张表使用
- 需要给表取别名表名表别名
- 列名不明确,可以指定列的别名列名as列的别名
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| SELECT worker.ename AS '员工',boss.ename AS '上级' |
| FROM emp worker, emp boss |
| WHERE worker.empno = boss.mgr; |
| |
5.3 子查询
子查询是指嵌入在其它sql语句中的selecti语句,也叫嵌套查询
5.3.1 单行子查询
单行子查询是指只返回一行数据的子查询语句
| |
| |
| |
| |
| |
| SELECT deptno FROM emp |
| WHERE ename = 'SMITH'; |
| |
| SELECT * FROM emp |
| WHERE deptno =( |
| |
| SELECT deptno |
| FROM emp |
| WHERE ename = 'SMITH' |
| ); |
| |
5.3.2 多行子查询
多行子查询指返回多行数据的子查询 便用关键子 in
| |
| |
| |
| |
| SELECT DISTINCT job FROM emp |
| WHERE deptno =10; |
| |
| |
| SELECT ename,job,sal,deptno FROM emp |
| WHERE job IN( |
| SELECT DISTINCT job |
| FROM emp |
| WHERE deptno =10 |
| ) AND deptno != 10; |
5.3.3 子查询all和any
| |
| |
| |
| |
| SELECT sal FROM emp WHERE deptno =30; |
| |
| |
| |
| SELECT ename , sal ,deptno FROM emp |
| WHERE sal > ALL( |
| SELECT sal FROM emp WHERE deptno =30 |
| ); |
| |
| SELECT ename , sal ,deptno FROM emp |
| WHERE sal > ( |
| SELECT MAX(sal) FROM emp WHERE deptno =30 |
| ); |
| |
| |
| |
| SELECT ename , sal ,deptno FROM emp |
| WHERE sal > ANY( |
| SELECT sal FROM emp WHERE deptno =30 |
| ); |
| |
| SELECT ename , sal ,deptno FROM emp |
| WHERE sal > ( |
| SELECT MIN(sal) FROM emp WHERE deptno =30 |
| ); |
6. 常用函数
6.1 字符串函数
| # 字符串相关函数 |
| |
| SELECT CHARSET(ename) FROM emp; |
| |
| |
| SELECT CONCAT(ename,' 工作是 ' , job ,' a') FROM emp; |
| |
| |
| |
| SELECT INSERT('aaaaqimu666', 'q') FROM DUAL; |
| |
| |
| SELECT UCASE(ename) FROM emp; |
| |
| |
| SELECT LCASE(ename) FROM emp; |
| |
| |
| SELECT LEFT(ename,2) FROM emp; |
| |
| |
| SELECT RIGHT(ename,2) FROM emp; |
| |
| |
| SELECT LENGTH(ename) FROM emp; |
| SELECT LENGTH('柒木') FROM emp; |
| |
| |
| |
| |
| SELECT ename ,REPLACE(job , 'MANAGER' , '经理') FROM emp ; |
| |
| |
| |
| SELECT STRCMP('qimu1','QIMU') FROM DUAL; |
| |
| |
| |
| |
| |
| SELECT SUBSTRING(ename,1,4) FROM emp; |
| |
| |
| |
| |
| SELECT LTRIM(' 223的观点') FROM DUAL; |
| SELECT RTRIM('223的观点 ') FROM DUAL; |
| SELECT TRIM(' 223的观点 ') FROM DUAL; |
| |
| |
| # 练习:以首字母小写的方式显示所有员工emp表的姓名 (2种) |
| |
| SELECT CONCAT(LCASE(SUBSTRING(ename,1,1)),SUBSTRING(ename,2)) AS '姓名'FROM emp ; |
| |
| SELECT CONCAT(LCASE(LEFT(ename,1)),SUBSTRING(ename,2)) AS '姓名'FROM emp ; |
| |
| SELECT * FROM emp; |
6.2 数学函数
| # 数学函数—————————————————————————————————————————————————————————— |
| |
| |
| |
| SELECT ABS(10) FROM DUAL; |
| |
| |
| SELECT BIN(10) FROM DUAL; |
| |
| |
| SELECT CEILING(1.1) FROM DUAL; |
| |
| |
| SELECT FLOOR(1.1) FROM DUAL; |
| |
| |
| |
| SELECT CONV(8,10,2) FROM DUAL; |
| |
| |
| |
| SELECT FORMAT(1.345211,2) FROM DUAL; |
| |
| |
| SELECT LEAST(11,-1,-9,8) FROM DUAL; |
| |
| |
| SELECT MOD(10,3) FROM DUAL; |
| |
| |
| |
| SELECT RAND() FROM DUAL; |
| |
| SELECT RAND(1) FROM DUAL; |
| SELECT RAND(3) FROM DUAL; |
6.3 时间和日期函数
| #日期时间相关函数 |
| |
| |
| SELECT CURRENT_DATE() FROM DUAL; |
| |
| |
| SELECT CURRENT_TIME() FROM DUAL; |
| |
| |
| SELECT CURRENT_TIMESTAMP() FROM DUAL; |
| |
| |
| SELECT NOW() FROM DUAL; |
| |
| |
| SELECT YEAR(NOW()) FROM DUAL; |
| SELECT MONTH(NOW()) FROM DUAL; |
| SELECT YEAR('2022-9-9') FROM DUAL; |
| |
| |
| |
| |
| SELECT * FROM mes WHERE DATE_ADD(send_time, INTERVAL 10 MINUTE)>=NOW(); |
| |
| |
| |
| SELECT * FROM mes WHERE send_time >= DATE_SUB(NOW(), INTERVAL 10 MINUTE); |
| |
| |
| SELECT DATEDIFF('2011-11-11','1990-01-01') FROM DUAL |
| |
| |
| SELECT UNIX_TIMESTAMP() FROM DUAL; |
| |
| |
| |
| |
| SELECT FROM_UNIXTIME(1662645690,'%Y-%m-%d') FROM DUAL; |
| SELECT FROM_UNIXTIME(1662645690,'%Y-%m-%d %H:%i:%s') FROM DUAL; |
| |
| |
| |
| CREATE TABLE mes( |
| id INT, |
| content VARCHAR(30), |
| send_time DATETIME |
| ); |
| |
| |
| INSERT INTO mes VALUES(1,'北京新闻',CURRENT_TIMESTAMP()); |
| |
| INSERT INTO mes VALUES(2,'广州新闻',NOW()); |
| |
| INSERT INTO mes VALUES(3,'上海新闻','2022-9-19'); |
| |
| INSERT INTO mes VALUES(4,'河南新闻',CURRENT_TIMESTAMP()); |
| |
| |
| # 应用实例: |
| |
| SELECT id,content,DATE(send_time) FROM mes; |
| |
| |
| |
| SELECT * FROM mes WHERE DATE_ADD(send_time, INTERVAL 10 MINUTE)>=NOW(); |
| |
| SELECT * FROM mes WHERE send_time >= DATE_SUB(NOW(), INTERVAL 10 MINUTE); |
| |
| |
| SELECT DATEDIFF('2011-11-11','1990-01-01') FROM DUAL |
| |
| |
| SELECT DATEDIFF(NOW(),'2002-05-14') FROM DUAL; |
| |
| |
| SELECT DATEDIFF(DATE_ADD('2002-05-14', INTERVAL 80 YEAR),NOW()) FROM DUAL; |
| |
| SELECT * FROM mes |
6.4 加密和系统函数
| |
| |
| SELECT USER() FROM DUAL; |
| |
| |
| SELECT DATABASE(); |
| |
| |
| |
| SELECT MD5('qimu')FROM DUAL; |
| |
| |
| CREATE TABLE user_md5 ( |
| `ame` VARCHAR (20) NOT NULL DEFAULT '', |
| pwd CHAR (32) NOT NULL DEFAULT '' |
| ); |
| |
| INSERT INTO user_md5 VALUES ('柒木',MD5('qimu')); |
| |
| |
| SELECT * FROM user_md5 WHERE ame = '柒木' AND pwd =MD5('qimu'); |
| |
| SELECT * FROM user_md5; |
| |
| |
| SELECT PASSWORD('qimu')FROM DUAL; |
6.5 控制流程函数
| |
| SELECT IF(TRUE,'上海','北京') FROM DUAL; |
| |
| |
| SELECT IFNULL(NULL,'柒木') FROM DUAL; |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| SELECT CASE WHEN TRUE THEN 'jake' |
| WHEN TRUE THEN 'tom' |
| ELSE 'mary' END; |
| |
| |
| |
| SELECT ename ,IF(comn IS NULL,0.0,comn) FROM emp; |
| |
| SELECT ename ,IFNULL(comn ,0.0) FROM emp; |
| |
| |
| |
| |
| SELECT ename ,(SELECT CASE |
| WHEN job = 'CLERK' THEN '职员' |
| WHEN job = 'MANGER'THEN '经理' |
| WHEN job = 'SALESMAN' THEN '销售人员' |
| ELSE job END) AS 'job' |
| FROM emp; |
7.子查询临时表
1. 创建测试表
| CREATE TABLE goods( |
| goods_id INT, |
| cat_id INT, |
| goods_sn VARCHAR(10), |
| goods_name VARCHAR(60), |
| goods_price DOUBLE, |
| goods_model INT, |
| goods_weight VARCHAR(20) |
| ); |
2. 添加数据
由于要测试的数据比较多,这边使用IDEA来添加数据
2.1 通过IDEA快速添加数据
- 导入Druid,dbutils ,mysql 三个jar包 ,
![image-20220910214014019]()
- 选中三个jar包右键添加到项目中
![image-20220910214403733]()
![image-20220910215404275]()
- 在src目录下创建druid.properties文件
| driverClassName=com.mysql.jdbc.Driver |
| |
| url=jdbc:mysql://localhost:3306/fuxi?characterEncoding=UTF-8&rewriteBatchedStatements=true |
| username=数据库账号 |
| password=数据库密码 |
| |
| #\u521D\u59CB\u5316\u8FDE\u63A5\u6570 |
| initialPoolSize=10 |
| |
| minIdle=5 |
| |
| maxActive=50 |
| |
| maxWait=5000 |
- 创建JDBCDruid工具类 ,可以频繁使用
| import com.alibaba.druid.pool.DruidDataSourceFactory; |
| |
| |
| import javax.sql.DataSource; |
| import java.io.FileInputStream; |
| import java.sql.Connection; |
| import java.sql.ResultSet; |
| import java.sql.SQLException; |
| |
| import java.sql.Statement; |
| import java.util.Properties; |
| |
| public class JDBCDruid { |
| private static DataSource ds; |
| |
| static { |
| try { |
| Properties properties = new Properties(); |
| properties.load(new FileInputStream("D:\\学习\\qimu\\src\\druid.properties")); |
| ds = DruidDataSourceFactory.createDataSource(properties); |
| } catch (Exception e) { |
| throw new RuntimeException(e); |
| } |
| } |
| |
| public static Connection getConnection() throws Exception { |
| return ds.getConnection(); |
| } |
| |
| public static void close(ResultSet resultSet, Statement statement, Connection connection) { |
| try { |
| if (resultSet != null) { |
| resultSet.close(); |
| } |
| if (statement != null) { |
| statement.close(); |
| } |
| if (connection != null) { |
| connection.close(); |
| } |
| } catch (SQLException e) { |
| throw new RuntimeException(e); |
| } |
| } |
| } |
| |
- 创建Test类用于提交sql语句
| import org.apache.commons.dbutils.QueryRunner; |
| |
| import java.sql.Connection; |
| |
| |
| public class Test { |
| public static void main(String[] args) throws Exception { |
| Connection connection = JDBCDruid.getConnection(); |
| QueryRunner queryRunner = new QueryRunner(); |
| String sql = "INSERT INTO goods VALUES(?,?,?,?,?,?,?)"; |
| int update = 0; |
| for (int i = 0; i < 20; i++) { |
| int a = (int) (Math.random() * 10+1); |
| double b = (int) (Math.random() * 3000+2000); |
| update = queryRunner.update(connection, sql, i,a,"ECS00000"+i,a+a+"手机"+a,b,a+a+a+i+a,a+a+"KG"); |
| } |
| System.out.println(update > 0 ? "执行成功" : "执行失败"); |
| JDBCDruid.close(null, null, connection); |
| } |
| } |
3. 执行SQL查询语句
查询goods表中各个类别中,价格最高的商品 , 并且对商品进行升序排列
| |
| SELECT cat_id,MAX(goods_price) FROM goods GROUP BY cat_id; |
| |
| |
| SELECT goods_id,goods.cat_id,goods_name,goods_price |
| FROM goods ,( |
| |
| SELECT cat_id,MAX(goods_price) AS max_price |
| FROM goods |
| GROUP BY cat_id |
| ) temp |
| |
| |
| WHERE goods.cat_id = temp.cat_id |
| AND goods.goods_price = temp.max_price |
| |
| ORDER BY temp.cat_id; |
| |
| |
| SELECT * FROM goods; |
| |
| DROP TABLE goods; |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步