通过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 ...
随机推荐
- Effective java笔记(二),所有对象的通用方法
Object类的所有非final方法(equals.hashCode.toString.clone.finalize)都要遵守通用约定(general contract),否则其它依赖于这些约定的类( ...
- Log4net - 规则简介
参考页面: http://www.yuanjiaocheng.net/CSharp/csharprumenshili.html http://www.yuanjiaocheng.net/entity/ ...
- 手把手教你做个人 app
我们都知道,开发一个app很大程度依赖服务端:服务端提供接口数据,然后我们展示:另外,开发一个app,还需要美工协助切图.没了接口,没了美工,app似乎只能做成单机版或工具类app,真的是这样的吗?先 ...
- PHP5.4~7.1新特性总结
http://note.youdao.com/noteshare?id=7273b858fc12873ad092979e4ba173a7&sub=WEB334fdcf50b507ad93549 ...
- BZOJ 1006 【HNOI2008】 神奇的国度
题目链接:神奇的国度 一篇论文题--神奇的弦图,神奇的MCS-- 感觉我没有什么需要多说的,这里简单介绍一下MCS: 我们给每个点记录一个权值,从后往前依次确定完美消除序列中的点,每次选择权值最大的一 ...
- Mono 3.8发布:性能进一步改进,可伸缩性提升
9月4日,Mono 3.8.0发布了.该版本的运行时带来了一些性能和可伸缩性方面的改进,同时完成了向Windows平台的移植. Mono遵循Gnome和Linux内核的版本编号策略,这意味着3.8是3 ...
- node应用线上部署时锁定包的依赖版本
npm shrinkwrap 我们使用node开发时,经常需要依赖一些模块来完成功能需求,而我们所依赖的模块也必然会依赖其他模块,就这样一级一级的依赖,而且这些依赖模块并不为我们所控制.一个产品或项目 ...
- 领域驱动设计实战—基于DDDLite的权限管理OpenAuth.net
在园子里面,搜索一下“权限管理”至少能得到上千条的有效记录.记得刚开始工作的时候,写个通用的权限系统一直是自己的一个梦想.中间因为工作忙(其实就是懒!)等原因,被无限期搁置了.最近想想,自己写东西时, ...
- JavaScript进阶之路——认识和使用Promise,重构你的Js代码
一转眼,这2015年上半年就过去了,差不多一个月没有写博客了,"罪过罪过"啊~~.进入了七月份,也就意味着我们上半年苦逼的单身生活结束了,从此刻起,我们要打起十二分的精神,开始下半 ...
- ASP.NET MVC Model验证(一)
ASP.NET MVC Model验证(一) 前言 前面对于Model绑定部分作了大概的介绍,从这章开始就进入Model验证部分了,这个实际上是一个系列的Model的绑定往往都是伴随着验证的.也会在后 ...