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;
    }

    @Override
    public 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 `:

 增

 

 改

 

 

 删

 

 查

 退出程序:

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

element-ui分页编辑器的使用

代码&#xff1a; 准备好初始数据; total: ,page: {pageSize: 1,pageNumber: 10,}, 当前显示在第一页,每页10条数据。 一,页码改变的事件 handleCurrentChange(val) { this.page.pageSizeval 通过传入(this.page) 获取当前页的数据 } 二.页容量改变 handleSizeChange(val) …

c++游戏制作指南(三):c++剧情类文字游戏的制作

&#x1f37f;*★,*:.☆(&#xffe3;▽&#xffe3;)/$:*.★* &#x1f37f; &#x1f35f;欢迎来到静渊隐者的csdn博文&#xff0c;本文是c游戏制作指南的一部&#x1f35f; &#x1f355;更多文章请点击下方链接&#x1f355; &#x1f368; c游戏制作指南&#x1f3…

Java基础入门篇——IDEA开发第一个入门程序(五)

一、IDEA层级结构分类 IntelliJ IDEA的项目结构主要分为以下几个层级&#xff1a; Project&#xff1a; 项目Module: 模块Package: 包Class&#xff1a; 类 一个项目里面可以有多个模块&#xff0c;一个模块里面又可以有多个包&#xff0c;而每个包又可以存放多个类文件。比…

Eclipse如何自动添加作者、日期等注释

一、创建类时自动添加注释 1、Window->Preferences 2、Java->Code Syle->Code Templates->Code->New Java files->Edit->要添加的注释->Apply 二、选中要添加的类或者方法通过AltShiftJ快捷键添加 1、Window->Preferences 2、Java->Code Syle…

第四章 kernel函数基础篇

cuda教程目录 第一章 指针篇 第二章 CUDA原理篇 第三章 CUDA编译器环境配置篇 第四章 kernel函数基础篇 第五章 kernel索引(index)篇 第六章 kenel矩阵计算实战篇 第七章 kenel实战强化篇 第八章 CUDA内存应用与性能优化篇 第九章 CUDA原子(atomic)实战篇 第十章 CUDA流(strea…

ubuntu 暂时不能解析域名 解决办法

需要修改系统DNS 打开终端&#xff1a;输入 sudo vi /etc/resolv.conf 回车 在打开的配置文件中添加DNS信息 nameserver 114.114.114.114 nameserver 8.8.8.8 保存退出&#xff0c;重启系统即可。

腾讯云-宝塔添加MySQL数据库

1. 数据库菜单 2. 添加数据库 3. 数据库添加成功 4. 上传数据库文件 5. 导入数据库文件 6. 开启数据库权限 7. 添加安全组 (宝塔/腾讯云) 8. Navicat 连接成功

Linux jq 命令讲解与实战操作(json字符串解析工具)

文章目录 一、概述二、jq 命令安装三、jq 命令语法与示例详解1&#xff09;基本用法2&#xff09;常用选项3&#xff09;查询和过滤1、选择字段2、过滤3、遍历数组4、组合操作 4&#xff09;修改和创建1、修改字段值&#xff1a;2、创建新字段&#xff1a;3、组合操作&#xff…

C#,OpenCV开发指南(01)

C#&#xff0c;OpenCV开发指南&#xff08;01&#xff09; 一、OpenCV的安装1、需要安装两个拓展包&#xff1a;OpenCvSharp4和OpenCvSharp4.runtime.win 二、C#使用OpenCV的一些代码1、需要加头文件2、读取图片3、在图片上画矩形框4、 在图片上画直线 一、OpenCV的安装 1、需…

【FIFO IP系列】FIFO IP参数配置与使用示例

Vivado IP核提供了强大的FIFO生成器&#xff0c;可以通过图形化配置快速生成FIFO IP核。 本文将详细介绍如何在Vivado中配置一个FIFO IP核,以及如何调用这个FIFO IP核。 一、FIFO IP核的配置 1、新建FIFO IP 在Vivado的IP Catalog中找到FIFO Generator IP核&#xff0c;双击…

Node.js |(一)Node.js简介及计算机基础 | 尚硅谷2023版Node.js零基础视频教程

学习视频&#xff1a;尚硅谷2023版Node.js零基础视频教程&#xff0c;nodejs新手到高手 文章目录 &#x1f4da;关于Node.js&#x1f407;为什么要学Node.js&#x1f407;Node.js是什么&#x1f407;Node.js的作用&#x1f407;Node.js下载安装&#x1f407;命令行工具&#x1…

项目优化后续 ,手撸一个精简版VUE项目框架!

之前说过项目之前用的vben框架&#xff0c;在优化完性能后打包效果由原来的纯代码96M变成了56M&#xff0c;后续来啦&#xff0c;通过更换框架&#xff0c;代码压缩到了36M撒花~ 现在就来详细说说是怎么手撸一个框架的&#xff01; 方案&#xff1a; 搭建一套 vite vue3 a…

流量卡线上销户全教程,剩余的话费还有可能给你退回来!

线上就可以注销手机卡你知道吗&#xff1f;目前三大运营商都开通了线上销户业务了&#xff0c;而且用不完的话费还可以退回来&#xff0c;建议大家点赞收藏起来&#xff0c;以免有需要的时候找不到了&#xff0c;大家好&#xff0c;我是流量卡葫芦妹。 ​ OK&#xff0c;不多废…

【Leetcode】二叉树的最近公共祖先,二叉搜索树转换成排好序的双向链表,前序遍历与中序遍历构造二叉树

一.二叉树的最近公共祖先 链接 二叉树的最近公共祖先 题目再现 『Ⅰ』思路一&#xff1a;转换成相交链表问题 观察上图&#xff0c;节点1和节点4的最近公共祖先是3&#xff0c;这是不是很像相交链表的问题&#xff0c;关于相交链表&#xff0c;曾经我在另一篇文章里写到过&a…

十三、ESP32PS2摇杆(ADC)

1. 运行效果 在上下左右操作PS2摇杆的时候,会检测到数据 2. 滑动电阻

初识http协议,简单实现浏览器和服务器通信

文章目录 认识urlhttp协议格式通信代码验证细节Util.hppprotocol.hppServer.hppServer.cc 结果分析 认识url 平时俗称的 “网址” 其实就是说的 URL&#xff0c;例如在百度上搜索一个C 可以看到这段网址前面有个 https 那么这个就代表着使用的是https协议&#xff0c;现在都是…

八、Spring 整合 MyBatis

文章目录 一、Spring 整合 MyBatis 的关键点二、Spring 整合 MyBatis 的步骤2.1 创建 Maven 项目&#xff0c;并导入相关依赖2.2 配置 Mybatis 部分2.3 配置 Spring 部分2.3 配置测试类 一、Spring 整合 MyBatis 的关键点 1、 将 Mybatis 的 DataSource (数据来源)的创建和管理…

单片机外部晶振故障后自动切换内部晶振——以STM32为例

单片机外部晶振故障后自动切换内部晶振——以STM32为例 作者日期版本说明Dog Tao2023.08.02V1.0发布初始版本 文章目录 单片机外部晶振故障后自动切换内部晶振——以STM32为例背景外部晶振与内部振荡器STM32F103时钟系统STM32F407时钟系统 代码实现系统时钟设置流程时钟源检测…

郭盛华:npm 软件包窃取开发人员的敏感数据

网络安全研究人员在 npm 软件包注册表中发现了一系列新的恶意软件包&#xff0c;这些软件包旨在窃取敏感的开发人员信息。 所有模块的一个共同功能是能够启动 JavaScript&#xff08;“index.js”&#xff09;&#xff0c;该 JavaScript 可以将有价值的信息泄露到远程服务器。…

HCIP 三层交换机

一、实现VLAN间通信 在传统的交换机组网中&#xff0c;默认所有网络都处于同一个广播域&#xff0c;带来了许多问题&#xff0c;VLAN技术的提出&#xff0c;满足了二层组网隔离广播域需求&#xff0c;使得属于不同的VLAN间网络无法通信&#xff0c;但不同VLAN之间又存在着互相…