在写代码之前,依然是引用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代码实现对数据库的数据进行操作:增删改查的更多相关文章

  1. Django框架之第二篇--app注册、静态文件配置、form表单提交、pycharm连接数据库、django使用mysql数据库、表字段的增删改查、表数据的增删改查

    本节知识点大致为:静态文件配置.form表单提交数据后端如何获取.request方法.pycharm连接数据库,django使用mysql数据库.表字段的增删改查.表数据的增删改查 一.创建app,创 ...

  2. MySQL数据库安装,MySQL数据库库的增删改查,表的增删改查,表数据的基本数据类型

    一 MySQL的安装 MySQL现在属于甲骨文公司,所以和java语言匹配度较高,同时甲骨文公司的另一种数据库为Oracle,两者同为关系型数据库,即采用关系模型来组织数据,以行和列的方法来存储数据的 ...

  3. 一、数据库表中字段的增删改查,二、路由基础.三、有名无名分组.四、多app共存的路由分配.五、多app共存时模板冲突问题.六、创建app流程.七、路由分发.八、路由别名,九、名称空间.十、反向解析.十一、2.x新特性.十二、自定义转换器

    一.数据库表中字段的增删改查 ''' 直接在modules中对字段进行增删改查 然后在tools下点击Run manage.py Task执行makemigrations和migrate 注意在执行字 ...

  4. 用CI框架向数据库中实现简单的增删改查

    以下代码基于CodeIgniter_2.1.3版 用PHP向数据库中实现简单的增删改查(纯代码)请戳 http://www.cnblogs.com/corvoh/p/4641476.html Code ...

  5. C# - VS2019 通过DataGridView实现对Oracle数据表的增删改查

    前言 通过VS2019建立WinFrm应用程序,搭建桌面程序后,通过封装数据库操作OracleHelper类和业务逻辑操作OracleSQL类,进而通过DataGridView实现对Oracle数据表 ...

  6. [Django框架 - 静态文件配置、request对象方法初识、 pycharm链接数据库、ORM实操增删改查、django请求生命周期]

    [Django框架 - 静态文件配置.request对象方法初识. pycharm链接数据库.ORM实操增删改查.django请求生命周期] 我们将html文件默认都放在templates文件夹下 将 ...

  7. AngularJS中使用$http对MongoLab数据表进行增删改查

    本篇体验使用AngularJS中的$http对MongoLab数据表进行增删改查. 主页面: <button ng-click="loadCourse()">Load ...

  8. jQuery EasyUI/TopJUI实现数据表格的增删改查功能(不写js,纯HTML实现!!!)

    jQuery EasyUI/TopJUI实现数据表格的增删改查功能(不写js,纯HTML实现!!!) 废话不多说,直接贴上代码 <table id="configEdatagrid&q ...

  9. Mysql数据表的增删改查

    ---恢复内容开始--- Mysql数据表的增删改查 1.创建表   语法:CREATE TABLE 表名(字段1,字段2,字段3.......) CREATE TABLE `users` ( `us ...

随机推荐

  1. FFmpeg + SoundTouch实现音频的变调变速

    本文使用FFmpeg + SoundTouch实现将音频解码后,进行变调变速处理,并将处理后的结果保存为WAV文件. 主要有以下内容: 实现一个FFmpeg的工具类,保存多媒体文件所需的解码信息 将解 ...

  2. bzoj1901--树状数组套主席树

    树状数组套主席树模板题... 题目大意: 给定一个含有n个数的序列a[1],a[2],a[3]--a[n],程序必须回答这样的询问:对于给定的i,j,k,在a[i],a[i+1],a[i+2]--a[ ...

  3. [原创]java使用JDBC向MySQL数据库批次插入10W条数据测试效率

    使用JDBC连接MySQL数据库进行数据插入的时候,特别是大批量数据连续插入(100000),如何提高效率呢?在JDBC编程接口中Statement 有两个方法特别值得注意:通过使用addBatch( ...

  4. 如何理解DT将是未来IT的转型之路?

    如今的IT面临着内忧外患的挑战. 一方面,企业多多少少都建立了信息化,有些企业或集团甚至会有数几十个分公司,包含直销.代理.零售以及第三方物流等多种业态.越是复杂的业务,信息化建设越困难,比如运用大量 ...

  5. Java虚拟机 JVM

    finalize();(不建议使用,代价高,不确定性大) 如果你在一个类中覆写了finalize()方法, 那么你可以在第一次被GC的时候,挽救一个你想挽救的对象,让其不被回收,但只能挽救一次. GC ...

  6. Lesson 18 He often does this!

    Text After I had had lunch at a village pub, I looked for my bag. I had left it on a chair beside th ...

  7. 自学MVC看这里——全网最全ASP.NET MVC 教程汇总

    MVC架构已深得人心,微软也不甘落后,推出了Asp.net MVC.小编特意整理博客园乃至整个网络最具价值的MVC技术原创文章,为想要学习ASP.NET MVC技术的学习者提供一个整合学习入口.本文从 ...

  8. Error connecting to database [Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (13)]

    参照 http://stackoverflow.com/questions/4448467/cant-connect-to-local-mysql-server-through-socket-var- ...

  9. 如何开发一款堪比APP的微信小程序(腾讯内部团队分享)

    一夜之间,微信小程序刷爆了行业网站和朋友圈,小程序真的能如张小龙所说让用户"即用即走"吗? 其功能能和动辄几十兆安装文件的APP相比吗? 开发小程序,是不是意味着移动应用开发的一次 ...

  10. 游戏编程系列[1]--游戏编程中RPC协议的使用

    RPC(Remote Procedure Call Protocol)--远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.RPC协议假定某些传输协议的存在 ...