JDBC与MySQL练习

  • 1、创建数据库test01_bookstore
  • 2、创建如下表格
    • (1)图书表books
    • (2)用户表users
    • (3)订单表orders
    • (4)订单明细表order_items
  • 3、使用sql语句在命令行或SQLyog中添加一些模拟数据
    • 表books:
    • 表users:
    • 表orders:
    • 表order_items:
  • 4、使用JDBC实现往用户表中添加1个用户,注意密码存储使用mysql的SHA()函数进行加密
  • jdbc1.properties文件位于src目录下
  • 5、使用JDBC实现往图书表中添加1本图书
  • 6、从键盘输入用户名和密码,模拟登录,使用JDBC实现验证用户名和密码是否正确,如果正确,显示登录成功,否则显示用户名或密码错误
  • 9、使用JDBC实现修改库存量小于10本的图书的库存量为100
  • 10、从键盘输入用户名,实现查询该用户的订单和订单明细
  • 11、使用JDBC实现删除订单“15275760194821”的相关信息,注意涉及到两张表

申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址
全文共计11577字,阅读大概需要5分钟
欢迎关注我的个人公众号:不懂开发的程序猿

以下操作环境基于MySQL8.0.27,JUint4单元测试

解决IDEA中无法在JUint单元测试运行时,从键盘读取字符的方法:找到【Help】–> 【Edit Custom VM Options】

再添加如下语句,重启IDEA就生效:

-Deditable.java.test.console=true

1、创建数据库test01_bookstore

2、创建如下表格

(1)图书表books

(2)用户表users

(3)订单表orders

(4)订单明细表order_items

3、使用sql语句在命令行或SQLyog中添加一些模拟数据

表books:

表users:

表orders:

表order_items:

#创建数据库
CREATE DATABASE `test01_bookstore` CHARACTER SET utf8;USE `test01_bookstore`;#创建表
CREATE TABLE `books` (`id` INT(11) PRIMARY KEY NOT NULL AUTO_INCREMENT,`title` VARCHAR(100) NOT NULL,`author` VARCHAR(100) NOT NULL,`price` DOUBLE(11,2) NOT NULL,`sales` INT(11) NOT NULL,`stock` INT(11) NOT NULL,`img_path` VARCHAR(100) NOT NULL
) ENGINE=INNODB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8;/*Data for the table `books` */
INSERT  INTO `books`(`id`,`title`,`author`,`price`,`sales`,`stock`,`img_path`) VALUES
(1,'解忧杂货店','东野圭吾',27.20,102,98,'upload/books/解忧杂货店.jpg'),
(2,'边城','沈从文',23.00,102,98,'upload/books/边城.jpg'),
(3,'中国哲学史','冯友兰',44.50,101,99,'upload/books/中国哲学史.jpg'),
(4,'忽然七日',' 劳伦',19.33,101,99,'upload/books/忽然七日.jpg'),
(5,'苏东坡传','林语堂',19.30,100,100,'upload/books/苏东坡传.jpg'),
(6,'百年孤独','马尔克斯',29.50,100,100,'upload/books/百年孤独.jpg'),
(7,'扶桑','严歌苓',19.80,100,100,'upload/books/扶桑.jpg'),
(8,'给孩子的诗','北岛',22.20,100,100,'upload/books/给孩子的诗.jpg'),
(9,'为奴十二年','所罗门',16.50,100,100,'upload/books/为奴十二年.jpg'),
(10,'平凡的世界','路遥',55.00,100,100,'upload/books/平凡的世界.jpg'),
(11,'悟空传','今何在',14.00,100,100,'upload/books/悟空传.jpg'),
(12,'硬派健身','斌卡',31.20,100,100,'upload/books/硬派健身.jpg'),
(13,'从晚清到民国','唐德刚',39.90,100,100,'upload/books/从晚清到民国.jpg'),
(14,'三体','刘慈欣',56.50,100,100,'upload/books/三体.jpg'),
(15,'看见','柴静',19.50,100,100,'upload/books/看见.jpg'),
(16,'活着','余华',11.00,100,100,'upload/books/活着.jpg'),
(17,'小王子','安托万',19.20,100,100,'upload/books/小王子.jpg'),
(18,'我们仨','杨绛',11.30,100,100,'upload/books/我们仨.jpg'),
(19,'生命不息,折腾不止','罗永浩',25.20,100,100,'upload/books/生命不息.jpg'),
(20,'皮囊','蔡崇达',23.90,100,100,'upload/books/皮囊.jpg'),
(21,'恰到好处的幸福','毕淑敏',16.40,100,100,'upload/books/恰到好处的幸福.jpg'),
(22,'大数据预测','埃里克',37.20,100,100,'upload/books/大数据预测.jpg'),
(23,'人月神话','布鲁克斯',55.90,100,100,'upload/books/人月神话.jpg'),
(24,'C语言入门经典','霍尔顿',45.00,100,100,'upload/books/C语言入门经典.jpg'),
(25,'数学之美','吴军',29.90,100,100,'upload/books/数学之美.jpg'),
(26,'Java编程思想','埃史尔',70.50,100,100,'upload/books/Java编程思想.jpg'),
(27,'设计模式之禅','秦小波',20.20,100,100,'upload/books/设计模式之禅.jpg'),
(28,'图解机器学习','杉山将',33.80,100,100,'upload/books/图解机器学习.jpg'),
(29,'艾伦图灵传','安德鲁',47.20,100,100,'upload/books/艾伦图灵传.jpg'),
(30,'教父','马里奥普佐',29.00,100,100,'upload/books/教父.jpg');CREATE TABLE `users` (`id` INT(11) PRIMARY KEY NOT NULL AUTO_INCREMENT,`username` VARCHAR(100) UNIQUE KEY NOT NULL,`password` VARCHAR(100) NOT NULL,`email` VARCHAR(100) DEFAULT NULL
) ENGINE=INNODB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;/*Data for the table `users` */
INSERT  INTO `users`(`id`,`username`,`password`,`email`) VALUES(1,'admin1',SHA('123456'),'admin1@gmail.com'),(2,'admin2',SHA('123456'),'admin2@gmail.com'),(3,'admin3',SHA('123456'),'admin3@gmail.com'),(4,'chai',SHA('123456'),'chai@gmail.com');CREATE TABLE `orders` (`id` VARCHAR(100) PRIMARY KEY NOT NULL,`order_time` DATETIME NOT NULL,`total_count` INT(11) NOT NULL,`total_amount` DOUBLE(11,2) NOT NULL,`state` INT(11) NOT NULL,`user_id` INT(11) NOT NULL,CONSTRAINT `orders_users_id_fk` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;/*Data for the table `orders` */
INSERT  INTO `orders`(`id`,`order_time`,`total_count`,`total_amount`,`state`,`user_id`) VALUES
('15275760194821','2018-05-29 14:40:19',4,114.03,2,1),
('15294258455691','2018-06-20 00:30:45',2,50.20,0,1);CREATE TABLE `order_items` (`id` INT(11) PRIMARY KEY NOT NULL AUTO_INCREMENT,`count` INT(11) NOT NULL,`amount` DOUBLE(11,2) NOT NULL,`title` VARCHAR(100) NOT NULL,`author` VARCHAR(100) NOT NULL,`price` DOUBLE(11,2) NOT NULL,`img_path` VARCHAR(100) NOT NULL,`order_id` VARCHAR(100) NOT NULL,CONSTRAINT `order_items_orders_id_fk` FOREIGN KEY (`order_id`) REFERENCES `orders` (`id`) ON DELETE CASCADE
) ENGINE=INNODB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;/*Data for the table `order_items` */
INSERT  INTO `order_items`
(`id`,`count`,`amount`,`title`,`author`,`price`,`img_path`,`order_id`) VALUES
(1,1,27.20,'解忧杂货店','东野圭吾',27.20,'static/img/default.jpg','15275760194821'),
(2,1,23.00,'边城','沈从文',23.00,'static/img/default.jpg','15275760194821'),
(3,1,44.50,'中国哲学史','冯友兰',44.50,'static/img/default.jpg','15275760194821'),
(4,1,19.33,'忽然七日',' 劳伦',19.33,'static/img/default.jpg','15275760194821'),
(5,1,27.20,'解忧杂货店','东野圭吾',27.20,'static/img/default.jpg','15294258455691'),
(6,1,23.00,'边城','沈从文',23.00,'static/img/default.jpg','15294258455691');

4、使用JDBC实现往用户表中添加1个用户,注意密码存储使用mysql的SHA()函数进行加密

jdbc1.properties文件位于src目录下

user=root
password=root
url=jdbc:mysql://localhost:3306/test01_bookstore
driverClass=com.mysql.jdbc.Driver
    //TODO 使用JDBC实现往用户表中添加1个用户,注意密码存储使用mysql的SHA()函数进行加密@Testpublic void test1() throws Exception {Scanner s = new Scanner(System.in);System.out.println("username:");String username = s.next();System.out.println("password:");String pwd = s.next();System.out.println("email:");String email = s.next();// 1.读取配置文件中的4个基本信息InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc1.properties");Properties pros = new Properties();pros.load(is);String user = pros.getProperty("user");String password = pros.getProperty("password");String url = pros.getProperty("url");String driverClass = pros.getProperty("driverClass");// 2.加载驱动Class.forName(driverClass);// 3.获取连接Connection conn = DriverManager.getConnection(url, user, password);String sql = "insert into users(id,username,password,email) values(null,?,SHA(?),?)";//4.预编译sql语句,返回PreparedStatement的实例PreparedStatement ps = conn.prepareStatement(sql);ps.setString(1, username);ps.setString(2, pwd);ps.setString(3, email);int i = ps.executeUpdate();System.out.println(i > 0 ? "添加成功" : "添加失败");System.out.println("录入成功!");ps.close();conn.close();}

5、使用JDBC实现往图书表中添加1本图书

    //通用的增删改操作public static void update(String sql, Object... args) {Connection conn = null;PreparedStatement ps = null;try {// 1.读取配置文件中的4个基本信息InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc1.properties");Properties pros = new Properties();pros.load(is);String user = pros.getProperty("user");String password = pros.getProperty("password");String url = pros.getProperty("url");String driverClass = pros.getProperty("driverClass");// 2.加载驱动Class.forName(driverClass);// 3.获取连接conn = DriverManager.getConnection(url, user, password);//4.预编译sql语句,返回PreparedStatement的实例ps = conn.prepareStatement(sql);//5.填充占位符for (int i = 0; i < args.length; i++) {ps.setObject(i + 1, args[i]);}//6.执行操作ps.executeUpdate();} catch (Exception e) {e.printStackTrace();} finally {//7.资源的关闭try {if (ps != null)ps.close();} catch (SQLException e) {e.printStackTrace();}try {if (conn != null)conn.close();} catch (SQLException e) {e.printStackTrace();}}}//TODO 使用JDBC实现往图书表中添加1本图书@Testpublic void test2() {Scanner s = new Scanner(System.in);System.out.println("title:");String title = s.next();System.out.println("author:");String author = s.next();System.out.println("price:");String price = s.next();System.out.println("sales:");String sales = s.next();System.out.println("stock:");String stock = s.next();System.out.println("img_path:");String img_path = s.next();String sql = "insert into books(title,author,price,sales,stock,img_path)"+ "values(?,?,?,?,?,?)";update(sql, title, author, price, sales, stock, img_path);System.out.println("录入成功!");}

6、从键盘输入用户名和密码,模拟登录,使用JDBC实现验证用户名和密码是否正确,如果正确,显示登录成功,否则显示用户名或密码错误

    // TODO 从键盘输入用户名和密码,模拟登录,使用JDBC实现验证用户名和密码是否正确,如果正确,显示登录成功,否则显示用户名或密码错误@Testpublic void test3() throws Exception {System.out.println("请登录");System.out.println("请输入用户名:");Scanner scanner = new Scanner(System.in);String username = scanner.next();System.out.println("请输入密码:");String pwd = scanner.next();// 1.读取配置文件中的4个基本信息InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc1.properties");Properties pros = new Properties();pros.load(is);String user = pros.getProperty("user");String password = pros.getProperty("password");String url = pros.getProperty("url");String driverClass = pros.getProperty("driverClass");// 2.加载驱动Class.forName(driverClass);// 3.获取连接Connection conn = DriverManager.getConnection(url, user, password);String sql = "select * from users where username=? and password=SHA(?)";//4.预编译sql语句,返回PreparedStatement的实例PreparedStatement ps = conn.prepareStatement(sql);ps.setString(1, username);ps.setString(2, pwd);ResultSet resultSet = ps.executeQuery();if (resultSet.next()) {System.out.println("登录成功");} else {System.out.println("登录失败,用户名或密码错误");}resultSet.close();ps.close();conn.close();scanner.close();}

7、使用JDBC实现查询所有图书信息

    // TODO 7、使用JDBC实现查询所有图书信息@Testpublic void test4() throws Exception {// 1.读取配置文件中的4个基本信息InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc1.properties");Properties pros = new Properties();pros.load(is);String user = pros.getProperty("user");String password = pros.getProperty("password");String url = pros.getProperty("url");String driverClass = pros.getProperty("driverClass");// 2.加载驱动Class.forName(driverClass);// 3.获取连接Connection conn = DriverManager.getConnection(url, user, password);String sql = "select `id`,`title`,`author`,`price`,`sales`,`stock`,`img_path` from books";//4.预编译sql语句,返回PreparedStatement的实例PreparedStatement ps = conn.prepareStatement(sql);//5、执行sqlResultSet rs = ps.executeQuery();while (rs.next()) {for (int i = 1; i <= 7; i++) {System.out.println(rs.getObject(i) + "\t");}System.out.println();}//6、关闭rs.close();ps.close();conn.close();}

8、使用JDBC实现查询销量最大的图书信息

    // TODO 使用JDBC实现查询销量最大的图书信息@Testpublic void test5() throws Exception {// 1.读取配置文件中的4个基本信息InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc1.properties");Properties pros = new Properties();pros.load(is);String user = pros.getProperty("user");String password = pros.getProperty("password");String url = pros.getProperty("url");String driverClass = pros.getProperty("driverClass");// 2.加载驱动Class.forName(driverClass);// 3.获取连接Connection conn = DriverManager.getConnection(url, user, password);String sql = "select * from books where sales = (select max(sales) from books)";//4.预编译sql语句,返回PreparedStatement的实例PreparedStatement ps = conn.prepareStatement(sql);//5、执行sqlResultSet rs = ps.executeQuery();while (rs.next()) {for (int i = 1; i <= 7; i++) {System.out.println(rs.getObject(i) + "\t");}System.out.println();}//6、关闭rs.close();ps.close();conn.close();}

9、使用JDBC实现修改库存量小于10本的图书的库存量为100

    //TODO 使用JDBC实现修改库存量小于10本的图书的库存量为100@Testpublic void test6() throws Exception {// 1.读取配置文件中的4个基本信息InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc1.properties");Properties pros = new Properties();pros.load(is);String user = pros.getProperty("user");String password = pros.getProperty("password");String url = pros.getProperty("url");String driverClass = pros.getProperty("driverClass");// 2.加载驱动Class.forName(driverClass);// 3.获取连接Connection conn = DriverManager.getConnection(url, user, password);String sql = "UPDATE books SET stock=100 WHERE stock<10";//4.预编译sql语句,返回PreparedStatement的实例PreparedStatement ps = conn.prepareStatement(sql);//5、执行sqlint i = ps.executeUpdate();System.out.println(i > 0 ? "修改成功" : "修改失败");//6、关闭ps.close();conn.close();}

10、从键盘输入用户名,实现查询该用户的订单和订单明细

    //TODO 从键盘输入用户名,实现查询该用户的订单和订单明细@Testpublic void test7() throws Exception {Scanner input = new Scanner(System.in);System.out.print("请输入用户名:");String username = input.next();// 1.读取配置文件中的4个基本信息InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc1.properties");Properties pros = new Properties();pros.load(is);String user = pros.getProperty("user");String password = pros.getProperty("password");String url = pros.getProperty("url");String driverClass = pros.getProperty("driverClass");// 2.加载驱动Class.forName(driverClass);// 3.获取连接Connection conn = DriverManager.getConnection(url, user, password);String sql = "SELECT * FROM order_items INNER JOIN orders ON order_items.order_id = orders.id WHERE user_id = (SELECT id FROM users WHERE username = ?)";//4.预编译sql语句,返回PreparedStatement的实例PreparedStatement ps = conn.prepareStatement(sql);//5、执行sqlResultSet rs = ps.executeQuery();while (rs.next()) {for (int i = 1; i <= 14; i++) {System.out.println(rs.getObject(i) + "\t");}System.out.println();}//6、关闭rs.close();ps.close();conn.close();input.close();}

11、使用JDBC实现删除订单“15275760194821”的相关信息,注意涉及到两张表

    //TODO 使用JDBC实现删除订单“15275760194821”的相关信息,注意涉及到两张表@Testpublic void test8() throws Exception {// 1.读取配置文件中的4个基本信息InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc1.properties");Properties pros = new Properties();pros.load(is);String user = pros.getProperty("user");String password = pros.getProperty("password");String url = pros.getProperty("url");String driverClass = pros.getProperty("driverClass");// 2.加载驱动Class.forName(driverClass);// 3.获取连接Connection conn = DriverManager.getConnection(url, user, password);String sql = "DELETE FROM orders WHERE id=15275760194821";//4.预编译sql语句,返回PreparedStatement的实例PreparedStatement ps = conn.prepareStatement(sql);//5、执行sqlint i = ps.executeUpdate();System.out.println(i > 0 ? "删除成功" : "删除失败");//6、关闭ps.close();conn.close();}

–end–

JDBC与MySQL练习相关推荐

  1. JDBC连接MySQL数据库及演示样例

    JDBC是Sun公司制定的一个能够用Java语言连接数据库的技术. 一.JDBC基础知识         JDBC(Java Data Base Connectivity,java数据库连接)是一种用 ...

  2. JDBC操作MySQL Lob字段记实

    JDBC操作MySQL Lob字段记实 虽然Java的持久化框架多如牛毛,但都离不开JDBC技术,JDBC在某些时候是其他框架难以取代的.也是java操作数据库最根本的技术. 上文写了JDBC操作DB ...

  3. 一、JAVA通过JDBC连接mysql数据库(连接)

    JDBC ----JDBC(Java DataBase Connectivity)是Java与数据库的接口规范,JDBC定义了一个支持标准SQL功能的通用低层的应用程序编程接口(API),它由Java ...

  4. 基于Servlet+JDBC+Bootstrap+MySQL+AJAX权限管理系统项目实战教程

    项目简介 权限系统一直以来是我们应用系统不可缺少的一个部分,若每个应用系统都重新对系统的权限进行设计,以满足不同系统用户的需求,将会浪费我们不少宝贵时间,所以花时间来设计一个相对通用的权限系统是很有意 ...

  5. centos jdbc配置mysql_CentOS安装glassfish4.0配置jdbc连接mysql

    版本glassfish-4.0.zip 1.解压,拷贝到指定安装路径 unzip glassfish-4.0.zip cp cp glassfish4 /usr/local/ -rf 2.设置glas ...

  6. 修改sqlarchemy源码使其支持jdbc连接mysql

    注意:本文不会将所有完整源码贴出,只是将具体的思路以及部分源码贴出,需要感兴趣的读者自己实验然后实现吆. 缘起 公司最近的项目需要将之前的部分业务的数据库连接方式改为jdbc,但由于之前的项目都使用s ...

  7. Java使用Jdbc操作MySql数据库(一)

    这个示例是Java操作MySql的基本方法. 在这个示例之前,要安装好MySql,并且配置好账户密码,创建一个logininfo数据库,在数据库中创建userinfo数据表.并且在表中添加示例数据. ...

  8. [原创]java使用JDBC向MySQL数据库批次插入10W条数据测试效率

    使用JDBC连接MySQL数据库进行数据插入的时候,特别是大批量数据连续插入(100000),如何提高效率呢? 在JDBC编程接口中Statement 有两个方法特别值得注意: 通过使用addBatc ...

  9. JAVA-数据库之JDBC连接MySQL数据库

    相关资料: <21天学通Java Web开发> JDBC连接MySQL数据库 1.如果需要通过JDBC来连接MySQL数据库,还必须先在MySQL数据库服务器中创建数据库和表. Conne ...

  10. JDBC连接MySQL

    JDBC连接MySQL 加载及注册JDBC驱动程序 Class.forName("com.mysql.jdbc.Driver"); Class.forName("com. ...

最新文章

  1. linux C高手成长过程---书籍推荐
  2. GSMA公布2016年亚洲移动大奖提名名单
  3. Codeforces Round #555 (Div. 3) c2 d e f
  4. vc6.0垃圾文件清理工具_干货 | 电脑清理宝典
  5. bert 无标记文本 调优_使用BERT准确标记主观问答内容
  6. 怎么保证读取最新数据_Kafka怎么保证数据不丢失?
  7. Thinkphp5之ajax分页实现_paginate()参数详细
  8. 【考研计算机网络】 强化笔记
  9. php match_PHP8.0新功能之Match表达式的使用
  10. Worm.Win32.Diskgen.gen/磁碟机也捎带广告?
  11. 新手坐高铁怎么找车厢_坐高铁时如何快速找到自己车票上的车厢和座位! 说出来你都不敢相信...
  12. 链乔教育在线|数字化工作管理工具—Notion(四):同步块(Synced block)
  13. 游戏资讯:预计在10月底至11月内, 版号审批将会恢复
  14. 每个人都需要良好的人生观、价值观、职业观
  15. 图片来自微信公众平台未经许可不可引用|解决经验分享
  16. MIPS处理器中的偏见:R型指令与I型指令
  17. 山寨不了你,就要使出混身解数置你于死地,某多只是马前卒
  18. 浙政钉DING消息对接文档
  19. 【python代码实现】人工神经网络分类算法及其实战案例(股票价格波动分析)
  20. SpringBoot常用配置模板

热门文章

  1. 用VScode写C/C++,从下载安装到配置使用
  2. 【华为机试题】华为机试真题附解答(2020.9.16/c++)
  3. 策划运营分会场:巴别时代 CEO--放开偏执,拥抱变革
  4. Java连接SAP ————JCO 3.0技术详解
  5. 手机cpu芯片测试软件,手机CPU怎么检测
  6. 怎么设置creative cloud的应用禁止自动更新
  7. ectouch v1 thinkphp的搜索问题
  8. android开发工具类(草鸡好用)
  9. laravel框架使用datatables
  10. VM 虚拟机 分辨率问题