当前位置:   article > 正文

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

idea新建java项目

系列文章目录

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的私服

 需要添加的内容如下:

  1. <mirror>
  2. <id>alimaven</id>
  3. <name>aliyun maven</name>
  4. <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
  5. <mirrorOf>central</mirrorOf>
  6. </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语句 

  1. // 创建名为 test 的数据库
  2. CREATE DATABASE test;
  3. // 使用 test 数据库
  4. USE test;
  5. // 创建名为 websites 的表
  6. CREATE TABLE `websites` (
  7. `id` int(11) NOT NULL AUTO_INCREMENT,
  8. `name` char(20) NOT NULL DEFAULT '' COMMENT '站点名称',
  9. `url` varchar(255) NOT NULL DEFAULT '',
  10. `alexa` int(11) NOT NULL DEFAULT '0' COMMENT 'Alexa 排名',
  11. `country` char(10) NOT NULL DEFAULT '' COMMENT '国家',
  12. PRIMARY KEY (`id`)
  13. ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
  14. // 在 websites 中插入数据
  15. INSERT INTO `websites` VALUES ('1', 'Google', 'https://www.google.cm/', '2', 'USA'),
  16. ('2', '淘宝', 'https://www.taobao.com/', '13', 'CN'),
  17. ('3', '菜鸟教程', 'http://www.runoob.com', '5892', 'CN'),
  18. ('4', '微博', 'http://weibo.com/', '20', 'CN'),
  19. ('5', 'Facebook', 'https://www.facebook.com/', '3', 'USA'),
  20. ('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代码

版本一 
  1. package com.ambow.druid;
  2. import java.sql.*;
  3. //方式一: druid的数据库连接池
  4. public class DruidDemo {
  5. // MySQL 8.0 以下版本 - JDBC 驱动名及数据库 URL
  6. // static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
  7. // static final String DB_URL = "jdbc:mysql://localhost:3306/test";
  8. // MySQL 8.0 以上版本 - JDBC 驱动名及数据库 URL
  9. static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
  10. static final String DB_URL = "jdbc:mysql://localhost:3306/test?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";
  11. // 数据库的用户名与密码,需要根据自己的设置
  12. static final String USER = "root";
  13. static final String PASS = "root";
  14. public static void main(String[] args) {
  15. Connection conn = null;
  16. Statement stmt = null;
  17. try {
  18. // 注册 JDBC 驱动
  19. Class.forName(JDBC_DRIVER);
  20. // 打开链接
  21. System.out.println("连接数据库...");
  22. conn = DriverManager.getConnection(DB_URL, USER, PASS);
  23. // 执行查询
  24. System.out.println(" 实例化Statement对象...");
  25. stmt = conn.createStatement();
  26. String sql;
  27. sql = "SELECT id, name, url FROM websites";
  28. ResultSet rs = stmt.executeQuery(sql);
  29. // 展开结果集数据库
  30. while (rs.next()) {
  31. // 通过字段检索
  32. int id = rs.getInt("id");
  33. String name = rs.getString("name");
  34. String url = rs.getString("url");
  35. // 输出数据
  36. System.out.print("ID: " + id);
  37. System.out.print(", 站点名称: " + name);
  38. System.out.print(", 站点 URL: " + url);
  39. System.out.print("\n");
  40. }
  41. // 完成后关闭
  42. rs.close();
  43. stmt.close();
  44. conn.close();
  45. } catch (SQLException se) {
  46. // 处理 JDBC 错误
  47. se.printStackTrace();
  48. } catch (Exception e) {
  49. // 处理 Class.forName 错误
  50. e.printStackTrace();
  51. } finally {
  52. // 关闭资源
  53. try {
  54. if (stmt != null) stmt.close();
  55. } catch (SQLException se2) {
  56. }// 什么都不做
  57. try {
  58. if (conn != null) conn.close();
  59. } catch (SQLException se) {
  60. se.printStackTrace();
  61. }
  62. }
  63. System.out.println("Goodbye!");
  64. }
  65. }

运行结果如下:

版本二

代码演示

  1. package com.ambow.druid;
  2. import com.alibaba.druid.pool.DruidDataSource;
  3. import com.alibaba.druid.pool.DruidPooledConnection;
  4. import java.sql.PreparedStatement;
  5. import java.sql.ResultSet;
  6. import java.sql.SQLException;
  7. /*
  8. 方式一: 直接创建DruidDataSource ,然后设置属性
  9. */
  10. public class DruidDemo {
  11. public static void main(String[] args) throws SQLException {
  12. DruidDataSource dds = new DruidDataSource();
  13. dds.setDriverClassName("com.mysql.cj.jdbc.Driver");
  14. dds.setUrl("jdbc:mysql://localhost:3306/test?serverTimezone=UTC");
  15. dds.setUsername("root");
  16. dds.setPassword("root");
  17. dds.setInitialSize(5);//初识连接数
  18. dds.setMaxActive(10);//最大连接数
  19. dds.setMaxWait(3000);//最大等待时间
  20. //获取连接
  21. DruidPooledConnection connection = dds.getConnection();
  22. System.out.println(connection);
  23. //获取执行语句对象
  24. String sql = "select * from websites";
  25. PreparedStatement pstmt = connection.prepareStatement(sql);
  26. //获取结果集
  27. ResultSet rs = pstmt.executeQuery();
  28. while (rs.next()){
  29. System.out.println(rs.getInt(1) + "-" + rs.getString(2) + "-" +
  30. rs.getString(3) + "-" + rs.getInt(4) + "-" + rs.getString(5));
  31. }
  32. /*
  33. jdbc连接的四个参数:
  34. driver
  35. url
  36. username
  37. password
  38. */
  39. }
  40. }

 运行结果:

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以上版本的书写方法

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

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

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

2.3.3 创建一个demo2的Java文件

 

 2.3.4 编辑Java代码

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

  1. package com.ambow.druid;
  2. import com.alibaba.druid.pool.DruidDataSourceFactory;
  3. import javax.sql.DataSource;
  4. import java.io.FileInputStream;
  5. import java.io.FileNotFoundException;
  6. import java.io.IOException;
  7. import java.io.InputStream;
  8. import java.sql.Connection;
  9. import java.util.Properties;
  10. /*
  11. 方式二:提取配置文件(把连接数据库的参数,抽取出来)
  12. */
  13. public class DruidDemo2 {
  14. public static void main(String[] args) throws Exception {
  15. //获取当前项目的根目录
  16. System.out.println(System.getProperty("user.dir"));
  17. // 加载配置文件
  18. Properties prop = new Properties();
  19. //FileInputStream is = new FileInputStream("src/druid.properties");
  20. InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("druid.properties");
  21. prop.load(is);
  22. // 获取数据库连接池对象
  23. DataSource ds = DruidDataSourceFactory.createDataSource(prop);
  24. // 获取连接
  25. Connection connection = ds.getConnection();
  26. System.out.println(connection);
  27. }
  28. }

运行结果:

 注意:

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

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

3.1 创建项目

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

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

 点击finsh即可。

此处补全一个资源文件夹

 3.2 创建一个Java类

 3.3 编辑Java代码和配置文件

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

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

  1. package com.ambow.druid;
  2. import java.sql.*;
  3. import java.util.Scanner;
  4. public class App {
  5. static final String JDBC_DRIVER="com.mysql.cj.jdbc.Driver";
  6. static final String DB_URL="jdbc:mysql://localhost:3306/test";
  7. static final String USER = "root";
  8. static final String PASS ="root";
  9. static Scanner sc =new Scanner(System.in);//成为类成员前面加入static修饰
  10. public static void main(String[] args) throws SQLException {
  11. // DruidDataSource dds = new DruidDataSource();
  12. // dds.setDriverClassName("com.mysql.jdbc.Driver");
  13. // dds.setUrl("jdbc:mysql://192.168.127.100:3306/db2");
  14. // dds.setUsername("root");
  15. // dds.setPassword("Admin2023!");
  16. // dds.setInitialSize(5);
  17. // dds.setMaxActive(10);
  18. // dds.setMaxWait(3000);
  19. // DruidPooledConnection connection = dds.getConnection();
  20. // System.out.println(connection);
  21. //加入循环
  22. while (true) {
  23. System.out.println("***********************************");
  24. System.out.println("*********** 站点管理系统 ***********");
  25. System.out.println("*********** 1.新增站点 ***********");
  26. System.out.println("*********** 2.修改站点 ***********");
  27. System.out.println("*********** 3.删除站点 ***********");
  28. System.out.println("*********** 4.查询站点 ***********");
  29. System.out.println("*********** 0.退出系统 ***********");
  30. System.out.println("**********************************");
  31. System.out.println("请选择:");
  32. //静态方法只能访问静态变量
  33. int choose = sc.nextInt();
  34. switch (choose){
  35. case 1:
  36. addWebSite();
  37. break;
  38. case 2:
  39. modifyWebSite();
  40. break;
  41. case 3:
  42. dropWebSite();
  43. break;
  44. case 4:
  45. queryWebSite();
  46. break;
  47. case 0:
  48. System.out.println("退出系统");
  49. System.exit(0);
  50. break;
  51. default:
  52. System.out.println("对不起,您的选择有误!");
  53. break;
  54. }
  55. }
  56. }
  57. // String sql ="select * from websites";
  58. // PreparedStatement pstmt =connection.prepareStatement(sql);
  59. // ResultSet rs = pstmt.executeQuery();
  60. // while (rs.next()){
  61. // System.out.println(rs.getInt(1) +"-"+ rs.getString(2) +"-"+ rs.getString(3)
  62. // +"-"+ rs.getInt(4) +"-"+ rs.getString(5));
  63. // }
  64. // rs.close();
  65. // pstmt.close();
  66. // connection.close();
  67. // }
  68. private static void addWebSite() {
  69. System.out.println("请输入站点名称:");
  70. String name = sc.next();
  71. System.out.println("请输入站点URL:");
  72. String url = sc.next();
  73. System.out.println("请输入站点alexa:");
  74. int alexa = sc.nextInt();
  75. System.out.println("请输入站点所属国家:");
  76. String country = sc.next();
  77. Connection conn = null;
  78. PreparedStatement pstmt = null;
  79. try {
  80. Class.forName((JDBC_DRIVER));
  81. conn = DriverManager.getConnection(DB_URL, USER, PASS);
  82. String sql ="insert into websites values(null,?,?,?,?)";
  83. pstmt = conn.prepareStatement(sql);
  84. pstmt.setString(1,name);
  85. pstmt.setString(2,url);
  86. pstmt.setInt(3,alexa);
  87. pstmt.setString(4,country);
  88. pstmt.executeUpdate();
  89. System.out.println("添加站点成功!");
  90. }catch (SQLException se){
  91. se.printStackTrace();
  92. }catch (Exception e){
  93. e.printStackTrace();
  94. }finally {
  95. try{
  96. if(pstmt!=null) pstmt.close();
  97. }catch (SQLException se2){
  98. }
  99. try{
  100. if(conn!=null) conn.close();
  101. }catch (SQLException se){
  102. se.printStackTrace();
  103. }
  104. }
  105. }
  106. private static void modifyWebSite() {
  107. System.out.println("请输入要修改的站点名称:");
  108. String name = sc.next();
  109. System.out.println("请输入新站点URL:");
  110. String url = sc.next();
  111. System.out.println("请输入新站点alexa:");
  112. int alexa = sc.nextInt();
  113. System.out.println("请输入新站点所属国家:");
  114. String country = sc.next();
  115. Connection conn = null;
  116. PreparedStatement pstmt = null;
  117. try {
  118. Class.forName((JDBC_DRIVER));
  119. conn = DriverManager.getConnection(DB_URL, USER, PASS);
  120. String sql ="update websites set url=?,alexa= ?,country=? where name=?";
  121. pstmt = conn.prepareStatement(sql);
  122. pstmt.setString(1,name);
  123. pstmt.setString(2,url);
  124. pstmt.setInt(3,alexa);
  125. pstmt.setString(4,country);
  126. pstmt.executeUpdate();
  127. System.out.println("修改站点成功!");
  128. }catch (SQLException se){
  129. se.printStackTrace();
  130. }catch (Exception e){
  131. e.printStackTrace();
  132. }finally {
  133. try{
  134. if(pstmt!=null) pstmt.close();
  135. }catch (SQLException se2){
  136. }
  137. try{
  138. if(conn!=null) conn.close();
  139. }catch (SQLException se){
  140. se.printStackTrace();
  141. }
  142. }
  143. }
  144. private static void dropWebSite() {
  145. System.out.println("请输入要删除的站点名称:");
  146. String name = sc.next();
  147. // System.out.println("请输入站点URL:");
  148. // String url = sc.next();
  149. // System.out.println("请输入站点alexa:");
  150. // int alexa = sc.nextInt();
  151. // System.out.println("请输入站点所属国家:");
  152. // String country = sc.next();
  153. Connection conn = null;
  154. PreparedStatement pstmt = null;
  155. try {
  156. Class.forName((JDBC_DRIVER));
  157. conn = DriverManager.getConnection(DB_URL, USER, PASS);
  158. String sql ="delete from websites where name=?";
  159. pstmt = conn.prepareStatement(sql);
  160. pstmt.setString(1,name);
  161. // pstmt.setString(2,url);
  162. // pstmt.setInt(3,alexa);
  163. // pstmt.setString(4,country);
  164. pstmt.executeUpdate();
  165. System.out.println("删除站点成功!");
  166. }catch (SQLException se){
  167. se.printStackTrace();
  168. }catch (Exception e){
  169. e.printStackTrace();
  170. }finally {
  171. try{
  172. if(pstmt!=null) pstmt.close();
  173. }catch (SQLException se2){
  174. }
  175. try{
  176. if(conn!=null) conn.close();
  177. }catch (SQLException se){
  178. se.printStackTrace();
  179. }
  180. }
  181. }
  182. private static void queryWebSite() {
  183. // System.out.println("请输入要查询的站点名称:");
  184. // String name = sc.next("name");
  185. // System.out.println("请输入站点URL:");
  186. // String url = sc.next("url");
  187. // System.out.println("请输入站点alexa:");
  188. // int alexa = sc.nextInt(Integer.parseInt("alexa"));
  189. // System.out.println("请输入站点所属国家:");
  190. // String country = sc.next("country");
  191. Connection conn = null;
  192. PreparedStatement pstmt = null;
  193. try {
  194. Class.forName((JDBC_DRIVER));
  195. conn = DriverManager.getConnection(DB_URL, USER, PASS);
  196. Statement stmt = conn.createStatement();
  197. String sql ="SELECT id,name,url FROM websites";
  198. ResultSet rs = stmt.executeQuery(sql);
  199. //pstmt = conn.prepareStatement(sql);
  200. // pstmt.setString(name);
  201. // pstmt.setString(2,url);
  202. // pstmt.setInt(3,alexa);
  203. // pstmt.setString(4,country);
  204. // System.out.print("name");
  205. // System.out.print("url");
  206. // System.out.print("alexa");
  207. // System.out.print("country");
  208. // System.out.print("\n");
  209. //pstmt.executeQuery();
  210. // System.out.println("查询站点成功!");
  211. while (rs.next()){
  212. int id =rs.getInt("id");
  213. String name = rs.getString("name");
  214. String url = rs.getString("url");
  215. System.out.print("id"+":"+id+"-");
  216. System.out.print("name"+":"+name+"-");
  217. System.out.print("url"+":"+url);
  218. System.out.print("\n");
  219. System.out.println("查询站点成功!");
  220. }
  221. rs.close();
  222. stmt.close();
  223. conn.close();
  224. }catch (SQLException se){
  225. se.printStackTrace();
  226. }catch (Exception e){
  227. e.printStackTrace();
  228. }finally {
  229. try{
  230. if(pstmt!=null) pstmt.close();
  231. }catch (SQLException se2){
  232. }
  233. try{
  234. if(conn!=null) conn.close();
  235. }catch (SQLException se){
  236. se.printStackTrace();
  237. }
  238. }
  239. }
  240. }

运行结果如下:

 

查看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分支进行判断需要执行的选项是那个。

  1. Scanner sc =new Scanner(System.in);
  2. int choose = sc.nextInt();
  3. switch (choose){
  4. case 1:
  5. addWebSite();
  6. break;
  7. case 2:
  8. modifyWebSite();
  9. break;
  10. case 3:
  11. dropWebSite();
  12. break;
  13. case 4:
  14. queryWebSite();
  15. break;
  16. case 0:
  17. System.out.println("退出系统");
  18. System.exit(0);
  19. break;
  20. default:
  21. System.out.println("对不起,您的选择有误!");
  22. break;
  23. }

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

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

 完整的这一块代码

  1. public static void main(String[] args) throws SQLException {
  2. while (true) {
  3. System.out.println("***********************************");
  4. System.out.println("*********** 站点管理系统 ***********");
  5. System.out.println("*********** 1.新增站点 ***********");
  6. System.out.println("*********** 2.修改站点 ***********");
  7. System.out.println("*********** 3.删除站点 ***********");
  8. System.out.println("*********** 4.查询站点 ***********");
  9. System.out.println("*********** 0.退出系统 ***********");
  10. System.out.println("**********************************");
  11. System.out.println("请选择:");
  12. Scanner sc =new Scanner(System.in);
  13. int choose = sc.nextInt();
  14. switch (choose){
  15. case 1:
  16. addWebSite();
  17. break;
  18. case 2:
  19. modifyWebSite();
  20. break;
  21. case 3:
  22. dropWebSite();
  23. break;
  24. case 4:
  25. queryWebSite();
  26. break;
  27. case 0:
  28. System.out.println("退出系统");
  29. System.exit(0);
  30. break;
  31. default:
  32. System.out.println("对不起,您的选择有误!");
  33. break;
  34. }
  35. }
  36. }

3.4.2 系统添加数据模块方法

例如以下的方法

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

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

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

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

 

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

3.4.3  编辑MySQL与druid依赖

官方的网站链接如下:

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

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

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

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

 

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

 代码部分

  1. <dependencies>
  2. <dependency>
  3. <groupId>com.mysql</groupId>
  4. <artifactId>mysql-connector-j</artifactId>
  5. <version>8.0.31</version>
  6. </dependency>
  7. </dependencies>

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

 

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

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

 选择自己的对应版本

 

 代码部分如下:

  1. <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
  2. <dependency>
  3. <groupId>com.alibaba</groupId>
  4. <artifactId>druid</artifactId>
  5. <version>1.2.8</version>
  6. </dependency>

粘贴上述代码即可。

3.4.4 编辑插入数据方法

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

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

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

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

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

 这样捕获异常

 

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

  1. // 加载配置文件
  2. Properties prop = new Properties();
  3. InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("druid.properties");
  4. try {
  5. prop.load(is);
  6. // 获取数据库连接池对象
  7. DataSource ds = DruidDataSourceFactory.createDataSource(prop);
  8. // 获取连接
  9. Connection connection = ds.getConnection();
  10. } catch (IOException e) {
  11. e.printStackTrace();
  12. } catch (SQLException throwables) {
  13. throwables.printStackTrace();
  14. } catch (Exception e) {
  15. e.printStackTrace();
  16. }

此处创建一个预编译对象

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

完整的插入代码

  1. private static void addWebSite() {
  2. System.out.println("请输入站点名称:");
  3. String name = sc.next();
  4. System.out.println("请输入站点URL:");
  5. String url = sc.next();
  6. System.out.println("请输入站点alexa:");
  7. int alexa = sc.nextInt();
  8. System.out.println("请输入站点所属国家:");
  9. String country = sc.next();
  10. // 1 加载配置文件
  11. Properties prop = new Properties();
  12. InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("druid.properties");
  13. try {
  14. prop.load(is);
  15. // 2 获取数据库连接池对象
  16. DataSource ds = DruidDataSourceFactory.createDataSource(prop);
  17. // 3 获取连接
  18. Connection connection = ds.getConnection();
  19. // 4 执行SQL
  20. //插入SQL语句,?为占位符
  21. String sql ="insert into websites values(null,?,?,?,?)";
  22. //创建PreparedStatement预编译执行对象,将传入的SQL语句读出来。
  23. PreparedStatement stmt = connection.prepareStatement(sql);
  24. //设置参数
  25. stmt.setString(1,name);
  26. stmt.setString(2,url);
  27. stmt.setInt(3,alexa);
  28. stmt.setString(4,country);
  29. stmt.executeUpdate();
  30. // 获取插入完成的值,一般插入完成之后会出现·插入影响的行数
  31. // 将返回变量的类型设置为int型
  32. int row = stmt.executeUpdate();
  33. //提示一下
  34. if (row != 0){
  35. System.out.println("添加站点成功!");
  36. }
  37. } catch (IOException e) {
  38. e.printStackTrace();
  39. } catch (SQLException throwables) {
  40. throwables.printStackTrace();
  41. } catch (Exception e) {
  42. e.printStackTrace();
  43. }
  44. }

3.4.5 编辑查询代码

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

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

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

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

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

优化之后的插入数据代码

  1. private static void addWebSite() {
  2. System.out.println("请输入站点名称:");
  3. String name = sc.next();
  4. System.out.println("请输入站点URL:");
  5. String url = sc.next();
  6. System.out.println("请输入站点alexa:");
  7. int alexa = sc.nextInt();
  8. System.out.println("请输入站点所属国家:");
  9. String country = sc.next();
  10. try {
  11. // 3 获取连接,此处使用类方法进行调用。
  12. Connection connection = DruidUtil.getConn();
  13. // 4 执行SQL
  14. //插入SQL语句,?为占位符
  15. String sql ="insert into websites values(null,?,?,?,?)";
  16. //创建PreparedStatement预编译执行对象,将传入的SQL语句读出来。
  17. PreparedStatement stmt = connection.prepareStatement(sql);
  18. //设置参数
  19. stmt.setString(1,name);
  20. stmt.setString(2,url);
  21. stmt.setInt(3,alexa);
  22. stmt.setString(4,country);
  23. stmt.executeUpdate();
  24. // 获取插入完成的值,一般插入完成之后会出现·插入影响的行数
  25. // 将返回变量的类型设置为int型
  26. int row = stmt.executeUpdate();
  27. //提示一下
  28. if (row != 0){
  29. System.out.println("添加站点成功!");
  30. }
  31. // 原先的异常处理也就不再需要,直接删除即可
  32. } catch (SQLException throwables) {
  33. throwables.printStackTrace();
  34. } catch (Exception e) {
  35. e.printStackTrace();
  36. }
  37. }

优化之后的查询代码

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

3.4.6  完整的优化后的代码

  1. package com.ambow.druid;
  2. import java.sql.*;
  3. import java.util.Scanner;
  4. public class work01 {
  5. static Scanner sc =new Scanner(System.in);
  6. public static void main(String[] args){
  7. while(true) {
  8. System.out.println("***********************************");
  9. System.out.println("*********** 站点管理系统 ***********");
  10. System.out.println("*********** 1.新增站点 ***********");
  11. System.out.println("*********** 2.修改站点 ***********");
  12. System.out.println("*********** 3.删除站点 ***********");
  13. System.out.println("*********** 4.查询站点 ***********");
  14. System.out.println("*********** 0.退出系统 ***********");
  15. System.out.println("**********************************");
  16. System.out.println("请选择:");
  17. Scanner sc = new Scanner(System.in);
  18. int choose = sc.nextInt();
  19. switch (choose) {
  20. case 1:
  21. addWebSite();
  22. break;
  23. case 2:
  24. modifyWebSite();
  25. break;
  26. case 3:
  27. dropWebSite();
  28. break;
  29. case 4:
  30. queryWebSite();
  31. break;
  32. case 0:
  33. System.out.println("退出系统");
  34. System.exit(0);
  35. break;
  36. default:
  37. System.out.println("对不起,您的选择有误!");
  38. break;
  39. }
  40. }
  41. }
  42. private static void addWebSite() {
  43. System.out.println("请输入站点名称:");
  44. String name = sc.next();
  45. System.out.println("请输入站点URL:");
  46. String url = sc.next();
  47. System.out.println("请输入站点alexa:");
  48. int alexa = sc.nextInt();
  49. System.out.println("请输入站点所属国家:");
  50. String country = sc.next();
  51. try {
  52. // 3 获取连接,此处使用类方法进行调用。
  53. Connection connection = DruidUtil.getConn();
  54. // 4 执行SQL
  55. //插入SQL语句,?为占位符
  56. String sql ="insert into websites values(null,?,?,?,?)";
  57. //创建PreparedStatement预编译执行对象,将传入的SQL语句读出来。
  58. PreparedStatement stmt = connection.prepareStatement(sql);
  59. //设置参数
  60. stmt.setString(1,name);
  61. stmt.setString(2,url);
  62. stmt.setInt(3,alexa);
  63. stmt.setString(4,country);
  64. stmt.executeUpdate();
  65. // 获取插入完成的值,一般插入完成之后会出现·插入影响的行数
  66. // 将返回变量的类型设置为int型
  67. int row = stmt.executeUpdate();
  68. //提示一下
  69. if (row != 0){
  70. System.out.println("添加站点成功!");
  71. }
  72. // 原先的异常处理也就不再需要,直接删除即可
  73. } catch (SQLException e) {
  74. e.printStackTrace();
  75. } catch (Exception e) {
  76. e.printStackTrace();
  77. }
  78. }
  79. private static void modifyWebSite() {
  80. System.out.println("请输入要修改的站点名称:");
  81. String name = sc.next();
  82. System.out.println("请输入新站点URL:");
  83. String url = sc.next();
  84. System.out.println("请输入新站点alexa:");
  85. int alexa = sc.nextInt();
  86. System.out.println("请输入新站点所属国家:");
  87. String country = sc.next();
  88. try {
  89. // 3 获取连接
  90. Connection connection = DruidUtil.getConn();
  91. // 4 执行SQL
  92. //插入SQL语句,?为占位符
  93. String sql ="update websites set url=?,alexa= ?,country=? where name=?";
  94. //创建PreparedStatement预编译执行对象,将传入的SQL语句读出来。
  95. PreparedStatement stmt = connection.prepareStatement(sql);
  96. //设置参数
  97. stmt = connection.prepareStatement(sql);
  98. stmt.setString(1,name);
  99. stmt.setString(2,url);
  100. stmt.setInt(3,alexa);
  101. stmt.setString(4,country);
  102. stmt.executeUpdate();
  103. int row = stmt.executeUpdate();
  104. //提示一下
  105. if (row != 0){
  106. System.out.println("修改站点成功!");
  107. }
  108. } catch (SQLException e) {
  109. e.printStackTrace();
  110. } catch (Exception e) {
  111. e.printStackTrace();
  112. }
  113. }
  114. private static void dropWebSite() {
  115. System.out.println("请输入要删除的站点名称:");
  116. String name = sc.next();
  117. try {
  118. // 3 获取连接
  119. Connection connection = DruidUtil.getConn();
  120. // 4 执行SQL
  121. //插入SQL语句,?为占位符
  122. String sql ="delete from websites where name=?";
  123. //创建PreparedStatement预编译执行对象,将传入的SQL语句读出来。
  124. PreparedStatement stmt = connection.prepareStatement(sql);
  125. //设置参数
  126. stmt.setString(1,name);
  127. stmt.executeUpdate();
  128. // 获取插入完成的值,一般插入完成之后会出现·插入影响的行数
  129. // 将返回变量的类型设置为int型
  130. int row = stmt.executeUpdate();
  131. //提示一下
  132. if (row != 0){
  133. System.out.println("删除站点成功!");
  134. }
  135. } catch (SQLException e) {
  136. e.printStackTrace();
  137. } catch (Exception e) {
  138. e.printStackTrace();
  139. }
  140. }
  141. private static void queryWebSite() {
  142. try {
  143. // 3 获取连接
  144. Connection connection = DruidUtil.getConn();
  145. // 4 执行SQL
  146. //插入SQL语句,?为占位符
  147. String sql ="select * from websites";
  148. //创建PreparedStatement预编译执行对象,将传入的SQL语句读出来。
  149. PreparedStatement stmt = connection.prepareStatement(sql);
  150. //设置返回的参数,此处的返回值为结果集
  151. ResultSet rs = stmt.executeQuery();
  152. // 获取查询到的结果集
  153. while (rs.next()){
  154. // 将结果集拼接起来
  155. System.out.println(rs.getInt(1) + "-" + rs.getString(2) + "-" + rs.getString(3)
  156. + "-" + rs.getInt(4) + "-" + rs.getString(5));
  157. }
  158. } catch (SQLException e) {
  159. e.printStackTrace();
  160. } catch (Exception e) {
  161. e.printStackTrace();
  162. }
  163. }
  164. }

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

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

1、视图层

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

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

jdbc是硬编码的方式

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

 mybatis框架

总结

以上就是今天的内容~

欢迎大家点赞

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/667507
推荐阅读
相关标签