jdbc mysql user_tab_comments_MySQL学习(五)——使用JDBC完成用户表CRUD的操作

通过案例我们发现“获得连接”和“释放资源”两次代码将在之后的增删改查所有功能中都存在,开发中遇到此种情况,将采用工具类的方法进行抽取,从而达到代码的重复利用。

1、使用properties配置文件

开发中获得连接的4个参数(驱动、URL、用户名、密码)通常都存在配置文件中,方便后期维护,程序如果需要更换数据库,只需要修改配置文件即可。

文件要求如下:

1)文件位置:任意,建议在src下

2)文件名称:任意,扩展名为properties

3)文件内容:一行一组数据,格式是“key=value”.

a)key命名自定义,如果是多个单词,习惯使用点分隔。例如:jdbc.driver

b)value值不支持中文,如果需要使用非英文字符,将进行Unicode转换

2、创建配置文件

右击src->new->file命名...

1 driver=com.mysql.jdbc.Driver2 url=jdbc:mysql://localhost:3306/web08?useUnicode=true&characterEncoding=utf8

3 username=root4 password=12345

3.1、加载配置文件:ResourceBundle对象(JDBCUtils_V2.java文件)

1 packagecn.itheima.jdbc;2

3 importjava.sql.Connection;4 importjava.sql.DriverManager;5 importjava.sql.PreparedStatement;6 importjava.sql.ResultSet;7 importjava.sql.SQLException;8 importjava.util.ResourceBundle;9

10 /**

11 * 提供获取连接和释放资源的方法12 *@authorAdministrator13 *14 */

15 public classJDBCUtils_V2 {16 private static String driver; //驱动

17 private static String url; //路径

18 private static String username; //用户名

19 private static String password; //密码

20

21 /*

22 * 静态代码块加载配置文件信息23 */

24 static{25 //1.使用JDK提供的工具类加载properties文件,getBundle()方法只需要填写文件,不加后缀!!!

26 ResourceBundle bundle=ResourceBundle.getBundle("db");27 //2.通过key获得需要的值

28 driver=bundle.getString("driver");29 url=bundle.getString("url");30 username=bundle.getString("username");31 password=bundle.getString("password");32 }33

34 /*

35 * 获取连接方法36 */

37 public staticConnection getConnection(){38 Connection conn=null;39 try{40 //1.注册驱动

41 Class.forName(driver);42 //2.获得连接

43 conn=DriverManager.getConnection(url,username,password);44 } catch(Exception e) {45 e.printStackTrace();46 }47 returnconn;48 }49 /*

50 * 释放资源方法51 */

52 public static voidrelease(Connection conn,PreparedStatement pstmt,ResultSet rs){53 if(rs!=null){54 try{55 rs.close();56 } catch(SQLException e) {57 e.printStackTrace();58 }59 }60 if(pstmt!=null){61 try{62 pstmt.close();63 } catch(SQLException e) {64 e.printStackTrace();65 }66 }67 if(conn!=null){68 try{69 conn.close();70 } catch(SQLException e) {71 e.printStackTrace();72 }73 }74 }75 }

3.2、加载配置文件:Properties对象((JDBCUtils_V3.java文件)可选)

1 packagecn.itheima.jdbc;2

3 importjava.io.IOException;4 importjava.io.InputStream;5 importjava.io.InputStreamReader;6 importjava.sql.Connection;7 importjava.sql.DriverManager;8 importjava.sql.PreparedStatement;9 importjava.sql.ResultSet;10 importjava.sql.SQLException;11 importjava.util.Properties;12 importjava.util.ResourceBundle;13

14 /**

15 * 提供获取连接和释放资源的方法16 *@authorAdministrator17 *18 */

19 public classJDBCUtils_V3 {20 private static String driver; //驱动

21 private static String url; //路径

22 private static String username; //用户名

23 private static String password; //密码

24

25 /*

26 * 静态代码块加载配置文件信息27 */

28 static{29 try{30 //1.通过当前类获得类加载器

31 ClassLoader classLoader=JDBCUtils_V3.class.getClassLoader();32 //2.通过类加载器的方法获得一个输入流

33 InputStream is=classLoader.getResourceAsStream("db.properties");34 //3.创建一个properties对象

35 Properties props=newProperties();36 //4.加载输入流

37 props.load(is);38 //5.获取相关参数的值

39 driver=props.getProperty("driver");40 url=props.getProperty("url");41 username=props.getProperty("username");42 password=props.getProperty("password");43 } catch(IOException e) {44 e.printStackTrace();45 }46 }47 /*

48 * 获取连接方法49 */

50 public staticConnection getConnection(){51 Connection conn=null;52 try{53 //1.注册驱动

54 Class.forName(driver);55 //2.获得连接

56 conn=DriverManager.getConnection(url,username,password);57 } catch(Exception e) {58 e.printStackTrace();59 }60 returnconn;61 }62 /*

63 * 释放资源64 */

65 public static voidrelease(Connection conn,PreparedStatement pstmt,ResultSet rs){66 if(rs!=null){67 try{68 rs.close();69 } catch(SQLException e) {70 e.printStackTrace();71 }72 }73 if(pstmt!=null){74 try{75 pstmt.close();76 } catch(SQLException e) {77 e.printStackTrace();78 }79 }80 if(conn!=null){81 try{82 conn.close();83 } catch(SQLException e) {84 e.printStackTrace();85 }86 }87 }88 }

4、实现CRUD操作(查询和添加使用的JDBCUtils_V2.java、删除和修改使用的是JDBCUtils_V3.java文件)

1 packagecn.itheima.jdbc.test;2

3 importjava.sql.Connection;4 importjava.sql.PreparedStatement;5 importjava.sql.ResultSet;6 importjava.sql.SQLException;7

8 importorg.junit.Test;9

10 importcn.itheima.jdbc.JDBCUtils_V2;11 importcn.itheima.jdbc.JDBCUtils_V3;12

13 /*

14 * 测试工具类15 */

16 public classTestUtils {17 /*

18 * 根据id查询用户信息19 */

20 @Test21 public voidtestFindUserById() {22 Connection conn = null;23 PreparedStatement pstmt = null;24 ResultSet rs = null;25 try{26 //1.获取连接

27 conn =JDBCUtils_V2.getConnection();28 //2.编写sql语句

29 String sql = "select * from tbl_user where uid=?";30 //3.获取执行sql语句对象

31 pstmt =conn.prepareStatement(sql);32 //4.设置参数

33 pstmt.setInt(1, 2);34 //5.执行查询操作

35 rs =pstmt.executeQuery();36 //6.处理结果集

37 while(rs.next()) {38 System.out.println(rs.getString(2) + "----" + rs.getString("upassword"));39 }40 //释放资源放在此处不行滴!

41 } catch(SQLException e) {42 e.printStackTrace();43 } finally{44 //7.释放资源

45 JDBCUtils_V2.release(conn, pstmt, rs);46 }47 }48

49 /*

50 * 添加用户信息方法51 */

52 @Test53 public voidtestAdd(){54 Connection conn=null;55 PreparedStatement pstmt=null;56 try{57 //1.获取连接

58 conn=JDBCUtils_V2.getConnection();59 //2.编写sql语句

60 String sql="insert into tbl_user values(null,?,?)";61 //3.获取执行sql语句对象

62 pstmt=conn.prepareStatement(sql);63 //4.设置参数

64 pstmt.setString(1, "hehe");65 pstmt.setString(2,"789");66 //5.执行插入操作

67 int row=pstmt.executeUpdate();68 if(row>0){69 System.out.print("添加成功!");70 }else{71 System.out.print("添加失败 ");72 }73 }catch(Exception e){74 e.printStackTrace();75 }finally{76 //6.释放资源

77 JDBCUtils_V2.release(conn, pstmt, null);78 }79 }80

81 /*

82 * 根据id删除用户信息83 */

84 @Test85 public voidtestDeleteById(){86 Connection conn = null;87 PreparedStatement pstmt = null;88 ResultSet rs = null;89 try{90 //1.获取连接

91 conn =JDBCUtils_V3.getConnection();92 //2.编写sql语句

93 String sql = "delete from tbl_user where uid=?";94 //3.获取执行sql语句对象

95 pstmt =conn.prepareStatement(sql);96 //4.设置参数

97 pstmt.setInt(1, 4);98 //5.执行删除操作

99 int row=pstmt.executeUpdate();100 if(row>0){101 System.out.print("删除成功!");102 }else{103 System.out.print("删除失败 ");104 }105 }catch(Exception e){106 e.printStackTrace();107 }finally{108 //6.释放资源

109 JDBCUtils_V3.release(conn, pstmt, null);110 }111 }112

113 /*

114 * 根据id更新用户信息115 */

116 @Test117 public voidtestUpdateById(){118 Connection conn = null;119 PreparedStatement pstmt = null;120 ResultSet rs = null;121 try{122 //1.获取连接

123 conn =JDBCUtils_V3.getConnection();124 //2.编写sql语句

125 String sql = "update tbl_user set upassword=? where uid=?";126 //3.获取执行sql语句对象

127 pstmt =conn.prepareStatement(sql);128 //4.设置参数

129 pstmt.setString(1, "233");130 pstmt.setInt(2, 5);131 //5.执行更新操作

132 int row=pstmt.executeUpdate();133 if(row>0){134 System.out.print("更新成功!");135 }else{136 System.out.print("更新失败 ");137 }138 }catch(Exception e){139 e.printStackTrace();140 }finally{141 //6.释放资源

142 JDBCUtils_V3.release(conn, pstmt, null);143 }144 }145 }

查询uid=2的效果如下:

2c20c0c5e710153d3cf9fb10265b2f64.png

添加成功的效果如下:

b24307c2aa5d9f84c23a5e7a2d47cca3.png

删除uid=4的效果如下:

9cb4f6a334d833c9f44cbde6307cbed6.png

更新uid=5的密码为233的效果如下:

1aca88e2a4f9c1c84e6f1e9c260633ff.png

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

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

相关文章

mysql系统属性_mysql 显示表字段及mysql系统信息

SHOW DATABASES //列出 MySQL Server 数据库。SHOW TABLES [FROM db_name] //列出数据库数据表。SHOW TABLE STATUS [FROM db_name] //列出数据表及表状态信息。SHOW COLUMNS FROM tbl_name [FROM db_name] …

mysql中try的意思_java中try是什么意思

try是Java中的关键字,主要用于异常处理机制,那么它有什么作用呢?try – 用于监听。将要被监听的代码(可能抛出异常的代码)放在try语句块之内,当try语句块内发生异常时,异常就被抛出。它一般与catch..finally组合使用块…

如何在命令中授权给MySQL_MySQL如何使用授权命令grant

本文实例,运行于 MySQL 5.0 及以上版本。MySQL 赋予用户权限命令的简单格式可概括为:grant 权限 on 数据库对象 to 用户一、grant 普通数据用户,查询、插入、更新、删除 数据库中所有表数据的权利。grant select on testdb.* to common_user%…

linux用java连接mysql_Java使用JDBC方式连接数据库

开发一个JDBC应用程序,基本需要以下几个步骤:1.把JDBC驱动类装载入Java虚拟机中。使用java.lang.Class类的静态方法forName(String className)实现。例: Class.forName("JDBC驱动类名称")2.加载驱动,并与数据库建立连接…

mysql 字段钳口可加引号_根据处理对象划分,计算机可以分为模拟计算机、(

【判断题】( )3.保证数控机床各运动部件间的良好润滑就能提高机床寿命。【单选题】在储位编码中,把一些相关性货品经过集合以后,区分成几个品项群,再对其进行编码的方法是( )。【填空题】在数据库技术中,DBMS是 ,DB是指() 、DBS是指数据库系统。【单选题】25. 为保证下刀的安全…

mysql存储过程游标移动_mysql动态游标与mysql存储过程游标(示例)

-- 建立测试表和数据create table webuser (username varchar(10));insert into webuser values (a1),(a2),(a3),(b1),(b2),(b3);commit;-- 建立存储过程drop procedure if exists dynamic_cursor;delimiter // www.jbxue.comCREATE PROCEDURE dynamic_cursor (IN p_name varch…

python ftplib bufsize_python:ftplib模块

from ftplib import FTP #加载ftp模块ftpFTP() #设置变量ftp.set_debuglevel(2) #打开调试级别2,显示详细信息ftp.set_pasv(0) #0主动模式 1 #被动模式ftp.connect("IP","port") #连接的ftp s…

python程序设计实验教程_Python程序设计实验教程

第1章 主教材各章节概要1.1 Python概述概要1.1.1 Python简介1.1.2 Python开发环境1.1.3 Python程序示例1.2 Python基础知识概要1.2.1 程序的书写规范1.2.2 标识符和关键字1.2.3 Python的数值类型、常量与变量1.2.4 Python的字符串类型1.2.5 数据类型判断和数据类型间转换1.2.6 …

java获取年的第一天和最后一天_java中如何获取当前年份的第一天和最后一天

packagecom.dada.test;importjava.text.SimpleDateFormat;importjava.util.Calendar;importjava.util.Date;public classDateUtil {/*** 默认日期格式*/public static String DEFAULT_FORMAT "yyyy-MM-dd";/*** 测试主方法*paramargs*/public static voidmain(Strin…

sqlserver java odbc_Java JDBC------------------ODBC(SQLServer)链接

Java JDBC------------------ODBC(SQLServer)链接JDBC是Java提供的连接数据库的一套标准API,是在传统的JDBC-ODBC桥发展起来的。今天我将写出如何用JDBC配置数据源(ODBC)链接SQL Server 数据库。1、配置数据源【开始】->【控制面板】->【管理工具】->【数据…

java web gradle_gradle学习之旅(四) 使用gradle构建简单的java web项目

本节通过一个简单的javaweb项目来体会gradle的使用需求构建一个javaweb项目,搭建jspservlet开发环境可以将需求分解为两步:使用gradle构建一个java项目为该项目构建web视图层工具gradle4.3ideajdk 1.8实验过程首先在idea中创建一个空的gradle项目创建如下…

java 整数 引用传递_关于Java引用传递的一个困惑?

Java的引用(包括基本类型,对象引用类型)在声明、方法调用等时候都会产生新的引用,复制等号右侧的引用。分为下面3种情况:基本类型代表的值存储在引用里面,引用中专门有个区域存储这个值,所以在复制的时候,值…

java 调用foxmail_java邮件收发功能实现代码

本文实例为大家分享了邮件收发功能的具体实现代码,供大家参考,具体内容如下准备工作, 环境搭建:1. 本地搭建一个邮件服务器 易邮服务器,eyoumailserversetup.exe2. 新建邮箱账号 张三给李四发邮件。步骤1: 新建域…

java fastjson 泛型_解决fastjson泛型转换报错的解决方法

错误信息Exception in thread "main" java.lang.ClassCastException: com.alibaba.fastjson.JSONObject cannot be cast to com.xh.demo.UserDO泛性类Datapublic class ResultSetDTO {private Integer totalSize;private Integer count;private List records;}实体类…

通达OA header身份认证绕过漏洞复现

通达OA是中国通达公司的一套协同办公自动化软件,通达OA2013,通达OA2016,通达OA2017 存在身份认证绕过漏洞,攻击者可以利用漏洞生成cookie,实现未授权访问。 1.漏洞级别 高危 2.漏洞搜索 fofa title"office An…

leetcode mysql 排名_Leetcode178.分数排名(中等)

题目编写一个 SQL 查询来实现分数排名。如果两个分数相同,则两个分数排名(Rank)相同。请注意,平分后的下一个名次应该是下一个连续的整数值。换句话说,名次之间不应该有“间隔”。-----------| Id | Score |-----------| 1 | 3.50 || 2 | 3.6…

原子变量 java_Java原子变量详解

实现全局自增id最简单有效的方式是什么? java.util.concurrent.atomic 包定义了一些常见类型的原子变量。这些原子变量为我们提供了一种操作单一变量无锁( lock-free )的线程安全( thread-safe )方式。实际上该包下面的类为我们提供了类似 volatile 变量的特性&…

java post 中文乱码问题_java post中文乱码问题

java post中文乱码问题function addcategory() {if (document.myform.category.value "") {alert("商品分类不能为空");return;}//var categorydocument.getElementById("category").value;var c document.myform.category.value;alert(c);wit…

mysql连接数详解_MySQl 修改最大连接数详解

今天使用ide连接线下MySQL报错Can not connect to MySQL server. Too many connections,报错很明确,与MySQL的连接数满了。想想也是,每起一个服务都会创建MySQL连接池,占用不少的长连接。用ide查看了一下,原来最大连接…

java 保存 设置_java – 保存设置的实现

我正在写一些关于android的游戏.我想知道如何保存设置,以免出现更新问题.例如,我使用序列化保存设置,我有类GameCharpublic class GameChar implements Serializable{int health;int damage;Sword sword;}但后来我决定为我的游戏角色增加价值装甲,我改变了类:public…