当前位置: 首页 > 编程日记 > 正文

如何用eclipse操作MySQL数据库进行增删改查?

我们首先需要在Navicat Premium上创建一个数据库实例(test),然后创建一个stu_info表(id,name,mobile,address)
接着创建一个Test类进行操作:
在这之前需要导一个包:这个包可以在网上找到,连接MySQL数据库用于加载驱动的

mysql-connector-java-5.1.44-bin.jar

我们先来看看如何添加数据

package jdbc;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;public class Test {public static void main(String[] args) {Connection connection = null;Statement statement = null;try {Class.forName("com.mysql.jdbc.Driver");//加载驱动,此处会出现检查时异常,所以需要抛出或捕获String url = "jdbc:mysql://127.0.0.1:3306/test";//指定连接哪一台计算机上的哪个数据库实例connection = DriverManager.getConnection(url, "root", "root");//获取数据库的连接对象(用户名和密码因人或机器而异),//并返回Connection对象,//你可以想象成C语言中打开文件statement = connection.createStatement();//创建SQL语句,String sql = "insert into stu_info(id,name,mobile,address) values ('2016','张三','182','郑州市') ";int affect = statement.executeUpdate(sql);//执行SQL语句,并返回影响的行数,//但仅限用于insert(添加)、update(修改)、delete(删除),不包括select(查询)//显示出执行的效果if(affect>0) {//因为上一语句若执行成功,则影响的行数肯定>0System.out.println("执行成功");}else {		  //否则肯定为0System.out.println("执行失败");}/*** 我们知道在C语言中打开一个文件,在执行完诸如读写添加修改等操作后,要及时把打开的文件再关上,以防文件的数据丢失等错误;* 同样的,在Java中先连接数据库,执行完操作后也要及时释放资源(即断掉链接),而断掉连接就用close;*/
//			connection.close();  //但关闭操作放在这里不合适,原因是如果上面的语句有异常(例如sql语句语法出错),
//			statement.close();   //则下面的语句无法再执行,资源就得不到释放,就有可能会出问题,//为解决这个问题,就需用到finally语句(无论是否有异常都会执行)} catch (Exception e) {e.printStackTrace();} finally {//释放connection资源try {if (connection != null) {/*此处之所以要用if语句,是因为怕上面出现异常导致connection为null,会出现空指针异常(你可以理解成C语言中文件打开错误,也就是压根没有打开,所以也就不用关闭了)*/connection.close();//此处也会出现检查时异常,所以需要捕获}} catch (SQLException e) {e.printStackTrace();}//释放statement资源try {if (statement != null) {//原因同上statement.close();}} catch (SQLException e) {e.printStackTrace();}}}
}

此时执行结果为:执行成功
再打开Navicat Premium中的stu_info表,刷新一下就可看到添加的数据了添加数据


我们再来看看如何修改数据
其实跟上面的步骤几乎一模一样,只需改动一下sql语句,将其改为
String sql = "update stu_info set mobile='123456',address='郑州市中原区' where name='张三'";
其中set mobile='123456',address='郑州市中原区'是传入新数据从而覆盖旧数据,而where name='张三'是指定修改哪一行数据
此时,再打开stu_info表,可以看到修改后的数据:
修改数据
还有删除数据,跟上面的仍旧一样,仍只需改动一下sql语句,将其改为
String sql = "delete from stu_info where name='张三'";
其中where name='张三'是指定删除哪一行数据,若没有where,则删除stu_info表中的所有数据
因为本来表中只有一行数据,所以删除之后就没有了:
删除数据
此时你是否会发现上面的代码除了sql不一样,也就是具体的操作不同之外,其他地方具有高度一致性,也就是重复的很多,显得冗余繁杂,所以为了简化代码,我们可以可以单独定义一个方法,将sql当成一个参数变量,并将该方法放到一个类中:

package jdbc;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;public class DBLink {public boolean update(String sql) {//将实参传给形参sqlConnection connection= null;Statement statement =null;try {Class.forName("com.mysql.jdbc.Driver");String url = "jdbc:mysql://127.0.0.1/test";connection = DriverManager.getConnection(url, "root", "root");statement = connection.createStatement();int affect = statement.executeUpdate(sql);return affect>0;//若执行成功,则返回true/*** 这里我想说明一下,由于finally的特殊性,会先执行完finally里的释放资源语句,再执行返回值语句* 总之就是在结束方法之前无论如何都要先释放资源才可以*/} catch (Exception e) {e.printStackTrace();} finally {//释放statement资源try {if (statement != null) {statement.close();}} catch (SQLException e) {e.printStackTrace();}//释放connection资源try {if (connection != null) {connection.close();}} catch (SQLException e) {e.printStackTrace();}}return false; //执行不成功,则返回false}
}

再来调用该通用方法:

package jdbc;public class Test {//添加public static void insert() {String sql = "insert into stu_info(id,name,mobile,address) values ('2016','张三','182','郑州市')";if(new DBLink().update(sql)) {//调用DBLink方法,并传入实参System.out.println("添加成功");return;}System.out.println("添加失败");}//修改public static void update() {String sql = "update stu_info set name = '李四' where mobile = '182'";			if(new DBLink().update(sql)) {System.out.println("修改成功");return;}System.out.println("修改失败");}//删除public static void delete() {String sql = "delete from stu_info where address = '郑州市'";			if(new DBLink().update(sql)) {System.out.println("删除成功");return;}System.out.println("删除失败");}//调用各个操作方法public static void main(String[] args) {insert();
//		update();
//		delete();}
}

至于为啥要把查询数据另说,是因为查询数据所用的方法跟其他三种略有不同,它用的不是statement.executeUpdate(),而是statement.executeQuery(),其他的地方大同小异:
我们直接通过定义一个查询方法(select())来进行说明

public static void select() {Connection connection = null;//initialize variable(初始化变量为null)Statement statement = null;ResultSet resultset = null;try {Class.forName("com.mysql.jdbc.Driver");String url = "jdbc:mysql://127.0.0.1:3306/test";connection = DriverManager.getConnection(url, "root", "root");statement = connection.createStatement();//创建SQL语句对象String sql = "select id,name,mobile,address from stu_info";resultset = statement.executeQuery(sql);//执行SQL语句//此时数据都在resultset里面,需要通过循环把它显示出来while(resultset.next()) {//next方法移动“指针”至一行数据,该行有数据则返回true,没有数据则返回false//你可以理解成C语言中的指针下移一位//查询数据String id = resultset.getString("id");String name = resultset.getString("name");String mobile = resultset.getString("mobile");	String address = resultset.getString("address");System.out.println(id+","+name+","+mobile+","+address);}} catch (Exception e) {e.printStackTrace();} finally {//释放resultset资源 (你可以理解成C语言中关闭文件,让指针不在指向该文件)try {if (resultset != null) {resultset.close();}} catch (SQLException e) {e.printStackTrace();}//释放connection资源try {if (connection != null) {connection.close();}} catch (SQLException e) {e.printStackTrace();}//释放statement资源try {if (statement != null) {statement.close();}} catch (SQLException e) {e.printStackTrace();}}		
}

总结一下:
- 这次的重点就是如何连接MySQL数据库、以及如何简单的操作MySQL数据库实例!

相关文章:

机房测试10.22

wzz的观察 简单的递推。 \(f[i][j]\)表示以\((i,j)\)这个点为右下角时最大的正方形大小。 如果这个格子为0,\(f[i][j]0\) 否则\(f[i][j]min(f[i-1][j],f[i][j-1],f[i-1][j-1])1\) 或者可以二分答案,每一次\(O(n*m)\)进行check。 递推代码: #i…

$.when()方法翻译

地址:http://api.jquery.com/jQuery.when/ jQuery.when( deferreds ),returns Promise 正文 Description: Provides a way to execute callback functions based on zero or more Thenable objects, usually Deferred objects that represent asynchrono…

Anaconda3 离线安装 Django-3.2.7 及依赖项setuptools、sqlparse 、asgiref、typing_extensions等模块

目录 一、背景 二、离线安装 setuptools、sqlparse 、asgiref、typing_extensions等依赖模块 三、离线安装django 一、背景 因为信息安全管理的规定,这台服务器不能连接互联网,只能离线安装 django。anaconda3 安装完成以后,从默认虚拟环…

倍增LCA NOIP2013 货车运输

货车运输 题目描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路。每一条道路对车辆都有重量限制,简称限重。现在有 q 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的情况下,最多能运多重的货物。…

SVO学习笔记(二)

SVO学习笔记(二)这篇文章稀疏图像对齐地图点投影(地图与当前帧间的关系)reprojectMapreprojectPointreprojectCell特征点对齐中的非线性优化结尾这篇文章 这次仍是关于SVO系统的学习记录(冲冲冲!)。这次的主要内容是sp…

用JDBC写一个学生管理系统(添加、删除、修改、查询学生信息)

首先需要用Navicat Premium创建一个student表 用Java连接好MySQL数据库(需要copy一个mysql-connector-java-5.1.44-bin.jar包,该包可在网上找到)后,我们开始用Java写一个学生管理系统: 我们首选需要定义好添加、删除、…

tensorflow在训练和验证时监视不同的summary的操作

如果想在训练和验证时监视不同的summary,将train summary ops和val summary ops放进不同的集合中即可。 train_writer tf.summary.FileWriter(log_dir /train, sess.graph) val_writer tf.summary.FileWriter(log_dir /val, sess.graph)# 假设train_loss和val_l…

Anaconda3 离线安装和配置 Django-3.2.7 使用 MySQL-5.7 数据库

Django文档 Settings / Core Settings / DATABASES 一节阐述了django与数据库交互配置的内容。 先在 MySQL 5.7 版本数据库中创建一个名为 learning_log_db 的数据库,和名为 myuser 的用户,并分配权限。 create databases learning_log_db; create use…

用JDBC写一个学生管理系统(添加、删除、修改、查询学生信息)(二)

本文上接用JDBC写一个学生管理系统(添加、删除、修改、查询学生信息) 这次主要是对上一文中的查询方法做一下调整,用创建内部类的方法来实现学生信息的查询。 我们先要定义一个接口IRowMapper: import java.sql.ResultSet;public…

(原)ubuntu中使用conda安装tensorflow-gpu

转载请注明出处: https://www.cnblogs.com/darkknightzh/p/9834567.html 参考网址: https://www.anaconda.com/blog/developer-blog/tensorflow-in-anaconda/ 之前的一篇,直接安装tensorflow的: https://www.cnblogs.com/darkknig…

SVO中 Inverse Compositional Image Alignment方法的学习笔记

SVO中 Inverse Compositional Image Alignment方法的学习笔记这篇文章光流法简介逆向光流法结尾这篇文章 在SVO系统中的"Relaxation Through Feature Alignment"部分使用的是一种特别的LK光流法:the inverse compositional Lucas-Kanade algorithm&#x…

Head First设计模式之目录

只有沉淀、积累,才能远航;沉沉浮浮,脚踏实地。 这本书已经闲置了好久,心血来潮,决定写个目录,让自己坚持看完这本书 创建型模式 抽象工厂模式(Abstract factory pattern): 提供一个接口, 用于创建相关或依赖…

HANA 数据库备份hang住的解决办法

今天遇到 HANA 数据库备份hang住的情况。经过查 SAP NOTE 解决,记录一下过程。两个NOTE如下: 2452735 - HANA Backup failing with "[447]: backup could not be completed: [110122] A data backup cannot be created because another data backu…

简单DP【p2642】双子序列最大和

Description 给定一个长度为n的整数序列,要求从中选出两个连续子序列,使得这两个连续子序列的序列和之和最大,最终只需输出最大和。一个连续子序列的和为该子序列中所有数之和。每个连续子序列的最小长度为1,并且两个连续子序列之…

JDBC工具类

本文主要是将JDBC最基础的增删改查的工具类的代码详细的罗列出来: 一、我们先来看一看项目结构: 二、配置JDBC工具类 1.我们先处理异常 我们知道几乎不可能一次性就写出完美的代码,都是要经过很多次的调试才行,那在调试过程中就难免会出现…

SVO 学习笔记(三)

SVO 学习笔记(三)这篇博客InitializationFrame_Handler_MonoprocessFirstFrameprocessSecondFrameprocessFramerelocalizeFrame结尾这篇博客 这篇博客将介绍SVO源代码中的frame_handler_mono、initialization两个文件的代码流程。前者是SVO系统类&#x…

CMAKE设置INSTALL工程,分别设置头文件、Lib和DLL的输出路径

使用CMAKE管理工程,可以设置工程中的INSTALL项目运行时安装的路径,使用命令:install。 可以简单的设置安装文件的路径和文件夹: set(head_files//要安装的头文件 ) install(TARGETS ${head_files} DESTINATION ${CMAKE_BINARY_DI…

2021年中国工业互联网安全大赛核能行业赛道writeup之hacker

附加题 hacker,题目描述:hacker,附件下载 hackerhttps://download.csdn.net/download/qpeity/33230528解压缩得到一个EXE文件 ARE_YOU_SDPD.exe,在一个文件夹下运行看一下。 用 IDA 反汇编一下,发现找不到程序入口&am…

利用人工智能(Magpie开源库)给一段中文的文本内容进行分类打标签

当下人工智能是真心的火热呀,各种原来传统的业务也都在尝试用人工智能技术来处理,以此来节省人工成本,提高生产效率。既然有这么火的利器,那么我们就先来简单认识下什么是人工智能吧,人工智能是指利用语音识别、语义理…

动态环境下的SLAM:DynaSLAM 论文学习笔记

动态环境下的SLAM:DynaSLAM 论文学习笔记这篇文章论文摘要系统流程相关环节的实现方法神经网络检测图中动态物体(Mask R-CNN)Low-Cost Tracking使用多视图几何的方法检测图中动态物体(Multi-view Geometry)跟踪与建图&…

用C语言编写:判断一个≥2的整型数是否存在于斐波那契数列中?

自己写的&#xff0c;感觉挺有成就感的&#xff0c;就展示出来吧&#xff01; 判断一个≥2的整型数是否存在于斐波那契数列中&#xff1f; 若存在&#xff0c;则返回第几项&#xff1b;若不在&#xff0c;则返回-1 #include <stdio.h> long generate(long n);//函数声…

团队作业8——第二次项目冲刺(Beta阶段)--第六天

会议照片&#xff1a; 燃尽图&#xff1a; 项目进展&#xff1a; 练习模式能够给出正确的答案&#xff0c;部分模块正在正在测试。 团队贡献比&#xff1a; 队员 角色 团队贡献比 陈麟凤 PM 17% 张志杰 DEV 18% 黄海鸿 TEST 16% 康建灿 TEST 16% 许明涛 DEV…

2021年中国工业互联网安全大赛核能行业赛道writeup之隐写

附件题&#xff1a;隐写 题目描述&#xff1a;隐写 附件下载&#xff1a; 2021-10-12T15_44_19.17491400_00scene.jpg.zip-网络攻防文档类资源-CSDN下载 ​ 先用 010Editor 查看这个图片&#xff0c;能直接看到图片的头部是否完整正常&#xff0c;能直接看到是否隐藏了fla…

SVO 学习笔记(深度滤波)

SVO 学习笔记&#xff08;深度滤波&#xff09;这篇博客论文中的深度滤波深度滤波的代码流程更新Seed对象初始化Seed对象结尾这篇博客 这篇博客将介绍SVO论文中的Mapping部分&#xff0c;主要介绍深度滤波器在获取新的图像帧后&#xff0c;更新相应地图点深度的过程。&#xff…

寻找孪生素数(当p为素数时,p+2也为素数)

数学家希尔伯特在1900年国际数学家大会的报告上提出一个“孪生素数猜想”&#xff0c;即&#xff1a; 存在无穷多个素数p&#xff0c;使得p 2是素数。p和p2这一对差为2的素数&#xff0c;被称为“孪生素数”。 看起来&#xff0c;这个猜想是成立的&#xff0c;我们总能找到很多…

C++利用cin输入时检测回车的方法

今天做TJU的OJ &#xff0c;其中一道题是先读入一个字符串&#xff0c;再读入一个整数&#xff0c;循环往复&#xff0c;直到字符串是空&#xff0c;也就是说回车键结束循环。 但是cin对空格和回车都不敏感&#xff0c;都不影响继续读入数据&#xff0c;所以需要一种新的方式检…

使用grep过滤make的输出内容

make的输出内容其实分为两种&#xff0c;有些是到标准输出&#xff0c;有些是到标准错误&#xff0c;由于标准输出和标准错误默认都是屏幕&#xff0c;所以平时区分不出来&#xff0c; 实际上一般是error和warning信息到标准错误&#xff0c;其余的到标准输出。 如果要过滤erro…

2021年中国工业互联网安全大赛核能行业赛道writeup之机房密码

附件题&#xff1a;机房密码 题目描述&#xff1a; &#xff08;具体描述忘记了&#xff09; 经过黑客人员的不屑努力&#xff0c;在上位机上发现了登录密码的一半信息&#xff0c;剩下的一半要靠你们继续努力辣&#xff01;&#xff01;&#xff01; ZmxhZyU3Qmgwd19hX0M 附件…

ORB-SLAM2系统的实时点云地图构建

ORB-SLAM2系统的实时点云地图构建这篇博客点云地图构建的流程代码介绍点云地图构建类对象小调整获取关键帧点云地图构建与叠加在地图中设置当前相机位置点云地图到Octomap的转换地图效果结尾这篇博客 &#xff08;PS:修改于2020-9-21&#xff0c;添加了关于System和Tracking类…

使用maven导入jar包

我们都经历过自己写代码时有时就要引用一些第三方的jar包&#xff0c;这个我们都会&#xff0c;但在公司里进行团队开发时&#xff0c;是不允许我们自己导入jar包的&#xff0c;是由项目组长之类的统一导入jar包&#xff0c;我们在这里来了解一下这个过程&#xff1a; a、先创建…