在WSL下搭建JavaWeb: JDBC学习环境

在WSL下搭建JavaWeb: JDBC学习环境

前言

​ 笔者最近打算放松一下,接触一点经典的Java Web技术,自己在闲暇时间时玩一玩JavaWeb技术。这里开一个小系列整理一下最近学习的东西,以供参考和学习。

​ 笔者的计划是使用VSCode写代码,使用的是Java21,仓库管理因为之前小小的接触过Gradle感觉它实在是太重太重了,没啥兴趣。所以决定采用Maven来管理项目。这篇博客也是记录一下如何搞这个小事情。当然,笔者喜欢在WSL或者是Linux下写代码。因此,我使用的是Ubuntu24.04的WSL镜像。

​ 由于是侧重于JDBC,我使用的是Mariadb这个开源的数据库。这里的教程的大致步骤是如下的:

  • 安装 MariaDB(或远程服务器可访问)
  • 安装 JDK21
  • 使用Maven管理和添加我们的项目

最基础的环境安装

关于VSCode,WSL的安装,笔者认为互联网上已经满大街的教程,这里不浪费口舌了。

Mariadb安装

Mariadb安装

安装Mariadb还是很简单的:

sudo apt update
sudo apt install mariadb-server

一般而言,我们最好执行安全配置脚本,这样的话我们的数据库才会安全一些

sudo mysql_secure_installation

按照提示设置 root 密码、删除匿名用户、禁止远程 root 登录、删除 test 数据库等。

登录 MariaDB 并测试
sudo mariadb -u root -p

首次如果没有设置密码,可以不加 -p 登录,之后再设置:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'your_new_password'; 
FLUSH PRIVILEGES;

your_new_password注意换成自己的密码奥!

准备一个超级简单的数据库备用(可放到后面写JavaWeb代码的时候再说)

这里就发挥自己的SQL语句水平就好

CREATE DATABASE webapp_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'webuser'@'localhost' IDENTIFIED BY 'webpass';
GRANT ALL PRIVILEGES ON webapp_db.* TO 'webuser'@'localhost';
FLUSH PRIVILEGES;

​ 这将创建一个名为 webapp_db 的数据库,并允许 webuser 用户以密码 webpass 访问它。

安装Java

​ 我们使用的是Java,安装java-jdk就好了

sudo apt update
sudo apt install openjdk-21-jdk

​ 为了检查自己的环境问题,你可以尝试一下检查版本

java --version
javac --version

​ 安装过后,如果版本没问题,我们的结果会是这样的:

charliechen@Charliechen:~/javaee/jdbc$ java --version
openjdk 21.0.7 2025-04-15
OpenJDK Runtime Environment (build 21.0.7+6-Ubuntu-0ubuntu124.04)
OpenJDK 64-Bit Server VM (build 21.0.7+6-Ubuntu-0ubuntu124.04, mixed mode, sharing)
charliechen@Charliechen:~/javaee/jdbc$ javac --version
javac 21.0.7

使用Maven创建基本的工具

​ 可能有朋友不太熟悉Maven,一句简单的话就是相当于项目管理器,Maven会托管你的项目的依赖和版本等等,保证一定的可移植性。

​ 我们这里在VSCode下载Java和Maven的插件(Extension Pack for Java)之后,我们摁住Ctrl + Shift + P,选择Java:创建项目(有可能是英文,我相信看我博客朋友的英文水平,好吧,如果真不知道的话是Create Java Projects),选择使用Maven创建项目,模板笔者认为无伤大雅,随意选择后。我们的项目描述文件放在一个XML描述文件里了。这里我们首先需要把Java的版本修正对:

  <properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>21</maven.compiler.source><maven.compiler.target>21</maven.compiler.target></properties>

​ 在dependencies的节点下,追加

    <dependency><groupId>org.mariadb.jdbc</groupId><artifactId>mariadb-java-client</artifactId><version>3.3.1</version></dependency>

​ 这个就是Mariadb的JDBC驱动器,我们使用这个小玩意来作为JDBC接口的实际实现。然后我们可以开始写代码测试一下:

package com.example;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
/*** Hello world!**/
public class App 
{public static void main( String[] args ){String databases_name = "my_first_db";// 这个是字符串的格式,我偷懒了没用format,不太规范// jdbc:mariadb:是协议命,这是JDBC驱动的规范,以及,如果你是使用其他的数据库,// mariadb就需要换成别的,比如说mysql数据库换成mysqlString url = "jdbc:mariadb://localhost:3306/" + databases_name;System.out.println("Connecting to databases: " + url);String user = "charliechen"; // 这个是我自己的数据库用户名String passwd = "passwd"; // 换成你自己的try{Connection connection = DriverManager.getConnection(url, user, passwd);Statement processing_statement = connection.createStatement();ResultSet rs = processing_statement.executeQuery("SELECT id, name FROM users");while(rs.next()){// 这里我们将会依次得到结果int id = rs.getInt("id");String name = rs.getString("name");System.out.printf("ID: %d Name: %s\n", id, name);}rs.close();processing_statement.close();connection.close();}catch(Exception e){e.printStackTrace();}}
}

​ 编写完代码,我们的事情是尝试去运行一下

编译:

mvn compile
[INFO] Scanning for projects...
[INFO] 
[INFO] ----------------------< com.example:jdbc_example >----------------------
[INFO] Building jdbc_example 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- maven-resources-plugin:3.0.2:resources (default-resources) @ jdbc_example ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /home/charliechen/javaee/jdbc/jdbc_example/src/main/resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @ jdbc_example ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to /home/charliechen/javaee/jdbc/jdbc_example/target/classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  2.062 s
[INFO] Finished at: 2025-06-25T08:43:00+08:00
[INFO] ------------------------------------------------------------------------

​ 运行

mvn exec:java -Dexec.mainClass="com.example.App"
[INFO] Scanning for projects...
[INFO] 
[INFO] ----------------------< com.example:jdbc_example >----------------------
[INFO] Building jdbc_example 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- exec-maven-plugin:3.5.1:java (default-cli) @ jdbc_example ---
Connecting to databases: jdbc:mariadb://localhost:3306/my_first_db
SLF4J: No SLF4J providers were found.
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See https://www.slf4j.org/codes.html#noProviders for further details.
ID: 1 Name: Alice
ID: 2 Name: Bob
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  1.071 s
[INFO] Finished at: 2025-06-25T08:41:37+08:00
[INFO] ------------------------------------------------------------------------

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

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

相关文章

pscc系统如何部署,怎么更安全更便捷?

磐石云PSCC系统的安全高效部署需结合云原生架构与零信任安全模型&#xff0c;以下是经过大型项目验证的部署方案及最佳实践&#xff1a; 一、智能部署架构&#xff08;混合云模式&#xff09; 二、安全增强部署方案 1. 基础设施安全 网络隔离 采用 三层网络分区&#xff1a;互…

协程驱动的高性能异步 HTTP 服务器:基础实现与任务调度机制

一、引言&#xff1a;为什么用协程实现 HTTP 服务器&#xff1f; 传统 HTTP 服务器的编程模型大致分为&#xff1a; 多线程阻塞型&#xff1a;每连接一线程&#xff0c;简洁但扩展性差 事件驱动模型&#xff08;如 epoll 状态机&#xff09;&#xff1a;高性能但逻辑复杂 回…

《视频:点亮数字时代的光影魔方》

视频的前世今生&#xff1a;从诞生到爆火 视频的发展历程是一部充满创新与变革的历史&#xff0c;它见证了科技的飞速进步和人类对信息传播与娱乐方式不断追求的过程。从早期的雏形到如今的全面普及&#xff0c;视频经历了多个重要阶段&#xff0c;每一个阶段都伴随着关键节点与…

秋招Day14 - MySQL - 运维

百万级别以上的数据如何删除&#xff1f; 这么大量的DELETE操作可能会导致长时间锁表 可以进行批量删除&#xff0c;把要删除的数据分为多个小批次处理。 也可以采用创建新表&#xff0c;把不需要删除的数据迁移过来&#xff0c;然后废弃旧表。需要检查新表空间是否足够、分…

(C++)vector数组相关基础用法(C++教程)(STL库基础教程)

源代码&#xff1a; #include <iostream> #include <vector> #include <string> using namespace std;int main(){char a;int b;int c;vector <char> numbers;cout<<"请输入一组字符&#xff08;按下#结束&#xff09;:\n";while(1){…

面试的问题

主题&#xff1a;LLM相关、多模态相关、python编程、java编程 参见&#xff1a;小红书面试相关的帖子 LLM相关&#xff1a; 02.大语言模型架构/1.attention/1.attention.md qzl66/llm_interview_note - Gitee.com 02.大语言模型架构/Transformer架构细节/Transformer架构细…

【EDA软件】【应用功能子模块网表提供和加载编译方法】

1.背景 使用者做FPGA应用开发&#xff0c;将开发成果交给自己的客户&#xff0c;但是并不想提供RTL源码以及加密的源码&#xff0c;只想提供网表文件。 2.方法 2.1 指定应用功能子模块设置为Top层&#xff1b; 2.2 运行综合&#xff0c;在outputs文件夹下会生成该应用功能子…

Spring:多数据源配置多个事务管理器DEMO

Spring配置文件&#xff1a; 配置2个事务管理器&#xff1a;txManager和txManager2 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLS…

通用 Excel 导出功能设计与实现:动态列选择与灵活配置

在企业级应用开发中&#xff0c;数据导出是高频需求。本文介绍一种支持动态列选择、灵活配置的通用 Excel 导出方案&#xff0c;通过前后端协同设计&#xff0c;实现导出字段、列顺序、数据格式的自定义&#xff0c;满足多样化业务场景。 一、功能架构设计 核心特性 动态字段…

安全壁垒 - K8s 的 RBAC、NetworkPolicy 与 SecurityContext 精要

安全壁垒 - K8s 的 RBAC、NetworkPolicy 与 SecurityContext 精要 如果说 Kubernetes 是我们构建云原生应用的“城市”,那么我们已经学会了如何规划道路(网络)、建设住宅(Pod 调度)、提供水电(存储)以及智能调节城市规模(自动伸缩)。现在,是时候为这座城市安装“城门…

服务器开放端口如何设置,本地内网开通应用端口让外网访问连接步骤

在互联网时代&#xff0c;服务器扮演着至关重要的角色&#xff0c;为了让本地搭建部署的服务器能够正常提供互联网服务&#xff0c;我们需要开放特定端口以供外部网络的客户端访问&#xff0c;本文将带领大家深入了解内网本地服务器如何设置端口开放给公网访问。 服务器开放端…

【深度学习新浪潮】什么是上下文工程?

什么是上下文工程? 上下文工程(Context Engineering) 是指通过设计、优化与大语言模型(LLM)交互时的输入内容(即“上下文”),引导模型生成更符合预期、更精准回答的系统性方法。这里的“上下文”通常包括 提示词(Prompt)、示例(Few-Shot Examples)、历史对话记录、…

Ansible ad-hoc模式常用三大模块“script、shell、command“应用笔记

script模块 - 外卖厨师 相当于你把做好的菜谱&#xff08;脚本文件&#xff09;分发给别人厨房执行 适合场景&#xff1a; ✓ 需要复杂菜谱&#xff08;多步骤脚本&#xff09; ✓ 保证每家分店味道一致&#xff08;环境标准化&#xff09; 示例&#xff1a;把《红烧肉制作指…

双重检查锁定实现的单例模式为什么需要volatile

今天介绍一下 单例模式(Singleton) 应用场景&#xff1a;配置管理类、数据库连接池、线程池 实现方式&#xff1a;双重检查锁定、静态内部类、枚举 public class ConfigManager {private static volatile ConfigManager instance;private ConfigManager() {}public static C…

Flink流水线+Gravitino+Paimon集成

1.数据源管理 1.1 添加Gravitino数据源 添加成功之后&#xff0c;会在Gravitino中创建一个名为配置的中的meatalake 1.2. 添加Paimon数据源 属性gravitinoId可以关联前面创建的Gravitino数据源&#xff0c;关联后&#xff0c;会在gravitino下创建一个该数据源的catalog。 2. …

关系代数详解与SQL示例

关系代数详解与SQL示例 关系代数是关系数据库的理论基础&#xff0c;它提供了一组操作符用于操作关系&#xff08;表&#xff09; 1. 基本操作 1.1 选择 (Selection, σ) 选择操作从关系中选择满足特定条件的元组&#xff08;行&#xff09;。 关系代数表示&#xff1a;σ条…

Android14音频子系统-Linux音频子系统ASoC-ALSA

文章目录 1、术语2、概述1&#xff09;资料快车 3、预备工作1&#xff09;codec - UDA1340 - 硬件规格2&#xff09;ASOC-ALSA代码重点目录介绍3&#xff09;ASOC-ALSA层级介绍4&#xff09;了解基本的软硬件架构 4、数据结构5、代码分析1&#xff09;Machine1、总体流程介绍2、…

零基础入门Java+大模型(持续更新)

0.初始一些常见的概念 AI&#xff1a;人工智能 大模型划分&#xff1a;&#xff08;本章了解一下这个就行&#xff09;NLP模型-->自然语言模型&#xff08;AI现在爆火的原因&#xff0c;就是自然语言模型这一块取得了很大的成就&#xff09;。 LLM&#xff1a;大语言模型…

数据库系统总结

数据库系统概述 数据库系统&#xff08;Database System, DBS&#xff09;是用于高效管理、存储和检索数据的软件系统。 数据库系统的组成包括&#xff1a;数据库、硬件、软件、人员。 三级模式-两级映像 内模式&#xff1a;管理如何存储物理的数据&#xff0c;对数据的存储…

2026-软件工程-《软件质量测试与保证》-期末复习—习题汇总

题量: 20 满分: 100 作答时间:06-04 17:30至06-22 23:59 智能分析 80分 一. 单选题&#xff08;共10题&#xff0c;50分&#xff09; (单选题)白盒测试设计测试用例的依据是( )。 A. 代码逻辑结构 B. 代码注释说明 C. 需求规格说明书 D. 用户使用场景 我的答案:A:代码逻辑结构…