企业网站建设的主要内容,万盛经开区规划建设局网站,网站的友情链接做多少个比较合适,湖南网站建设小公司系列文章目录
IDEA上面书写wordcount的Scala文件具体操作
IDEA创建项目的操作步骤以及在虚拟机里面创建Scala的项目简单介绍
目录
系列文章目录
前言
一 准备工作
1.1 安装Maven
1.1.1 Maven安装配置步骤
1.1.2 解压相关的软件包
1.1.3 Maven 配置环境变量
1.1.4 配…系列文章目录
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?pwdkmdf 提取码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
idalimaven/id
namealiyun maven/name
urlhttp://maven.aliyun.com/nexus/content/groups/public//url
mirrorOfcentral/mirrorOf
/mirror
先创建一个本地仓库文件夹【myRepository】你的仓库创建在你安装了Maven的地方。 在notepad查找本地的【localRepository】 没有notepad也可以使用记事本编辑只要将内容修改完并且保存完成即可。 在setting文件夹里面加入本地仓库位置
localRepositoryD:\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)
) ENGINEInnoDB AUTO_INCREMENT10 DEFAULT CHARSETutf8;
// 在 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.jardruid.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?pwdwcmo 提取码wcmo MySQL-connector-java-5.1.49版本百度网盘连接 链接https://pan.baidu.com/s/1FPL23h6Ca7_Y0N_HYZSm0Q?pwd6kwi 提取码6kwi 2.1.2 druid资源链接
druid-1.1.12版本 链接https://pan.baidu.com/s/13Bwl-R3gN0fU5qHAGFHzwA?pwdgu9g 提取码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?useSSLfalseallowPublicKeyRetrievaltrueserverTimezoneUTC;// 数据库的用户名与密码需要根据自己的设置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?serverTimezoneUTC);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 PSJava里面的配置文件为properties类型 2.3.2 在配置文件当中添加如下的信息
将用户以及密码哪些信息写入配置文件
此处为8.0以上版本的书写方法
driverClassNamecom.mysql.cj.jdbc.Driver
urljdbc:mysql:///test?serverTimezoneUTC
usernameroot
passwordroot
# 初始化连接数量
initialSize5
# 最大连接数
maxActive10
# 最大等待时间
maxWait3000
以下为5.1 版本的写法【举例如下】
driverClassNamecom.mysql.cj.jdbc.Driver
urljdbc:mysql://182.168.1.1/test
usernameroot
passwordroot
# ???????
initialSize5
# ?????
maxActive10
# ??????
maxWait3000//前面的是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_DRIVERcom.mysql.cj.jdbc.Driver;static final String DB_URLjdbc: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回车既可以出现快捷方式点击第一个创建一个方法。 创建完成之后新增whiletrue让程序可以一直执行程序的中断将会由输入的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的版本选择这个即可 点击此处蓝色框住的部分即可复制出现红色的提示即是复制成功 代码部分
dependenciesdependencygroupIdcom.mysql/groupIdartifactIdmysql-connector-j/artifactIdversion8.0.31/version/dependency/dependencies 粘贴过来的显示为红色如果之前未安装此组件的话会有一个刷新的图标点击一下完成安装安装完成之后红色部分会变成白色。 出现这种情况既是安装完成。
搜索druid依赖点击第一个即可 选择自己的对应版本 代码部分如下
!-- https://mvnrepository.com/artifact/com.alibaba/druid --dependencygroupIdcom.alibaba/groupIdartifactIddruid/artifactIdversion1.2.8/version/dependency
粘贴上述代码即可。
3.4.4 编辑插入数据方法
前面先给用户一个输入区并且将输入的内容编辑为相关的变量暂时存在内存区此时的数据并没有保存到数据库里面。 下面加入配置文件原来访问数据库设置与前面的2.3.2 编辑配置文件相同。
利用类加载器原来加载配置文件让文件以流的形式读进来 选择altenter选择第二个让异常抛出
此处还有异常将异常的这段代码放在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框架
总结
以上就是今天的内容~
欢迎大家点赞收藏⭐转发 如有问题、建议请您在评论区留言哦。
最后转载请注明出处