Java项目作业~ 创建基于Maven的Java项目,连接数据库,实现对站点信息的管理,即实现对站点的新增,修改,删除,查询操作

需求:

创建基于Maven的Java项目,连接数据库,实现对站点信息的管理,即实现对站点的新增,修改,删除,查询操作。

以下是站点表的建表语句:

CREATE TABLE `websites` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` char(20) NOT NULL DEFAULT '' COMMENT '站点名称',`url` varchar(255) NOT NULL DEFAULT '',`alexa` int(11) NOT NULL DEFAULT '0' COMMENT 'Alexa 排名',`country` char(10) NOT NULL DEFAULT '' COMMENT '国家',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

步骤:

1. 创建 Maven 项目:


   - 使用 Maven 创建一个新的 Java 项目


   - 在项目的 `pom.xml` 文件中添加所需的依赖项

【MysQL Connector/J 、Druid 版本 1.2.1、Junit 版本 4.12】

新建`libs`文件夹添加相应的jar包:

 pom.xml代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.ambow</groupId><artifactId>WebSite</artifactId><version>1.0-SNAPSHOT</version><dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.22</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.1</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency></dependencies></project>

 解析上述代码含义:

这是一个 Maven POM(Project Object Model)文件,用于描述和管理 Java 项目的结构、依赖关系和构建配置。

- `<project>` 元素是根元素,包含整个 POM 文件的内容。
- `xmlns` 属性定义了 XML 命名空间,指定了 Maven 的命名空间。
- `xmlns:xsi` 属性定义了 `xsi` 命名空间,并指定了 `xsi` 命名空间的位置。
- `xsi:schemaLocation` 属性指定了 XSD(XML Schema Definition)的位置,以验证 POM 文件的格式是否正确。
- `<modelVersion>` 元素指定了 POM 模型的版本,通常使用 4.0.0。
- `<groupId>` 元素定义了项目的组织或组织的唯一标识符。
- `<artifactId>` 元素定义了项目的唯一标识符,通常是项目的名称。
- `<version>` 元素定义了项目的版本号。
- `<dependencies>` 元素包含了项目所依赖的外部库或模块。
- `<dependency>` 元素定义了一个依赖项。
- `<groupId>` 元素指定了依赖项的组织或组织的唯一标识符。
- `<artifactId>` 元素指定了依赖项的唯一标识符,通常是库或模块的名称。
- `<version>` 元素指定了依赖项的版本号。
- `<scope>` 元素定义了依赖项的作用范围,例如编译时依赖、测试时依赖等。

该项目使用了以下依赖项:
- MySQL Connector/J 版本 8.0.22:用于与 MySQL 数据库建立连接。
- Druid 版本 1.2.1:一个 Java 数据库连接池。
- Junit 版本 4.12:用于编写和运行单元测试。

这段代码描述了一个基于 Maven 的 Java 项目的结构和依赖关系。它还可以包含其他配置,例如构建插件、资源文件的位置和项目的特定设置等。

2. 创建站点实体类:


   - 在项目中创建一个名为 `Website` 的 Java 类,代表站点对象


   - 在 `Website` 类中定义站点属性(id、name、url、alexa、country)

提供相应的 getter 和 setter 方法

package com.ambow.druid;/*
*   实体类(封装数据)
*   封装:
*       1.属性私有化
*       2.公共的get set方法
*
* */public class website {//属性 --数据表的字段private int id;private String name;private String url;private int alexa;private String country;//构造方法public website(){}public website(int id, String name, String url, int alexa, String country) {this.id = id;this.name = name;this.url = url;this.alexa = alexa;this.country = country;}public website(String name, String url, int alexa, String country) {this.name = name;this.url = url;this.alexa = alexa;this.country = country;}//get set方法public int getId(){return id;}public void setId(int id){this.id = id;}public String getName(){return name;}public void setName(String name){this.name = name;}public String geturl(){return url;}public void setUrl(String url){this.url = url;}public int getAlexa(){return alexa;}public void setAlexa(int alexa){this.alexa = alexa;}public String getCountry(){return country;}public void setCountry(String country){this.country = country;}@Overridepublic String toString(){return "website{" +"id = " + id +",name = " + name + '\'' +",url = " + url + '\'' +",alexa = " + alexa + '\'' +",country = " + country + '\'' + '}';}}

3. 创建数据库访问对象Dao:


   - 创建一个名为 `WebsiteDao` 的 Java 类,用于执行站点信息在数据库中的增删改查操作


   - 在 `WebsiteDao` 类中使用 JDBC 或者任何 ORM 框架(如 MyBatis)来连接数据库

实现对站点信息的新增、修改、删除和查询操作

package com.ambow.druid;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;/*
*   Website数据访问对象
*   跟站点操作相关的方法
*   1.添加
*   2.修改
*   3.删除
*   4.查询
* */public class WebsiteDao {//新增站点public int addSite(website site) throws Exception{//把站点,连接数据库,保存数据库int row = 0;Connection conn = DruidUtil.getConn();String sql ="insert into websites values(null,?,?,?,?)";PreparedStatement pstmt = conn.prepareStatement(sql);pstmt.setString(1,site.getName());pstmt.setString(2,site.geturl());pstmt.setInt(3,site.getAlexa());pstmt.setString(4,site.getCountry());row = pstmt.executeUpdate();return row;}public void modifySite(){}public void dropSite(){}public ArrayList<website> selectSite() throws Exception{ArrayList<website> list = new ArrayList<website>();Connection conn = DruidUtil.getConn();String sql = "select * from websites";PreparedStatement pstmt = conn.prepareStatement(sql);ResultSet rs = pstmt.executeQuery();while(rs.next()){website site = new website();site.setId(rs.getInt(1));site.setName(rs.getString(2));site.setUrl(rs.getString(3));site.setAlexa(rs.getInt(4));site.setCountry(rs.getString(5));list.add(site);}return list;}
}

4. 创建工具类 DruidUtil :

- 创建一个名为`DruidUtil`的工具类 ,主要用于获取数据库连接

- 只需通过调用 DruidUtil.getConn() 方法,获取到一个可用的数据库连接

package com.ambow.druid;import com.alibaba.druid.pool.DruidDataSourceFactory;import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.util.Properties;public class DruidUtil {//获取数据库连接public static Connection getConn() throws Exception{Connection connection = null;Properties prop = new Properties();InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("druid.properties");prop.load(is);DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);connection = dataSource.getConnection();return connection;}}

 解析上述代码含义:

首先,通过 `ClassLoader.getSystemClassLoader().getResourceAsStream("druid.properties")` 获取 `druid.properties` 配置文件的输入流,并使用 `Properties` 类加载配置文件。

然后,使用 `DruidDataSourceFactory.createDataSource(prop)` 创建了一个数据源 `DataSource` 对象。

接着,调用 `dataSource.getConnection()` 方法获取一个数据库连接 `Connection` 对象,并将其返回给调用者。

这个工具类的作用:封装了获取数据库连接的操作,使得其他代码可以方便地调用该方法来获取数据库连接而无需重复编写获取连接的代码。

5. 实现站点管理功能:


   - 创建一个名为 `DruidSys` 的 Java 类,用于处理站点信息的业务逻辑


   - 在 `DruidSys` 类中使用Druid连接池和MySQL数据库进行站点管理的,实现了增删改查功能

 

package com.ambow.druid;import com.alibaba.druid.pool.DruidDataSourceFactory;import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Properties;
import java.util.Scanner;public class DruidSys {static Scanner sc = new Scanner(System.in);public static void main(String[] args) throws Exception {while (true) {System.out.println("------------------------------");System.out.println("--------  站点管理系统  ---------");System.out.println("--------  1.新增站点  ---------");System.out.println("--------  2.删除站点  ---------");System.out.println("--------  3.修改站点  ---------");System.out.println("--------  4.查询站点  ---------");System.out.println("--------  0.退出系统  ---------");System.out.println("--------    请选择!!!    ---------");int choose = sc.nextInt();switch (choose) {case 1:addWebsite();break;case 2:deleteWebsite();break;case 3:modifyWebsite();break;case 4:queryWebsite();break;case 0:System.out.println("退出系统!");System.exit(0);break;default:System.out.println("对不起,我的能力有限!");break;}}}//添加站点信息private static void addWebsite() throws Exception {System.out.println("请输入站点名称:");String name = sc.next();System.out.println("请输入站点URL:");String url = sc.next();System.out.println("请输入站点Alexa排名:");int alexa = sc.nextInt();System.out.println("请输入站点所在国家:");String country = sc.next();Properties prop = new Properties();InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("druid.properties");prop.load(is);DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);Connection conn = dataSource.getConnection();String sql = "INSERT INTO websites (name, url, alexa, country) VALUES (?, ?, ?, ?)";PreparedStatement pstmt = conn.prepareStatement(sql);pstmt.setString(1, name);pstmt.setString(2, url);pstmt.setInt(3, alexa);pstmt.setString(4, country);int row = pstmt.executeUpdate();if (row != 0) {System.out.println("添加站点成功!");} else {System.out.println("添加站点失败!");}pstmt.close();conn.close();}//删除站点信息private static void deleteWebsite() throws Exception {System.out.println("请输入要删除的站点ID:");int id = sc.nextInt();Properties prop = new Properties();InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("druid.properties");prop.load(is);DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);Connection conn = dataSource.getConnection();String sql = "DELETE FROM websites WHERE id = ?";PreparedStatement pstmt = conn.prepareStatement(sql);pstmt.setInt(1, id);int row = pstmt.executeUpdate();if (row != 0) {System.out.println("删除站点成功!");} else {System.out.println("删除站点失败!");}pstmt.close();conn.close();}//修改站点信息private static void modifyWebsite() throws Exception {System.out.println("请输入要修改的站点ID:");int id = sc.nextInt();System.out.println("请输入站点新名称:");String name = sc.next();System.out.println("请输入站点新URL:");String url = sc.next();System.out.println("请输入站点新的Alexa排名:");int alexa = sc.nextInt();System.out.println("请输入站点新所在国家:");String country = sc.next();Properties prop = new Properties();InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("druid.properties");prop.load(is);DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);Connection conn = dataSource.getConnection();String sql = "UPDATE websites SET name = ?, url = ?, alexa = ?, country = ? WHERE id = ?";PreparedStatement pstmt = conn.prepareStatement(sql);pstmt.setString(1, name);pstmt.setString(2, url);pstmt.setInt(3, alexa);pstmt.setString(4, country);pstmt.setInt(5, id);int row = pstmt.executeUpdate();if (row != 0) {System.out.println("修改站点成功");} else {System.out.println("修改站点失败");}pstmt.close();conn.close();}//查询站点信息private static void queryWebsite() throws Exception {Properties prop = new Properties();InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("druid.properties");prop.load(is);DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);Connection conn = dataSource.getConnection();String sql = "SELECT * FROM websites";PreparedStatement pstmt = conn.prepareStatement(sql);ResultSet rs = pstmt.executeQuery();while (rs.next()) {int id = rs.getInt("id");String name = rs.getString("name");String url = rs.getString("url");int alexa = rs.getInt("alexa");String country = rs.getString("country");System.out.println("ID: " + id + ", 站点名称: " + name + ", URL: " + url + ", Alexa排名: " + alexa + ", 所在国家: " + country);}rs.close();pstmt.close();conn.close();}
}

 解析上述代码含义:

代码使用了Druid连接池,首先通过`DruidDataSourceFactory.createDataSource(prop)`创建了一个数据源`dataSource`,其中`prop`是加载的配置文件`druid.properties`。然后获取数据库连接`Connection conn = dataSource.getConnection()`。

接下来,代码提供了一个菜单选择功能,用户可以选择新增、删除、修改或查询站点的操作。根据用户的选择,调用相应的方法进行处理。

- `addWebsite` 方法用于添加新的站点。用户需要输入站点名称、URL、Alexa排名和所在国家,然后通过执行INSERT语句将站点信息插入到数据库中。

- `deleteWebsite` 方法用于删除指定的站点。用户需要输入要删除的站点ID,然后通过执行DELETE语句从数据库中删除对应的站点信息。

- `modifyWebsite` 方法用于修改指定的站点信息。用户需要输入要修改的站点ID,然后输入新的站点名称、URL、Alexa排名和所在国家,通过执行UPDATE语句更新数据库中对应的站点信息。

- `queryWebsite` 方法用于查询所有站点信息。通过执行SELECT语句从数据库中获取所有站点的信息,并打印显示出来。

无论是新增、删除、修改还是查询,都会在完成操作后关闭连接和相关资源。

项目结构如下:

 运行主程序:

`DruidSys `:

 增

 

 改

 

 

 删

 

 查

 退出程序:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/28978.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

收钱吧与火山引擎VeDI合作一年后 有了哪些新变化?

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 收钱吧正在和火山引擎数智平台&#xff08;VeDI&#xff09;跑出一条业务提效新通路。 相关数据显示&#xff0c;收钱吧的日服务人次就近5000万&#xff0c;累计服务…

测评HTTP代理的透明匿名?

在我们日常的网络冒险中&#xff0c;你是否曾听说过HTTP代理的透明匿名特性&#xff1f;这些神秘的工具就像是网络世界中的隐身斗士&#xff0c;让我们能够在互联网的迷雾中保护自己的身份和隐私。那么&#xff0c;让我们一起揭开HTTP代理的面纱&#xff0c;探索其中的奥秘吧&a…

el-table实现指定列合并

table传入span-method方法可以实现合并行或列&#xff0c;方法的参数是一个对象&#xff0c;里面包含当前行row、当前列column、当前行号rowIndex、当前列号columnIndex四个属性。该函数可以返回一个包含两个元素的数组&#xff0c;第一个元素代表rowspan&#xff0c;第二个元素…

Qt多线程编程

本章介绍Qt多线程编程。 1.方法 Qt多线程编程通常有2种方法&#xff1a; 1)通过继承QThread类&#xff0c;实现run()方法。 2)采用QObject::moveToThread()方法。 方法2是Qt官方推荐的方法&#xff0c;本文介绍第2种。 2.步骤 1)创建Worker类 这里的Worker类就是我们需要…

数学·包含学科简介

数学包含学科简介 14 逻辑与基础 ▪ 1410:演绎逻辑学 ▪ 1420:证明论 ▪ 1430:递归论 ▪ 1440:模型论 ▪ 1450:公理集合论 ▪ 1460:数学基础 ▪ 1499:数理逻辑与数学基础其他学科 17 数论 ▪ 1710:初等数论 ▪ 1720:解析数论 ▪ 1730:代数数论 ▪ 1740:超越数论 ▪ 1750:丢…

FPGA开发:音乐播放器

FPGA开发板上的蜂鸣器可以用来播放音乐&#xff0c;只需要控制蜂鸣器信号的方波频率、占空比和持续时间即可。 1、简谱原理 简谱上的4/4表示该简谱以4分音符为一拍&#xff0c;每小节4拍&#xff0c;简谱上应该也会标注每分钟多少拍。音符时值对照表如下图所示&#xff0c;这表…

大模型老是胡说八道怎么办?哈佛大学提出推理干预ITI技术有效缓解模型幻觉现象

论文链接&#xff1a;https://arxiv.org/abs/2306.03341 代码仓库&#xff1a;https://github.com/likenneth/honest_llama 近来与ChatGPT有关的大模型的话题仍然处于风口浪尖&#xff0c;但是大家讨论的方向已经逐渐向大语言模型的实际应用、安全、部署等方面靠近。虽然大模型…

Gartner发布《2023年全球RPA魔力象限》:90%RPA厂商,将提供生成式AI自动化

8月3日&#xff0c;全球著名咨询调查机构Gartner发布了《2023年全球RPA魔力象限》&#xff0c;通过产品能力、技术创新、市场影响力等维度&#xff0c;对全球16家卓越RPA厂商进行了深度评估。 弘玑Cyclone&#xff08;Cyclone Robotics&#xff09;、来也&#xff08;Laiye&am…

(九)人工智能应用--深度学习原理与实战--前馈神经网络实现MNST手写数字识别

目标: 识别手写体的数字,如图所示: 学习内容: 1、掌握MNIST数据集的加载和查看方法 2、熟练掌握Keras建立前馈神经网络的步骤【重点】 3、掌握模型的编译及拟合方法的使用,理解参数含义【重点】 4、掌握模型的评估方法 5、掌握模型的预测方法 6、掌握自定义图片的处理与预测 …

Modelsim恢复编辑器的解决方案——只能将外部编辑器删除后,重新匹配编辑器

Modelsim恢复编辑器的解决方案——只能将外部编辑器删除后&#xff0c;重新匹配编辑器 1&#xff0c;Modelsim和Questasim是相互兼容的&#xff0c;配置的编辑器变成了sublime&#xff0c;且更换不了编辑器2&#xff0c;解决问题的方案&#xff0c;还是没得到解决3&#xff0c;…

Rpc原理

dubbo原理 1、RPC原理 一次完整的RPC调用流程&#xff08;同步调用&#xff0c;异步另说&#xff09;如下&#xff1a; 1&#xff09;服务消费方&#xff08;client&#xff09;调用以本地调用方式调用服务&#xff1b; 2&#xff09;client stub接收到调用后负责将方法、参数…

堡塔面板系统加固使用说明

更新日志&#xff1a; 宝塔系统加固5.0- 正式版 2023-08-07 1.加固php 配置文件 2.加固nginx 启动文件 宝塔系统加固4.1- 正式版 1、【修复】系统加固不会随系统启动自动开启的问题 2、【优化】大幅降低CPU使用率 宝塔系统加固4.0- 正式版 1、【增加】等保加固相关加固功能 2、…

高中教师能去美国做访问学者吗?

美国作为世界上高等教育水平较高的国家之一&#xff0c;吸引了众多学者前往交流学习。那么高中教师是否能够成为美国访问学者&#xff0c;这是当然的&#xff0c;高中老师是可以出国访学的&#xff0c;但是出国做访问学者会涉及到多方面的因素。 首先&#xff0c;教师个人的学术…

【torch.nn.Fold】和【torch.nn.Unfold】

文章目录 torch.nn.Unfold直观理解官方文档 toch.nn.Fold直观理解官方文档 torch.nn.Unfold 直观理解 torhc.nn.Unfold的功能&#xff1a; 从一个batch的样本中&#xff0c;提取出滑动的局部区域块patch&#xff08;也就是卷积操作中的提取kernel filter对应的滑动窗口&#…

Qt做警告处理界面

解决的问题&#xff1a; 做上位机时&#xff0c;多有检测仪器状态&#xff0c;事实显示警告&#xff0c;错误等状态&#xff0c;笔者就是需要显示各种仪器状态&#xff0c;做显示&#xff0c;后做出处理逻辑 Axure设计图&#xff1a; 需求&#xff1a;更新状态&#xff0c;根…

命令模式(Command)

命令模式是一种行为设计模式&#xff0c;可将一个请求封装为一个对象&#xff0c;用不同的请求将方法参数化&#xff0c;从而实现延迟请求执行或将其放入队列中或记录请求日志&#xff0c;以及支持可撤销操作。其别名为动作(Action)模式或事务(Transaction)模式。 Command is …

直播平台的秘密武器:揭秘流行直播实时美颜SDK的背后技术

近年来&#xff0c;随着社交媒体和直播平台的崛起&#xff0c;实时美颜成为了许多用户在分享自己生活的过程中的一项重要需求。无论是个人的自拍照片&#xff0c;还是主播在直播中的形象展示&#xff0c;美颜效果都直接影响着观众的视觉感受。而支撑这种实时美颜效果背后的技术…

python sqlalchemy 动态设置表名__tablename__,一个model对应多个table

我们在上一篇中说明了&#xff0c;如何在.net core的efcore中动态设置表名。 本文讲述如何在sqlalchemy中动态设置表名&#xff0c;使多个table可以对应到一个model 表如下 code example from sqlalchemy import create_engine,Column,BigInteger,String from sqlalchemy.ext…

Pandaer的iPhone手机壳

哇塞&#xff0c;Pandaer的设计太棒了&#xff01;手机壳的花样多到让我眼花缭乱&#xff0c;好多系列设计都很有意思&#xff0c;让人有集齐的冲动。我最近入手了几个iPhone的手机壳&#xff0c;它有亮色和透明的款式&#xff0c;亮色的壳内部也是亮的&#xff0c;因为手机壳全…

数组相关练习

数组练习 将数组转化成字符串数组拷贝求数组元素的平均值查找数组中指定元素(顺序查找)二分查找冒泡排序数组逆序 将数组转化成字符串 import java.util.Arrays;public class Text1 {public static void main(String[] args) {int[] arr {5, 6, 4, 2};System.out.println(Arr…