1-查询(ResultSet)

表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。

和增删改一样,只不过增删改用executeUpdate(执行更新)

查询用executeQuery(执行查询)

1、普通查询statement

1.1按照下标取值

固定写法:

{//1、加载驱动
Class.forName("com.mysql.jdbc.Driver");//2、通过驱动管理器获得连接对象
Connection conn = DriverManager.getConnection
("jdbc:mysql://localhost:3306/java2212?useSSL=false","root","123456"); //3、创建查询对象
Statement s = conn.createStatement("需要查询的内容");//4、查询返回的是一种虚拟表,用集合装数据.即ResultSet
ResultSet rs = s.executeQuery//5、查询
while(rs.next){//下标是每一列的下标从1开始//表中的数据与get方法对应int id = re.getInt(1);String name = rs.getString(2);
}
//关闭流
rs.close();
s.close();
conn.close();
package com.qf.jdbc;import java.sql.*;/*** --- 天道酬勤 ---** @author QiuShiju* @desc*/
public class Demo1_select {public static void main(String[] args) throws Exception {Class.forName("com.mysql.jdbc.Driver");Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/java2212?useSSL=false","root","123456");Statement s = conn.createStatement( );// 执行查询使用executeQueryString sql = "select sal,hiredate,empno id,ename name from emp";// 查询返回的是一种虚拟表,用集合装数据.即ResultSetResultSet rs = s.executeQuery(sql);while(rs.next()){/*** 取值有两种方式:*    getXxx(),根据数据类型再按以下方式取值*   1 按照列下标,从1开始,与虚拟表列顺序一致*   2 按照列名,是虚拟表的名字.即如果有别名就是别名取值*/// 列下标取值int empno = rs.getInt(1);String ename = rs.getString(2);double sal = rs.getDouble(3);Date date = rs.getDate(4);System.out.println(empno+"-"+ename+"-"+sal+"-"+date);}// 结果集关流rs.close();s.close();conn.close();}
}

1.2按照列名取值

取值的时候,将int empno = rs.getInt(1);换成名字即可,

学到这可以把下标取值彻底忘掉了,,,

int empno = rs.getInt(1);

int empno = rs.getInt(“id”);

2-登录案例

需求:判断数据中是否从存在输入的用户名和密码

准备数据表
CREATE TABLE `user` (`uid` int(11) NOT NULL AUTO_INCREMENT,`username` varchar(255) DEFAULT NULL,`password` varchar(255) DEFAULT NULL,`createTime` date DEFAULT NULL,PRIMARY KEY (`uid`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

先输入信息,然后查找信息,where条件是对应的列名等于输入的值

if语句判断每一列是否存在这一组信息,存在就输出,不存在就直接else。

不建议用while,因为查找信息本来就是以行为单位的,不在一行的信息,不能一起匹配。

if是可直接判断,while需要一行一行的循环查找,

package day29.ZYH.a_statement;import java.sql.Date;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;public class Demo3 {public static void main(String[] args) throws InterruptedException, ClassNotFoundException, SQLException {Scanner scanner = new Scanner(System.in);System.out.println("请输入账号名字:");String importUsername = scanner.next();System.out.println("请输入密码;");int importPassword = scanner.nextInt();System.out.print("正在登录");for (int i = 0; i < 3; i++) {Thread.sleep(1000);System.out.print(" .");}System.out.println();Class.forName("com.mysql.jdbc.Driver");ResultSet resultSet = DriverManager.getConnection("jdbc:mysql://localhost:3306/day29?useSSL=false","root","123456").createStatement().executeQuery("select * from user where username = '" + importUsername + "' and password = " + importPassword);if (resultSet.next()) {int uid = resultSet.getInt("uid");String username = resultSet.getString("username");int password = resultSet.getInt("password");Date createTime = resultSet.getDate("createTime");System.out.println("登录成功!!!");System.out.println("你的id是:" + uid + ", 用户名是:" + username + ",你的密码是:" + password + ", 注册日期是:" + createTime);} else {System.out.println("用户名或密码错误");}}
}

3-SQL被乱入!!!

SQL注入

就是利用一些sql关键词,拼接进sql字符串中,执行时出现一下以外的情况,严重时还会破坏数据库,非常的危险!!!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mc4uxuul-1661161336747)(D:\千峰上课\Every Day Stage2\day29\code\day29-jdbc.assets\image-20220819144743111.png)]

如上图,在输入的东西,字符串拼接输入or,意思是或,1=1,一定是true,那么久执行。本不该成功登录的信息,变得可以登录了

4-预处理语句【重点】parameterStatement

将之前的处理语句变为预处理语句parameterStatement

用于解决

paramenter格式和Statement的差别:

//直接在结果集中添加就可以,不需要额外的操作
【Statment】:
ResultSet rs = s.executeQuery("select * from user where username = '"+username+"' and password = '"+password+"'"
);//需要在添加时,先把执行语句处理一下,conn.preparedStatement必须在传给结果集之前定义它的值
//把conn.prepareStatement中的量变成【?】
PreparedStatement ps = conn.prepareStatement("select * from user where username = ? and password = ?");
//再把指定的值赋给conn.prepareStatement的【?】
//第一个【?】是1,第二个【?】是2
//后边跟值
ps.setString(1,username);
ps.setString(2,password);
//预处理后,传给结果集ResultSet
ResultSet rs = ps.executeQuery();

总结:就是多了一步预处理,其他操作完全一样

ORM【重点】

是一种思维,是用对象封装数据,类对应表名属性对应列,属性值对应列值,将值赋给对象进行封装,将对象加入到集合中;

Object Relation Mapping 对象关系映射,使用ORM来封装数据。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aOjs6c10-1661161336749)(D:\千峰上课\Every Day Stage2\day29\code\day29-jdbc.assets\image-20220819161434668.png)]


案例: 查询Emp为例演示,使用对象封装数据

第一步:根据表设计类


ject Relation Mapping 对象关系映射,使用ORM来封装数据。

[外链图片转存中…(img-aOjs6c10-1661161336749)]


案例: 查询Emp为例演示,使用对象封装数据

第一步:根据表设计类


将SQL导入JAVA的后续操作相关推荐

  1. vb.net datagridview数据批量导入sql_导入:Java实现大批量数据导入导出(100W以上)

    阅读文本大概需要3分钟. 来源:https://www.cnblogs.com/barrywxx/p/10700221.html 最近业务方有一个需求,需要一次导入超过100万数据到系统数据库.可能大 ...

  2. jsp页面导入java包能干嘛_在JSP中如果要导入java.util.*包要使用什么指令

    [判断题]扶梯满载上行时,所需总功率等于驱动梯级所需的功率乘以传动总效率. [判断题]电梯制动器闸瓦应均匀,其四角处间隙平均值两侧各不大于0.7mm. [多选题]以下()触点断开会使MC线圈断电. [ ...

  3. 谁是当今最顶级的技术?SQL、Java、Python、C++ 皆上榜!

    [12月公开课预告],入群直接获取报名地址 12月11日晚8点直播主题:人工智能消化道病理辅助诊断平台--从方法到落地 12月12日晚8点直播:利用容器技术打造AI公司技术中台 12月17日晚8点直播 ...

  4. java中日期的数据类型是啥_用于存储日期和时间的最合适的SQL和Java数据类型

    使用以下格式处理日期和时间的最合适的MySQL和Java数据类型是什么:yyyy.MM.dd hh:mm:ss 在持久层(jdbc类型)中使用的相应Java类型是java.sql.Timestamp. ...

  5. 在Eclipse中导入Java程序

    在Eclipse中导入Java程序 在 Eclipse 中导入 Java 程序 在 Eclipse 中导入 Java 程序,分导入Java Project和导入Java源程序 两种情况,简述如下. 情 ...

  6. oracle导入dmp报无效的sql,oracle施用pl/sql导入数据库备份文件dmp导入失败原因

    oracle使用pl/sql导入数据库备份文件dmp导入失败原因 利用PL/SQL导入数据库备份失败: Tools→Import →Tables Import Executable选择导入工具路径 D ...

  7. vbs文件放在java工程中如何调用_Eclipse软件导入Java工程文件的操作方法。

    Eclipse软件怎么导入Java工程文件?有些在学习Java编程的用户虽然会创建工程,但是对于怎么导入工程文件却不清楚,下面教大家如何在Eclipse软件中导入Java工程文件. 解决方法: 1.在 ...

  8. 计算机技能最新需求排名:Python增速爆炸,SQL和Java老当益壮,AWS令人惊讶

    赖可 发自 凹非寺 量子位 报道 | 公众号 QbitAI 掌握了什么计算机技术可以走遍天下都不怕? 从2014到2019年,老板最想要的技能变了吗? 美国求职公司Indeed从几百万份招聘中做了总结 ...

  9. 【IntelliJ IDEA】创建 导入 Java 项目

    文章目录 I. IntelliJ IDEA 创建 Java 项目流程 II. IntelliJ IDEA 导入 Java 项目流程 I. IntelliJ IDEA 创建 Java 项目流程 1. 进 ...

最新文章

  1. 新华三,定义服务器虚拟化市场新格局
  2. 学生电脑哪个牌子好_泡脚足浴盆哪个牌子好?家用足浴盆哪个品牌好?足浴盆哪个牌子最安全?...
  3. Superhero Transformation
  4. 在Ubuntu8.04上编译安装QT4(Application Development)开发环境
  5. MyBatis 插件怎么编写和使用?原理是什么?
  6. 前端路由实现原理(history)
  7. Kafka三款监控工具比较
  8. solr简介——(九)
  9. CMD中文显示为乱码
  10. 关于XRD你知道多少
  11. 初级算法代码-位移密码
  12. idea的设置,导致list长度只有1000
  13. 新增经营情况汇总报表
  14. Markdown - 如何给文本加下划线
  15. 采用现场总线协议的压力变送器特性介绍
  16. 模拟用户操作购物车添加商品修改数量
  17. LIME Low light Image Enhancement via Illumination Map Estimation
  18. unity urp 棉麻织物渲染
  19. 心情好些了,发现自己还是适合专注科研
  20. android string 原理,Android中的SpannableString,Spans以及TextView绘制原理

热门文章

  1. 七牛上传图片初探 开始上传 暂停上传 继续上传
  2. 转-SIP穿越NAT SIP穿越防火墙
  3. 赛格威机器人待遇_赛格威配送机器人:年内做到10天无故障 3年10万台
  4. 安装 window10 系统
  5. aur打包linux微信,ArchLinux微信、TIM安装与乱码解决方法
  6. 智能电表如何采集数据?
  7. 凸包算法(Graham扫描法)
  8. qr-rls算法matlab实现,【预测模型】基于RLS算法进行预测matlab源码
  9. html简单边框制作--特效文字制作及代码,HTML音画介绍之一--基本原理和边框的制作...
  10. CASS方格网法土石方量计算