通过Java代码实现对数据库的数据进行操作:增删改查
在写代码之前,依然是引用mysql数据库的jar包文件:右键项目—构建路径—设置构建路径—库—添加外部JAR
在数据库中我们已经建立好一个表xs ;分别有xuehao xingming xuexiao 三个列

然后我们开始码代码调用,进行增删改查
首先是增加
import java.sql.*;
public class XueYuan {
public static void main(String[] args) throws Exception {
Class.forName("com.mysql.jdbc.Driver");//加载驱动
String jdbc="jdbc:mysql://127.0.0.1:3306/mydb?characterEncoding=GBK";
Connection conn=DriverManager.getConnection(jdbc, "root", "");//链接到数据库
Statement state=conn.createStatement(); //容器
String sql="insert into xs values('1108','张伟','汉企')"; //SQL语句
state.executeUpdate(sql); //将sql语句上传至数据库执行
conn.close();//关闭通道
}
执行后,数据中多了一行数据

删除数据
import java.sql.*;
public class XueYuan {
public static void main(String[] args) throws Exception {
Class.forName("com.mysql.jdbc.Driver");//加载驱动
String jdbc="jdbc:mysql://127.0.0.1:3306/mydb?characterEncoding=GBK";
Connection conn=DriverManager.getConnection(jdbc, "root", "");//链接到数据库
Statement state=conn.createStatement(); //容器
String sql="delete from xs where xuehao='1108'"; //SQL语句
state.executeUpdate(sql); //将sql语句上传至数据库执行
conn.close();//关闭通道
}
}
执行后,数据库中xuehao为“1108”的数据的整行被删掉

修改数据
import java.sql.*;
public class XueYuan {
public static void main(String[] args) throws Exception {
Class.forName("com.mysql.jdbc.Driver");//加载驱动
String jdbc="jdbc:mysql://127.0.0.1:3306/mydb?characterEncoding=GBK";
Connection conn=DriverManager.getConnection(jdbc, "root", "");//链接到数据库
Statement state=conn.createStatement(); //容器
String sql="update xs set xuexiao='淄博汉企' where xuehao='1101' "; //SQL语句
state.executeUpdate(sql); //将sql语句上传至数据库执行
conn.close();//关闭通道
}
}
数据库中的1101对应的xuexiao发生了改变

小结:数据的增删改几乎是一样的唯一不同的是SQL语句不同而已
查询数据
查询数据和增删改不同的地方是,我们需要获取,而正常获取时,我们获取到的是一个字符集
import java.sql.*;
import javax.xml.stream.events.StartElement;
public class Test3 {
public static void main(String[] args) throws Exception {
//导入驱动包
Class.forName("com.mysql.jdbc.Driver");
//链接至数据库
String jdbc="jdbc:mysql://127.0.0.1:3306/mydb";
Connection conn=DriverManager.getConnection(jdbc, "root", "");
Statement state=conn.createStatement();//容器
String sql="select * from xs"; //sql语句
ResultSet rs=state.executeQuery(sql); //将sql语句传至数据库,返回的值为一个字符集用一个变量接收
while(rs.next()){ //next()获取里面的内容
System.out.println(rs.getString(1)+" "+rs.getString(2)+" "+rs.getString(3));
//getString(n)获取第n列的内容
//数据库中的列数是从1开始的
}
conn.close();
}
获取的结果

例子:
输入账号和密码,在数据库中获取,如果有该信息,则显示其登陆成功,如果没有,则显示输入错误
有两种方法可以实现:
import java.sql.*;
import java.util.*; public class Login { public static void main(String[] args) throws Exception {
// 输入用户名和密码
Scanner sc=new Scanner(System.in);
System.out.println("请输入账号");
String zh=sc.nextLine();
System.out.println("请输入密码");
String mm=sc.nextLine(); // zh=zh.replaceAll("\'", "\""); //替换
// mm=mm.replaceAll("\'", "\""); //替换 //到数据库验证用户名和密码是否正确
Class.forName("com.mysql.jdbc.Driver");
Connection conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mydb", "root", "");
Statement state=conn.createStatement();
String sql="select * from yonghu where zhanghao='"+zh+"' and mima='"+mm+"'";
ResultSet re=state.executeQuery(sql); //输出:正确显示欢迎,不正确显示错误
if(re.next()){
System.out.println("登陆成功!"+re.getString(3)+" 欢迎你");
}
else{
System.out.println("输入账号或密码错误");
} conn.close(); } }
实现了该功能

但是如果我们输入

同样会显示登陆成功(sql注入攻击),为避免出现这种情况我们加入两个替换
zh=zh.replaceAll("\'", "\"") 将输入的所有单引号全部换成双引号,就可以避免这样的漏洞;但是这种方法治标不治本,根本原因是字符串的拼接的原因

从根本上解决问题还有一种写法 在SQL语句中,不确定的条件用?代替,PreparedStatement(sql) 容器来装 setString( n ,m)来赋值n是第几个问号的位置,m是赋的值(数据的增删改同样适用这种方法)
import java.sql.*;
import java.util.*; public class Login {
public static void main(String[] args) throws Exception{
//输入用户名和密码
Scanner sc=new Scanner(System.in);
System.out.println("请输入账号");
String zh=sc.nextLine();
System.out.println("请输入密码");
String mm=sc.nextLine(); Class.forName("com.mysql.jdbc.Driver");
String jdbc="jdbc:mysql://127.0.0.1:3306/mydb";
Connection conn=DriverManager.getConnection(jdbc, "root", "");
String sql="select * from yonghu where zhanghao=? and mima=?"; //sql语句
PreparedStatement state=conn.prepareStatement(sql); //容器
state.setString(1, zh); //将第n个值替换成某个值
state.setString(2, mm);
ResultSet re=state.executeQuery(); //上传数据库返回结果集 if(re.next()){ //如果取到了值,那么输出
System.out.println("登陆成功"+re.getString(3)+",欢迎你");
}
else{
System.out.println("登陆失败,账号或密码输入错误");
} }


通过Java代码实现对数据库的数据进行操作:增删改查的更多相关文章
- Django框架之第二篇--app注册、静态文件配置、form表单提交、pycharm连接数据库、django使用mysql数据库、表字段的增删改查、表数据的增删改查
本节知识点大致为:静态文件配置.form表单提交数据后端如何获取.request方法.pycharm连接数据库,django使用mysql数据库.表字段的增删改查.表数据的增删改查 一.创建app,创 ...
- MySQL数据库安装,MySQL数据库库的增删改查,表的增删改查,表数据的基本数据类型
一 MySQL的安装 MySQL现在属于甲骨文公司,所以和java语言匹配度较高,同时甲骨文公司的另一种数据库为Oracle,两者同为关系型数据库,即采用关系模型来组织数据,以行和列的方法来存储数据的 ...
- 一、数据库表中字段的增删改查,二、路由基础.三、有名无名分组.四、多app共存的路由分配.五、多app共存时模板冲突问题.六、创建app流程.七、路由分发.八、路由别名,九、名称空间.十、反向解析.十一、2.x新特性.十二、自定义转换器
一.数据库表中字段的增删改查 ''' 直接在modules中对字段进行增删改查 然后在tools下点击Run manage.py Task执行makemigrations和migrate 注意在执行字 ...
- 用CI框架向数据库中实现简单的增删改查
以下代码基于CodeIgniter_2.1.3版 用PHP向数据库中实现简单的增删改查(纯代码)请戳 http://www.cnblogs.com/corvoh/p/4641476.html Code ...
- C# - VS2019 通过DataGridView实现对Oracle数据表的增删改查
前言 通过VS2019建立WinFrm应用程序,搭建桌面程序后,通过封装数据库操作OracleHelper类和业务逻辑操作OracleSQL类,进而通过DataGridView实现对Oracle数据表 ...
- [Django框架 - 静态文件配置、request对象方法初识、 pycharm链接数据库、ORM实操增删改查、django请求生命周期]
[Django框架 - 静态文件配置.request对象方法初识. pycharm链接数据库.ORM实操增删改查.django请求生命周期] 我们将html文件默认都放在templates文件夹下 将 ...
- AngularJS中使用$http对MongoLab数据表进行增删改查
本篇体验使用AngularJS中的$http对MongoLab数据表进行增删改查. 主页面: <button ng-click="loadCourse()">Load ...
- jQuery EasyUI/TopJUI实现数据表格的增删改查功能(不写js,纯HTML实现!!!)
jQuery EasyUI/TopJUI实现数据表格的增删改查功能(不写js,纯HTML实现!!!) 废话不多说,直接贴上代码 <table id="configEdatagrid&q ...
- Mysql数据表的增删改查
---恢复内容开始--- Mysql数据表的增删改查 1.创建表 语法:CREATE TABLE 表名(字段1,字段2,字段3.......) CREATE TABLE `users` ( `us ...
随机推荐
- 关于Visual Studio 未能加载各种Package包的解决方案
问题: 打开Visual Studio 的时候,总提示未能加载相应的Package包,有时候还无法打开项目,各种提示 解决方案: 进入用户目录 C:\Users\用户名\AppData\Local\M ...
- JavaWeb——Listener
一.基本概念 JavaWeb里面的listener是通过观察者设计模式进行实现的.对于观察者模式,这里不做过多介绍,大概讲一下什么意思. 观察者模式又叫发布订阅模式或者监听器模式.在该模式中有两个角色 ...
- Android之使用Bundle进行IPC
一.Bundle进行IPC介绍 四大组件中的三大组件(Activity.Service.Receiver)都是支持在Intent中传递Bundle数据的,由于Bundle实现了Parcelable接口 ...
- Android local.properties 文件读取
转载请标明出处:http://www.cnblogs.com/zhaoyanjun/p/6202369.html 本文出自[赵彦军的博客] 在Android Studio项目里面有个local.pro ...
- (一)Spark简介-Java&Python版Spark
Spark简介 视频教程: 1.优酷 2.YouTube 简介: Spark是加州大学伯克利分校AMP实验室,开发的通用内存并行计算框架.Spark在2013年6月进入Apache成为孵化项目,8个月 ...
- 第12章 Linux系统管理
1. 进程管理 1.1 进程查看 (1)进程简介 进程是正在执行的一个程序或命令(如ls命令也是一个进程),每个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源. (2)进程管理的作用 ...
- JS中给正则表达式加变量
前不久同事询问我js里面怎么给正则中添加变量的问题,遂写篇博客记录下. 一.字面量 其实当我们定义一个字符串,一个数组,一个对象等等的时候,我们习惯用字面量来定义,例如: var s = &quo ...
- React单元测试——十八般兵器齐上阵,环境构建篇
一个完整.优秀的项目往往离不开单元测试的环节,就 github 上的主流前端项目而言,基本都有相应的单元测试模块. 就 React 的项目来说,一套完整的单元测试能在在后续迭代更新中回归错误时候给与警 ...
- 用java开发微信公众号:接收和被动回复普通消息(三)
上篇说完了如何接入微信公众号,本文说一下微信公众号的最基本功能:普通消息的接收和回复.说到普通消息,那么什么是微信公众号所定义的普通消息呢,微信开发者文档中提到的接收的普通消息包括如下几类: 1.文本 ...
- Android笔记——AsyncTask介绍
AsyncTask和Handler对比 1 ) AsyncTask实现的原理,和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操 ...