IDEA项目实践——创建Java项目以及创建Maven项目案例、使用数据库连接池创建项目简介

系列文章目录

IDEA上面书写wordcount的Scala文件具体操作

IDEA创建项目的操作步骤以及在虚拟机里面创建Scala的项目简单介绍

目录

系列文章目录

前言

一 准备工作

1.1 安装Maven

1.1.1 Maven安装配置步骤

1.1.2 解压相关的软件包

1.1.3 Maven 配置环境变量

1.1.4 配置Maven的私服

1.2 创建一个本地的MySQL数据库和数据表

二 创建Java项目

2.1 方式一 数据库连接池druid

2.1.1 MySQL-connector-java资源分享链接

2.1.2 druid资源链接

2.2 创建Java项目步骤如下

2.2.1 创建项目目录

2.2.2  创建一个新的Java类

2.2.3 导入jar包 

 2.2.4 将jar包加载到library

 2.2.5 编写Java代码

版本一 

版本二

2.3 方式二 配置文件的形式加载

2.3.1 在src目录之下创建配置文件

2.3.2 在配置文件当中添加如下的信息

2.3.3 创建一个demo2的Java文件

 2.3.4 编辑Java代码

三 在IDEA上创建Maven项目来实现上述的功能

3.1 创建项目

 3.2 创建一个Java类

 3.3 编辑Java代码和配置文件

3.4 Java代码模块讲解

3.4.1 Java Scanner 类

3.4.2 系统添加数据模块方法

3.4.3  编辑MySQL与druid依赖

3.4.4 编辑插入数据方法

3.4.5 编辑查询代码

3.4.6  完整的优化后的代码

思考——如何优化上述的Java代码? 

总结


前言

本文主要介绍IDEA项目实践,创建Java项目以及创建Maven项目案例、使用数据库连接池创建项目简介

一 准备工作

1.1 安装Maven

Maven资源分享包

链接:https://pan.baidu.com/s/1D3SHLKTMTTUDYLv45EXgeg?pwd=kmdf 
提取码:kmdf

1.1.1 Maven安装配置步骤

1. 解压 apache-maven-3.6.1.rar 既安装完成
2. 配置环境变量 MAVEN_HOME 为安装 路径,在 Path 添加 %MAVEN_HOME%/bin 目录
3. 配置本地仓库:修改 conf /settings.xml 中的 < localRepository > 为一个指定目录
4. 配置阿里云私服:修改 conf /settings.xml 中的 <mirrors> 标签,为其添加如下子标签

1.1.2 解压相关的软件包

解压你的Maven包,放在你的文件夹里面,配置相关的本地仓库文件

1.1.3 Maven 配置环境变量

 打开Windows1的高级设置,配置相关的环境变量

第一处

MAVEN_HOME

D:\apache-maven-3.9.3

第二处 

 Path

%MAVEN_HOME%/bin

1.1.4 配置Maven的私服

 需要添加的内容如下:

<mirror>  
<id>alimaven</id>  
<name>aliyun maven</name>  
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>          
</mirror>

创建一个本地仓库文件夹【myRepository】你的仓库创建在你安装了Maven的地方。

在notepad++查找本地的【localRepository

没有notepad++也可以使用记事本编辑,只要将内容修改完,并且保存完成即可。

 在setting文件夹里面加入本地仓库位置

<localRepository>D:\apache-maven-3.9.3\myRepository</localRepository>

 查找mirrors位置,修改为阿里的私服。

 添加完成之后记得保存~

编辑完成之后退出。本地仓库就配置完成了。

1.2 创建一个本地的MySQL数据库和数据表

在此之前,需要配置本地MySQL服务的连接如下:

 MySQL以及MySQL workbench的安装与配置【超详细安装教程】

创建数据库和数据表的SQL语句 

// 创建名为 test 的数据库
CREATE DATABASE test;
// 使用 test 数据库
USE test;
// 创建名为 websites 的表
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;
// 在 websites 中插入数据
INSERT INTO `websites` VALUES ('1', 'Google', 'https://www.google.cm/', '2', 'USA'), 
('2', '淘宝', 'https://www.taobao.com/', '13', 'CN'), 
('3', '菜鸟教程', 'http://www.runoob.com', '5892', 'CN'), 
('4', '微博', 'http://weibo.com/', '20', 'CN'), 
('5', 'Facebook', 'https://www.facebook.com/', '3', 'USA'),
('6', 'JueJin', 'https://www.juejin.cn/', '2213', 'CN');

创建之后的数据库如下图所示的界面: 

二 创建Java项目

2.1 方式一 数据库连接池druid

创建步骤如下:

1. 导入jar包(mysql-connection-java.jar,druid.jar),同时加入到类加载路径中
2. 直接创建连接池对象:new对象 DruidDataSource
3. 然后设置属性。
   1. setDriverClassName()
   2. setUrl()
   3. setUsername()
   4. setPassword()
   5. setInitialSize()  //初始连接数
   6. setMaxSize()   //最大连接数
   7. setMaxWait()   //最大等待时间
4. 通过连接池对象,获取数据库连接

方式一的缺点:将MySQL的URL和用户以及密码是写死的,当你要修改的时候不好修改

2.1.1 MySQL-connector-java资源分享链接

MySQL-connector-java-8.0.31版本百度网盘连接

链接:https://pan.baidu.com/s/1A2NtVswiJjvxFB68GZ77Vw?pwd=wcmo 
提取码:wcmo

MySQL-connector-java-5.1.49版本百度网盘连接

链接:https://pan.baidu.com/s/1FPL23h6Ca7_Y0N_HYZSm0Q?pwd=6kwi 
提取码:6kwi

2.1.2 druid资源链接

druid-1.1.12版本

链接:https://pan.baidu.com/s/13Bwl-R3gN0fU5qHAGFHzwA?pwd=gu9g 
提取码:gu9g

2.2 创建Java项目步骤如下

2.2.1 创建项目目录

选择创建Java文件

 继续下一步

 创建你的问价存储位置,此处建议专门写一个存放IDEA项目的文件夹。

2.2.2  创建一个新的Java类

在src文件里面创建一个新的Java类

名字为: com.ambow.druid.DruidDemo

解释——前三个为包名称,后面为类名称。

2.2.3 导入jar包 

在项目里面新建一个文件夹导入前面的两个jar包【MySQL-connector-java-8.0.31和druid-1.1.12

】,需要自己创建一个libs文件夹存放这两个jar包。

 此处记得选择自己的MySQL对应的Java包,下载之后,将两个jar包复制,将其粘贴在libs文件夹里面即可。

 此处点击ok即可。

同上

 2.2.4 将jar包加载到library

在两个jar包上面,鼠标右键,选择as a library加载

 点击OK即可

 2.2.5 编写Java代码

版本一 

package com.ambow.druid;
import java.sql.*;
//方式一: druid的数据库连接池
public class DruidDemo {// MySQL 8.0 以下版本 - JDBC 驱动名及数据库 URL
//    static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
//    static final String DB_URL = "jdbc:mysql://localhost:3306/test";// MySQL 8.0 以上版本 - JDBC 驱动名及数据库 URLstatic final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";static final String DB_URL = "jdbc:mysql://localhost:3306/test?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";// 数据库的用户名与密码,需要根据自己的设置static final String USER = "root";static final String PASS = "root";public static void main(String[] args) {Connection conn = null;Statement stmt = null;try {// 注册 JDBC 驱动Class.forName(JDBC_DRIVER);// 打开链接System.out.println("连接数据库...");conn = DriverManager.getConnection(DB_URL, USER, PASS);// 执行查询System.out.println(" 实例化Statement对象...");stmt = conn.createStatement();String sql;sql = "SELECT id, name, url FROM websites";ResultSet rs = stmt.executeQuery(sql);// 展开结果集数据库while (rs.next()) {// 通过字段检索int id = rs.getInt("id");String name = rs.getString("name");String url = rs.getString("url");// 输出数据System.out.print("ID: " + id);System.out.print(", 站点名称: " + name);System.out.print(", 站点 URL: " + url);System.out.print("\n");}// 完成后关闭rs.close();stmt.close();conn.close();} catch (SQLException se) {// 处理 JDBC 错误se.printStackTrace();} catch (Exception e) {// 处理 Class.forName 错误e.printStackTrace();} finally {// 关闭资源try {if (stmt != null) stmt.close();} catch (SQLException se2) {}// 什么都不做try {if (conn != null) conn.close();} catch (SQLException se) {se.printStackTrace();}}System.out.println("Goodbye!");}
}

运行结果如下:

版本二

代码演示

package com.ambow.druid;import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidPooledConnection;import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/*方式一: 直接创建DruidDataSource ,然后设置属性*/
public class DruidDemo {public static void main(String[] args) throws SQLException {DruidDataSource dds = new DruidDataSource();dds.setDriverClassName("com.mysql.cj.jdbc.Driver");dds.setUrl("jdbc:mysql://localhost:3306/test?serverTimezone=UTC");dds.setUsername("root");dds.setPassword("root");dds.setInitialSize(5);//初识连接数dds.setMaxActive(10);//最大连接数dds.setMaxWait(3000);//最大等待时间//获取连接DruidPooledConnection connection = dds.getConnection();System.out.println(connection);//获取执行语句对象String sql = "select * from websites";PreparedStatement pstmt = connection.prepareStatement(sql);//获取结果集ResultSet rs = pstmt.executeQuery();while (rs.next()){System.out.println(rs.getInt(1) + "-" + rs.getString(2) + "-" +          rs.getString(3) + "-" +  rs.getInt(4) + "-" +  rs.getString(5));}/*jdbc连接的四个参数:driverurlusernamepassword*/}
}

 运行结果:

2.3 方式二 配置文件的形式加载

  •  导入jar包 mysql-connection-java.jar、druid-1.1.12.jar
  •  定义配置文件
  •  加载配置文件
  •  获取数据库连接池对象
  •  获取连接

此处的代码实现,首先也需要先将druid的jar包放到项目下的lib下并添加为库文件,与前面一样的形式创建。

2.3.1 在src目录之下创建配置文件

文件名称为: druid.properties

PS:Java里面的配置文件为properties类型

2.3.2 在配置文件当中添加如下的信息

将用户以及密码哪些信息写入配置文件 

此处为8.0以上版本的书写方法

driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql:///test?serverTimezone=UTC
username=root
password=root
# 初始化连接数量
initialSize=5
# 最大连接数
maxActive=10
# 最大等待时间
maxWait=3000

以下为5.1 版本的写法【举例如下】

driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://182.168.1.1/test
username=root
password=root
# ???????
initialSize=5
# ?????
maxActive=10
# ??????
maxWait=3000//前面的是IP地址以及数据库的名称

2.3.3 创建一个demo2的Java文件

 

 2.3.4 编辑Java代码

此处只是一个获取连接的代码 

package com.ambow.druid;import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.util.Properties;/*方式二:提取配置文件(把连接数据库的参数,抽取出来)*/
public class DruidDemo2 {public static void main(String[] args) throws Exception {//获取当前项目的根目录System.out.println(System.getProperty("user.dir"));// 加载配置文件Properties prop = new Properties();//FileInputStream is = new FileInputStream("src/druid.properties");InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("druid.properties");prop.load(is);// 获取数据库连接池对象DataSource ds = DruidDataSourceFactory.createDataSource(prop);// 获取连接Connection connection = ds.getConnection();System.out.println(connection);}
}

运行结果:

 注意:

System.getProperty("user.dir"),在web项目,返回值就不是项目的根目录了,而是tomcat的bin目录。

三 在IDEA上创建Maven项目来实现上述的功能

3.1 创建项目

在file里面选择创建新的项目,选择Maven项目

 填写项目的名称,以及公司名称

 点击finsh即可。

此处补全一个资源文件夹

 3.2 创建一个Java类

 3.3 编辑Java代码和配置文件

编辑配置文件的方法与2.3.2 一样,此处不再赘述。 

在刚才的类里面编辑Java代码

package com.ambow.druid;import java.sql.*;
import java.util.Scanner;public class App {static final String JDBC_DRIVER="com.mysql.cj.jdbc.Driver";static final String DB_URL="jdbc:mysql://localhost:3306/test";static final String USER = "root";static final String PASS ="root";static Scanner sc =new Scanner(System.in);//成为类成员前面加入static修饰public static void main(String[] args) throws SQLException {
//        DruidDataSource dds = new DruidDataSource();
//        dds.setDriverClassName("com.mysql.jdbc.Driver");
//        dds.setUrl("jdbc:mysql://192.168.127.100:3306/db2");
//        dds.setUsername("root");
//        dds.setPassword("Admin2023!");
//        dds.setInitialSize(5);
//        dds.setMaxActive(10);
//        dds.setMaxWait(3000);
//        DruidPooledConnection connection = dds.getConnection();
//        System.out.println(connection);//加入循环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("**********************************");System.out.println("请选择:");//静态方法只能访问静态变量int choose = sc.nextInt();switch (choose){case 1:addWebSite();break;case  2:modifyWebSite();break;case 3:dropWebSite();break;case 4:queryWebSite();break;case 0:System.out.println("退出系统");System.exit(0);break;default:System.out.println("对不起,您的选择有误!");break;}}}//        String sql ="select * from websites";
//        PreparedStatement pstmt =connection.prepareStatement(sql);
//        ResultSet rs = pstmt.executeQuery();
//        while (rs.next()){
//            System.out.println(rs.getInt(1) +"-"+ rs.getString(2) +"-"+ rs.getString(3)
//                    +"-"+ rs.getInt(4) +"-"+ rs.getString(5));
//        }
//        rs.close();
//        pstmt.close();
//        connection.close();
//    }private static void addWebSite() {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();Connection conn = null;PreparedStatement pstmt = null;try {Class.forName((JDBC_DRIVER));conn = DriverManager.getConnection(DB_URL, USER, PASS);String sql ="insert into websites values(null,?,?,?,?)";pstmt = conn.prepareStatement(sql);pstmt.setString(1,name);pstmt.setString(2,url);pstmt.setInt(3,alexa);pstmt.setString(4,country);pstmt.executeUpdate();System.out.println("添加站点成功!");}catch (SQLException se){se.printStackTrace();}catch (Exception e){e.printStackTrace();}finally {try{if(pstmt!=null) pstmt.close();}catch (SQLException se2){}try{if(conn!=null) conn.close();}catch (SQLException se){se.printStackTrace();}}}private static void modifyWebSite() {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();Connection conn = null;PreparedStatement pstmt = null;try {Class.forName((JDBC_DRIVER));conn = DriverManager.getConnection(DB_URL, USER, PASS);String sql ="update websites set url=?,alexa= ?,country=? where name=?";pstmt = conn.prepareStatement(sql);pstmt.setString(1,name);pstmt.setString(2,url);pstmt.setInt(3,alexa);pstmt.setString(4,country);pstmt.executeUpdate();System.out.println("修改站点成功!");}catch (SQLException se){se.printStackTrace();}catch (Exception e){e.printStackTrace();}finally {try{if(pstmt!=null) pstmt.close();}catch (SQLException se2){}try{if(conn!=null) conn.close();}catch (SQLException se){se.printStackTrace();}}}private static void dropWebSite() {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();Connection conn = null;PreparedStatement pstmt = null;try {Class.forName((JDBC_DRIVER));conn = DriverManager.getConnection(DB_URL, USER, PASS);String sql ="delete from websites where name=?";pstmt = conn.prepareStatement(sql);pstmt.setString(1,name);
//            pstmt.setString(2,url);
//            pstmt.setInt(3,alexa);
//            pstmt.setString(4,country);pstmt.executeUpdate();System.out.println("删除站点成功!");}catch (SQLException se){se.printStackTrace();}catch (Exception e){e.printStackTrace();}finally {try{if(pstmt!=null) pstmt.close();}catch (SQLException se2){}try{if(conn!=null) conn.close();}catch (SQLException se){se.printStackTrace();}}}private static void queryWebSite() {
//        System.out.println("请输入要查询的站点名称:");
//        String name = sc.next("name");
//        System.out.println("请输入站点URL:");
//       String url = sc.next("url");
//        System.out.println("请输入站点alexa:");
//        int alexa = sc.nextInt(Integer.parseInt("alexa"));
//        System.out.println("请输入站点所属国家:");
//        String country = sc.next("country");Connection conn = null;PreparedStatement pstmt = null;try {Class.forName((JDBC_DRIVER));conn = DriverManager.getConnection(DB_URL, USER, PASS);Statement stmt = conn.createStatement();String sql ="SELECT id,name,url FROM websites";ResultSet rs = stmt.executeQuery(sql);//pstmt = conn.prepareStatement(sql);
//            pstmt.setString(name);
//            pstmt.setString(2,url);
//            pstmt.setInt(3,alexa);
//            pstmt.setString(4,country);
//            System.out.print("name");
//            System.out.print("url");
//            System.out.print("alexa");
//            System.out.print("country");
//            System.out.print("\n");//pstmt.executeQuery();// System.out.println("查询站点成功!");while (rs.next()){int id =rs.getInt("id");String name = rs.getString("name");String url = rs.getString("url");System.out.print("id"+":"+id+"-");System.out.print("name"+":"+name+"-");System.out.print("url"+":"+url);System.out.print("\n");System.out.println("查询站点成功!");}rs.close();stmt.close();conn.close();}catch (SQLException se){se.printStackTrace();}catch (Exception e){e.printStackTrace();}finally {try{if(pstmt!=null) pstmt.close();}catch (SQLException se2){}try{if(conn!=null) conn.close();}catch (SQLException se){se.printStackTrace();}}}
}

运行结果如下:

 

查看MySQL里面的表信息可以看到信息添加成功了。 

 

 修改站点信息

 删除站点

 删除之后的恢复为原来的情况

最后退出系统。

3.4 Java代码模块讲解

3.4.1 Java Scanner 类

java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入。

下面是创建 Scanner 对象的基本语法:

Scanner s = new Scanner(System.in);

Scanner 类的 next() 与 nextLine() 方法获取输入的字符串,在读取数据前我们一般需要 使用 hasNext 与 hasNextLine 判断是否还有输入的数据。

next() 、nextInt() 、nextLine() 区别

next():

  • 1、一定要读取到有效字符后才可以结束输入。
  • 2、对输入有效字符之前遇到的空白,next() 方法会自动将其去掉。
  • 3、只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
  • next() 不能得到带有空格的字符串。

nextLine():

  • 1、以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符。
  • 2、可以获得空白。

如果要输入 int 或 float 类型的数据,在 Scanner 类中也有支持,但是在输入之前最好先使用 hasNextXxx() 方法进行验证,再使用 nextXxx() 来读取。

nextInt()、nextLine()区别:

  • 1.nextInt()只会读取数值,剩下"\n"还没有读取,并将cursor放在本行中。
  • 2.nextLine()会读取"\n",并结束(nextLine() reads till the end of line \n)。
  • 3.如果想要在nextInt()后读取一行,就得在nextInt()之后额外加上cin.nextLine()

nextInt() 一定要读取到有效字符后才可以结束输入,对输入有效字符之前遇到的空格键、Tab键或Enter键等结束符,nextInt() 方法会自动将其去掉,只有在输入有效字符之后,nextInt()方法才将其后输入的空格键、Tab键或Enter键等视为分隔符或结束符。简单地说,nextInt()查找并返回来自此扫描器的下一个完整标记。完整标记的前后是与分隔模式匹配的输入信息,所以next方法不能得到带空格的字符串。
  而nextLine() 方法的结束符只是Enter键,即nextLine() 方法返回的是Enter键之前的所有字符,它是可以得到带空格的字符串的。
  可以看到,nextLine() 自动读取了被nextInt() 去掉的Enter作为他的结束符,所以没办法给s2从键盘输入值。经过验证,我发现其他的next的方法,如double nextDouble() , float nextFloat() , int nextInt() 等与nextLine() 连用时都存在这个问题,解决的办法是:在每一个 next() 、nextDouble() 、 nextFloat()、nextInt() 等语句之后加一个nextLine() 语句,将被next() 去掉的Enter结束符过滤掉。

此处使用的是scanner对象的nextInt()方法,使用switch-case分支进行判断需要执行的选项是那个。

Scanner sc =new Scanner(System.in);int choose = sc.nextInt();switch (choose){case 1:addWebSite();break;case  2:modifyWebSite();break;case 3:dropWebSite();break;case 4:queryWebSite();break;case 0:System.out.println("退出系统");System.exit(0);break;default:System.out.println("对不起,您的选择有误!");break;}

在新定义的方法上面按住alt+回车既可以出现快捷方式,点击第一个创建一个方法。 

 创建完成之后新增while(true)让程序可以一直执行,程序的中断将会由输入的0来决定退出去。

 完整的这一块代码

public static void main(String[] args) throws SQLException {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("**********************************");System.out.println("请选择:");Scanner sc =new Scanner(System.in);int choose = sc.nextInt();switch (choose){case 1:addWebSite();break;case  2:modifyWebSite();break;case 3:dropWebSite();break;case 4:queryWebSite();break;case 0:System.out.println("退出系统");System.exit(0);break;default:System.out.println("对不起,您的选择有误!");break;}}}

3.4.2 系统添加数据模块方法

例如以下的方法

private static void dropWebSite() {System.out.println("请输入要删除的站点名称:");//sc.next方法将不会用到//前面设置的sc变量是只能在main方法里面使用,要想使用需要将sc变量放在外面使用
}

解决方法:将sc变量放在main方法外面即可。变成整个类的作用方法

 虽然提出来了,但是scanner的方法仍然不能使用,会出错,原因是sc为成员变量,main是静态的方法,静态的方法只能访问静态的方法,不能访问类里面的变量,需要将scanner变成一个静态的变量。

加入关键字static即可访问其方法

 

 接下来继续编写方法原来实现相关功能

3.4.3  编辑MySQL与druid依赖

官方的网站链接如下:

Maven Repository: Search/Browse/Explore (mvnrepository.com)

在官方网站里面直接搜素需要的依赖即可

 选择mysql搜素,选择访问比较多的即可

 红色框住的是8.0版本以上的,选择自己的对应版本即可。此处小编的版本为8.0的版本,选择这个即可

 

 点击此处蓝色框住的部分即可复制,出现红色的提示即是复制成功

 代码部分

<dependencies><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>8.0.31</version></dependency></dependencies>

 粘贴过来的显示为红色,如果之前未安装此组件的话,会有一个刷新的图标,点击一下,完成安装,安装完成之后红色部分会变成白色。

 

出现这种情况既是安装完成。 

搜索druid依赖,点击第一个即可

 选择自己的对应版本

 

 代码部分如下:

<!-- https://mvnrepository.com/artifact/com.alibaba/druid --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.8</version></dependency>

粘贴上述代码即可。

3.4.4 编辑插入数据方法

前面先给用户一个输入区,并且将输入的内容编辑为相关的变量暂时存在内存区,此时的数据并没有保存到数据库里面。

下面加入配置文件原来访问数据库,设置与前面的2.3.2 编辑配置文件相同。

利用类加载器原来加载配置文件,让文件以流的形式读进来,

选择alt+enter,选择第二个,让异常抛出

此处还有异常,将异常的这段代码放在try-catch里面捕获一下抛出

 这样捕获异常

 

捕获完成之后会自动放在catch语句里面 

// 加载配置文件Properties prop = new Properties();InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("druid.properties");try {prop.load(is);// 获取数据库连接池对象DataSource ds = DruidDataSourceFactory.createDataSource(prop);// 获取连接Connection connection = ds.getConnection();} catch (IOException e) {e.printStackTrace();} catch (SQLException throwables) {throwables.printStackTrace();} catch (Exception e) {e.printStackTrace();}

此处创建一个预编译对象

 完成之后使用其方法获取相关的数据,将其插入到数据库里面。

完整的插入代码

private static void addWebSite() {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();// 1 加载配置文件Properties prop = new Properties();InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("druid.properties");try {prop.load(is);// 2 获取数据库连接池对象DataSource ds = DruidDataSourceFactory.createDataSource(prop);// 3 获取连接Connection connection = ds.getConnection();// 4 执行SQL//插入SQL语句,?为占位符String sql ="insert into websites values(null,?,?,?,?)";//创建PreparedStatement预编译执行对象,将传入的SQL语句读出来。PreparedStatement stmt = connection.prepareStatement(sql);//设置参数stmt.setString(1,name);stmt.setString(2,url);stmt.setInt(3,alexa);stmt.setString(4,country);stmt.executeUpdate();// 获取插入完成的值,一般插入完成之后会出现·插入影响的行数// 将返回变量的类型设置为int型int row = stmt.executeUpdate();//提示一下if (row != 0){System.out.println("添加站点成功!");}} catch (IOException e) {e.printStackTrace();} catch (SQLException throwables) {throwables.printStackTrace();} catch (Exception e) {e.printStackTrace();}
}

3.4.5 编辑查询代码

PS:此处为未经优化的代码段 ,后续有优化之后的代码段。

在上述的插入代码的基础之上编辑查询代码即可。

private static void queryWebSite() {// 1 加载配置文件Properties prop = new Properties();InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("druid.properties");try {prop.load(is);// 2 获取数据库连接池对象DataSource ds = DruidDataSourceFactory.createDataSource(prop);// 3 获取连接Connection connection = ds.getConnection();// 4 执行SQL//插入SQL语句,?为占位符String sql ="select * from websites";//创建PreparedStatement预编译执行对象,将传入的SQL语句读出来。PreparedStatement stmt = connection.prepareStatement(sql);//设置返回的参数,此处的返回值为结果集ResultSet rs = stmt.executeQuery();// 获取查询到的结果集while (rs.next()){// 将结果集拼接起来System.out.println(rs.getInt(1) + "-" + rs.getString(2) + "-" +  rs.getString(3)+ "-" +  rs.getInt(4) + "-" +  rs.getString(5));}} catch (IOException e) {e.printStackTrace();} catch (SQLException throwables) {throwables.printStackTrace();} catch (Exception e) {e.printStackTrace();}}

此处的获取数据库连接可以创建一个DruidUtil类来专门获取数据库连接

工具类的完整代码【此处就是将获取数据库连接的部分一一个类的形式创建,此时可以优化一下之前的代码】

优化之后的插入数据代码

private static void addWebSite() {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();try {// 3 获取连接,此处使用类方法进行调用。Connection connection = DruidUtil.getConn();// 4 执行SQL//插入SQL语句,?为占位符String sql ="insert into websites values(null,?,?,?,?)";//创建PreparedStatement预编译执行对象,将传入的SQL语句读出来。PreparedStatement stmt = connection.prepareStatement(sql);//设置参数stmt.setString(1,name);stmt.setString(2,url);stmt.setInt(3,alexa);stmt.setString(4,country);stmt.executeUpdate();// 获取插入完成的值,一般插入完成之后会出现·插入影响的行数// 将返回变量的类型设置为int型int row = stmt.executeUpdate();//提示一下if (row != 0){System.out.println("添加站点成功!");}// 原先的异常处理也就不再需要,直接删除即可} catch (SQLException throwables) {throwables.printStackTrace();} catch (Exception e) {e.printStackTrace();}}

优化之后的查询代码

private static void queryWebSite() {try {// 3 获取连接Connection connection = DruidUtil.getConn();// 4 执行SQL//插入SQL语句,?为占位符String sql ="select * from websites";//创建PreparedStatement预编译执行对象,将传入的SQL语句读出来。PreparedStatement stmt = connection.prepareStatement(sql);//设置返回的参数,此处的返回值为结果集ResultSet rs = stmt.executeQuery();// 获取查询到的结果集while (rs.next()){// 将结果集拼接起来System.out.println(rs.getInt(1) + "-" + rs.getString(2) + "-" +  rs.getString(3)+ "-" +  rs.getInt(4) + "-" +  rs.getString(5));}} catch (SQLException throwables) {throwables.printStackTrace();} catch (Exception e) {e.printStackTrace();}}

3.4.6  完整的优化后的代码

package com.ambow.druid;import java.sql.*;
import java.util.Scanner;public class work01 {static Scanner sc =new Scanner(System.in);public static void main(String[] args){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("**********************************");System.out.println("请选择:");Scanner sc = new Scanner(System.in);int choose = sc.nextInt();switch (choose) {case 1:addWebSite();break;case 2:modifyWebSite();break;case 3:dropWebSite();break;case 4:queryWebSite();break;case 0:System.out.println("退出系统");System.exit(0);break;default:System.out.println("对不起,您的选择有误!");break;}}}private static void addWebSite() {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();try {// 3 获取连接,此处使用类方法进行调用。Connection connection = DruidUtil.getConn();// 4 执行SQL//插入SQL语句,?为占位符String sql ="insert into websites values(null,?,?,?,?)";//创建PreparedStatement预编译执行对象,将传入的SQL语句读出来。PreparedStatement stmt = connection.prepareStatement(sql);//设置参数stmt.setString(1,name);stmt.setString(2,url);stmt.setInt(3,alexa);stmt.setString(4,country);stmt.executeUpdate();// 获取插入完成的值,一般插入完成之后会出现·插入影响的行数// 将返回变量的类型设置为int型int row = stmt.executeUpdate();//提示一下if (row != 0){System.out.println("添加站点成功!");}// 原先的异常处理也就不再需要,直接删除即可} catch (SQLException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}}private static void modifyWebSite() {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();try {// 3 获取连接Connection connection = DruidUtil.getConn();// 4 执行SQL//插入SQL语句,?为占位符String sql ="update websites set url=?,alexa= ?,country=? where name=?";//创建PreparedStatement预编译执行对象,将传入的SQL语句读出来。PreparedStatement stmt = connection.prepareStatement(sql);//设置参数stmt = connection.prepareStatement(sql);stmt.setString(1,name);stmt.setString(2,url);stmt.setInt(3,alexa);stmt.setString(4,country);stmt.executeUpdate();int row = stmt.executeUpdate();//提示一下if (row != 0){System.out.println("修改站点成功!");}} catch (SQLException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}}private static void dropWebSite() {System.out.println("请输入要删除的站点名称:");String name = sc.next();try {// 3 获取连接Connection connection = DruidUtil.getConn();// 4 执行SQL//插入SQL语句,?为占位符String sql ="delete from websites where name=?";//创建PreparedStatement预编译执行对象,将传入的SQL语句读出来。PreparedStatement stmt = connection.prepareStatement(sql);//设置参数stmt.setString(1,name);stmt.executeUpdate();// 获取插入完成的值,一般插入完成之后会出现·插入影响的行数// 将返回变量的类型设置为int型int row = stmt.executeUpdate();//提示一下if (row != 0){System.out.println("删除站点成功!");}} catch (SQLException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}}private static void queryWebSite() {try {// 3 获取连接Connection connection = DruidUtil.getConn();// 4 执行SQL//插入SQL语句,?为占位符String sql ="select * from websites";//创建PreparedStatement预编译执行对象,将传入的SQL语句读出来。PreparedStatement stmt = connection.prepareStatement(sql);//设置返回的参数,此处的返回值为结果集ResultSet rs = stmt.executeQuery();// 获取查询到的结果集while (rs.next()){// 将结果集拼接起来System.out.println(rs.getInt(1) + "-" + rs.getString(2) + "-" +  rs.getString(3)+ "-" +  rs.getInt(4) + "-" +  rs.getString(5));}} catch (SQLException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}}
}

思考——如何优化上述的Java代码? 

优化方案——使用分层将代码分为几个模块

1、视图层

2、持久层 / 数据访问层 Dao -- Data  Access  Object  数据访问层

优化的方案将会在后续的文章当中给出具体的操作。

jdbc是硬编码的方式

SQL语句也是硬编码,缺点是不易维护

 mybatis框架

总结

以上就是今天的内容~

欢迎大家点赞👍,收藏⭐,转发🚀,
如有问题、建议,请您在评论区留言💬哦。

最后:转载请注明出处!!!

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

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

相关文章

[Docker实现测试部署CI/CD----相关服务器的安装配置(1)]

目录 0、CI/CD系统最终架构图规划IP地址 1、git配置Git下载pycharm配置gitidea配置git 2、GitLab安装与配置主机要求拉取镜像定义 compose.yml启动gitlab浏览器访问并修改密码查看登录密码修改密码 3、SonarQube 安装与配置拉取镜像修改虚拟内存的大小启动SonarQube登录 SonarQ…

mac pd安装ubuntu并配置远程连接

背景 一个安静的下午&#xff0c;我又想去折腾点什么了。准备学习一下k8s的&#xff0c;但是没有服务器。把我给折腾的&#xff0c;在抱怨了&#xff1a;为什么M系列芯片的资源怎么这么少。 好在伙伴说&#xff0c;你可以尝试一下ubantu。于是&#xff0c;我只好在我的mac上安…

软件外包开发的GO语言特点

Go语言&#xff08;也称为Golang&#xff09;是由Google开发的一种编程语言。它具有许多特点&#xff0c;使其成为许多项目范围的优秀选择。Go语言适用于需要高性能、并发和简洁易读的项目&#xff0c;特别是面向网络和分布式应用的项目。今天和大家分享项目的特点及适用的项目…

【深度学习】SMILEtrack: SiMIlarity LEarning for Multiple Object Tracking,论文

论文&#xff1a;https://arxiv.org/abs/2211.08824 代码&#xff1a;https://github.com/WWangYuHsiang/SMILEtrack 文章目录 AbstractIntroductionRelated WorkTracking-by-DetectionDetection methodData association method Tracking-by-Attention Methodology架构概述外观…

TensorFlow项目练手(三)——基于GRU股票走势预测任务

项目介绍 项目基于GRU算法通过20天的股票序列来预测第21天的数据&#xff0c;有些项目也可以用LSTM算法&#xff0c;两者主要差别如下&#xff1a; LSTM算法&#xff1a;目前使用最多的时间序列算法&#xff0c;是一种特殊的RNN&#xff08;循环神经网络&#xff09;&#xf…

Python小白学习:超级详细的字典介绍(字典的定义、存储、修改、遍历元素和嵌套)

目录 一、字典简介1.1 创建字典1.2 访问字典中的值1.3 添加键值对1.4 修改字典中的值实例 1.5 删除键值对1.6 由多个类似对象组成的字典1.7 使用get()访问值1.8 练习题 二、遍历字典2.1 遍历所有键值对实例 2.2 遍历字典中的所有键2.3 按照特定顺序遍历字典中的所有键2.4 遍历字…

04 Ubuntu中的中文输入法的安装

在Ubuntu22.04这种版本相对较高的系统中安装中文输入法&#xff0c;一般推荐使用fctix5&#xff0c;相比于其他的输入法&#xff0c;这款输入法的推荐词要好得多&#xff0c;而且不会像ibus一样莫名其妙地失灵。 首先感谢文章《滑动验证页面》&#xff0c;我是根据这篇文章的教…

通用指令(汇编)

一、数据处理指令1&#xff09;数学运算数据运算指令的格式数据搬移指令立即数伪指令加法指令带进位的加法指令减法指令带借位的减法指令逆向减法指令乘法指令数据运算指令的扩展 2&#xff09;逻辑运算按位与指令按位或指令按位异或指令左移指令右移指令位清零指令 3&#xff…

前端实现打印1 - 使用 iframe 实现 并 分页打印

目录 打印代码对话框预览打印预览 打印代码 <!-- 打印 --> <template><el-dialogtitle"打印":visible.sync"dialogVisible"width"50%"top"7vh"append-to-bodyclose"handleClose"><div ref"print…

STM32 DHT11

DHT11 DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。 使用单总线通信 该传感器包括一个电容式感湿元件和一个NTC测温元件&#xff0c;并于一个高性能8位单片机相连&#xff08;模数转换&#xff09;。 DHT11引脚说明 开漏模式下没有输出高电平的能…

Embedding入门介绍以及为什么Embedding在大语言模型中很重要

Embeddings技术简介及其历史概要 在机器学习和自然语言处理中&#xff0c;embedding是指将高维度的数据&#xff08;例如文字、图片、音频&#xff09;映射到低维度空间的过程。embedding向量通常是一个由实数构成的向量&#xff0c;它将输入的数据表示成一个连续的数值空间中…

Java版本spring cloud + spring boot企业电子招投标系统源代码 tbms

​ 功能模块&#xff1a; 待办消息&#xff0c;招标公告&#xff0c;中标公告&#xff0c;信息发布 描述&#xff1a; 全过程数字化采购管理&#xff0c;打造从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通供应商门户具备内外协同的能力&#xff0c;为…

Kubernetes概述

Kubernetes概述 使用kubeadm快速部署一个k8s集群 Kubernetes高可用集群二进制部署&#xff08;一&#xff09;主机准备和负载均衡器安装 Kubernetes高可用集群二进制部署&#xff08;二&#xff09;ETCD集群部署 Kubernetes高可用集群二进制部署&#xff08;三&#xff09;部署…

企业新片场排名如何优化

企业新片场排名如何优化 要如何去做关键SEO&#xff1f;第一个我们要做的就是做好 SEO 关键词的选词&#xff0c;一般就是会有第一个常用的选词方法&#xff0c;第一是以常用的提问词去做&#xff0c;不实像是情人节买什么礼物&#xff0c;母亲节买什么礼物&#xff0c; 618 有…

推荐前端开发者提升效率的工具

是否掌握新的技术很大程度决定着你是否被淘汰。 虽然应用程序试图将网站替代&#xff0c;但前端 Web 开发业务仍在快速变化和增长&#xff0c;前端开发人员的功能并没有消失。以下介绍一款前端开发者提升效率的工具。 目录 一、低代码工具前景 二、如何理解低代码工具 三、前端…

【怎么提高性能和解决高并发】

怎么解决高并发 解决高并发的整体流程大概是&#xff1a; 先进行性能评估、再进行性能测试、然后找到程序可以承受的临界点、最后针对出问题的地方&#xff0c;进行优化。当然硬件设置对高并发的影响也很重要&#xff0c;如果达到硬件天花板&#xff0c;那么再怎么优化程序都…

java gc分析

使用工具转换&#xff1a;https://ctbots.com/#/ 通用GC分析 jstat -gc -t pid堆内存分析 jstat -gccapacity -t pid年轻代GC分析 jstat -gcnew -t pid年轻代内存分析 jstat -gcnewcapacity -t pid老年代GC分析 jstat -gcold -t pid老年代内存分析 jstat -gcoldcapacity…

Ubuntu18.04 安装opencv 4.8.0教程(亲测可用)

1. 安装准备 安装前需要下载一些必须的依赖项。 不同版本opencv依赖会有不同&#xff0c;具体见官网opencv安装 sudo apt-get install build-essential sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev sudo apt-…

AI大模型之花,绽放在鸿蒙沃土

随着生成式AI日益火爆&#xff0c;大语言模型能力引发了越来越多对于智慧语音助手的期待。 我们相信&#xff0c;AI大模型能力加持下的智慧语音助手一定会很快落地&#xff0c;这个预判不仅来自对AI大模型的观察&#xff0c;更来自对鸿蒙的了解。鸿蒙一定会很快升级大模型能力&…

拥抱创新:用Kotlin开发高效Android应用

拥抱创新&#xff1a;用Kotlin开发高效Android应用 引言 在当今数字时代&#xff0c;移动应用已经成为人们生活中不可或缺的一部分。无论是社交媒体、电子商务还是健康管理&#xff0c;移动应用已经深刻地影响了我们的生活方式。随着移动设备的普及和功能的增强&#xff0c;A…