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

news2024/9/9 4:00:33

需求:

创建基于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 `:

 增

 

 改

 

 

 删

 

 查

 退出程序:

 

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

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

相关文章

动态路由协议 ospf

动态路由协议的分类 rip : 距离矢量路由协议&#xff08;容易产生环路&#xff09;ospf&#xff1a; 链路状态路由协议&#xff08;比较耗费资源&#xff0c;但是链路准确性好&#xff09;bgp&#xff1a; 外部网关协议 RIP OSPF LSA泛洪 LSDB维护 SPF计算&#xff08;最短路…

指令重排相关

指令流水线所带来的一些问题 结构冒险 流水线中出现硬件资源竞争 数据冒险 流水线中后面的指令需要等待前面指令完成数据的读写 控制冒险 流水线需要个怒前面指令的执行结果来决定下一步去哪儿之行 为了解决指令流水线的数据冒险所带来的停顿、CPU 搞了个乱序执行。 在遇到数…

关于Godot游戏引擎制作流水灯

先上核心代码 游戏节点 流水灯的通途可以是 1. 装饰 2. 音乐类多媒体程序&#xff08;如FL中TB-303的步进灯&#xff09; FL Studio Transistor Bass

TypeScript 中【class类】与 【 接口 Interfaces】的联合搭配使用解读

导读&#xff1a; 前面章节&#xff0c;我们讲到过 接口&#xff08;Interface&#xff09;可以用于对「对象的形状&#xff08;Shape&#xff09;」进行描述。 本章节主要介绍接口的另一个用途&#xff0c;对类的一部分行为进行抽象。 类配合实现接口 实现&#xff08;impleme…

8.7工作总结

一、我们想自定义一个titileBar出现如下这种情况&#xff0c;发现他原来的titileBar还未隐藏。 后来我尝试修改主题使得他没有主题noActionBar发现也不行&#xff0c;后来我参考原先我看过的项目使用了如下代码 this.getActionBar().hide();发现会报这个错误java.lang.NullPoi…

30.基于XML的声明式事务

基于XML的声明式事务 主要是使用XML去代替注解&#xff0c;来实现起到代替注解的作用&#xff0c;实际使用频率很低 将BookServiceImpl.java中的Transactional注解删除&#xff0c;确保用户余额充足 spring-tx-xml.xml <?xml version"1.0" encoding"UTF-8…

Android AccessibilityService研究

AccessibilityService流程分析 AccessibilityService开启方式AccessibilityService 开启原理 AccessibilityService开启方式 . 在Framework里直接添加对应用app 服务component。 loadSetting(stmt, Settings.Secure.ACCESSIBILITY_ENABLED,1); loadSetting(stmt, Settings.Se…

mybatis-plus的update方法,到底会不会更新null值?看这一篇就够了

普通的设置值。需要传入一个Wrapper对象 默认情况下是不会更新null值的&#xff0c;也就是只更新设置值的字段 LambdaUpdateWrapper<OrderChildRoom> orderChildRoomUpdateWrapper new LambdaUpdateWrapper<>();orderChildRoomUpdateWrapper.set(OrderChildRoo…

【PDF密码】PDF文件不能打印,为什么?

正常的PDF文件是可以打印的&#xff0c;如果PDF文件打开之后发现文件不能打印&#xff0c;我们需要先查看一下自己的打印机是否能够正常运行&#xff0c;如果打印机是正常的&#xff0c;我们再查看一下&#xff0c;文件中的打印功能按钮是否是灰色的状态。 如果PDF中的大多数功…

面试热题(滑动窗口最大值)

给你一个整数数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 输入&#xff1a;nums [1,3,-1,-3,5,3,6,7], k 3 输出&#xff1a;[3,3,5,…

SpringCloud实用篇1——eureka注册中心 Ribbon负载均衡原理 nacos注册中心

目录 1 微服务1.1 微服务的演变1.2 微服务1.3 SpringCloud1.4 小结 2 服务拆分及远程调用2.1 服务拆分2.2 服务拆分案例2.3 实现远程调用2.4 提供者与消费者 3 Eureka注册中心3.1 Eureka的结构和作用3.2 搭建eureka-server3.3 服务注册3.4 服务发现 4 Ribbon负载均衡4.1 负载均…

ubuntu18.04安装docker及docker基本命令的使用

官网安装步骤&#xff1a;https://docs.docker.com/desktop/install/ubuntu/ docker快速入门教程 Ubuntu-Docker安装和使用 docker官网 docker-hub仓库 1、常用指令 &#xff08;1&#xff09;镜像操作 # ############################# 以nginx为例 docker images docker p…

爬虫010_列表高级_添加_append_extend_修改_查询_in_not int_删除_del_pop_remove---python工作笔记029

然后再来看列表操作 首先添加append方法 然后插入,坐标是要插入的下标,右边是插入的内容 看结果 1,2,3,4,5,6 然后这个extend,是逐个插入,放到后边 然后是修改,直接对下标赋值 看结果</

宝塔面板点击SSL闪退打不开怎么解决?

宝塔Linux面板点击SSL证书闪退如何解决&#xff1f;旧版本的宝塔Linux面板确实存在这种情况&#xff0c;如何解决&#xff1f;升级你的宝塔Linux面板即可。新手站长分享宝塔面板SSL闪退的解决方法&#xff1a; 宝塔面板点击SSL证书闪退解决方法 问题&#xff1a;宝塔Linux面板…

创建独立 Python 环境的工具venv

venv 是一种用于创建独立 Python 环境的工具。这些隔离环境可以具有单独的 Python 软件包版本&#xff0c;以便将一个项目的依赖项与其他项目的依赖项隔离开来。我们建议您在使用 Python 进行本地开发时始终使用每个项目的虚拟环境。 1.使用 venv 命令创建整个 Python 安装的虚…

Vue系列第七篇:Element UI之el-main,el-table,el-dialog,el-pagination,el-breadcrumb等控件使用

本篇实现主页面功能&#xff0c;包括主页面排版布局&#xff0c;学生管理模块实现&#xff0c;后台接口实现等功能。 目录 1.运行效果 1.1登录页面 1.2主页面 1.3学生管理 - 信息列表 1.4学生管理 - 信息管理 1.5学生管理 - 作业列表 1.6学生管理 - 作业管理 2.前端代码…

Spring MVC简介与概述

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

设计模式之六:命令模式(封装调用)

命令模式可以将请求的对象和执行请求的对象解耦&#xff08;实际上是通过命令对象进行沟通&#xff0c;即解耦&#xff09;。&#xff08;个人感觉&#xff0c;这章讲的很一般&#xff09; 按个人理解来讲&#xff1a; 假如需要一个遥控器&#xff0c;遥控器有一个插口可以插上…

Python以及Pycharm保姆级的下载安装教程,看完就懂

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于Python的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.Python的安装 1.下载地址 2.下载步骤…