本专栏主要是记录学习完JavaSE后学习JavaWeb部分的一些知识点总结以及遇到的一些问题等,如果刚开始学习Java的小伙伴可以点击下方连接查看专栏
本专栏地址:🔥JDBC
Java入门篇: 🔥Java基础学习篇
Java进阶学习篇(持续更新中):🔑Java进阶学习篇
文章目录
一、前言
这篇文章中会对【JavaWeb | JDBC概述及IDEA连接MySQL】中提到的API做出详细的解释,帮助大家理解,加深印象,以便于在接下来的学习过程中不用去死记硬背每一行代码,而是理解了去编写代码(知道原理在面试中也是很重要的)
二、Statement
1.概述
Statement 对象表示基本语句,其中将单个方法应用于某一目标和一组参数,以返回结果,比如 “a.setFoo(b)”。
Statement对象的作用就是用来执行SQL语句。而针对不同类型的SQL语句使用的方法也不一样
2.方法摘要
这里只需要知道其方法即可,接下来的重点会在ResultSet中详细描述
//获取执行sql的对象Statement stmt = c.createStatement();//执行sqlResultSet result = stmt.executeQuery(sql);
三、ResultSet
1.概述
从API帮助文档中可以看到该方法的描述
表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。
ResultSet 对象具有指向其当前数据行的光标。最初,光标被置于第一行之前。next 方法将光标移动到下一行;因为该方法在ResultSet 对象没有下一行时返回 false,所以可以在 while 循环中使用它来迭代结果集。
默认的 ResultSet对象不可更新,仅有一个向前移动的光标。因此,只能迭代它一次,并且只能按从第一行到最后一行的顺序进行。可以生成可滚动和/或可更新的 ResultSet 对象。
一般在修改数据库中的某个字段的值、删除某个字段或者将表中的数据封装到一个集合中时会用到这个方法;即在执行完SQL语句以后要有一个变量去接收它,然后再调用set方法进行复制后调用get方法来获取值
ResultSet executeQuery(sql):执行DQL 语句,返回 ResultSet 对象
2.方法摘要
1️⃣getXXX(int columnIndex)
以 Java 编程语言中 int 的形式获取此 ResultSet 对象的当前行中指定列的值
代码实现
//定义SQL语句String sql ="SELECT * FROM user ";//获取执行sql的对象Statement stmt = c.createStatement();//执行sqlResultSet result = stmt.executeQuery(sql);//获取此 ResultSet 对象的当前行中指定列的值int id = result.getInt("id");
在IDEA中有快捷键,当我们输入了右边的
result.getInt("id")
后,使用快捷键
Ctrl+Alt+V
可以一键生成左边,并且其变量名也可以自己选择,就不用自己去书写了,而且连数据类型也自动生成了!
2️⃣boolean next()
将光标从当前位置向前移一行。ResultSet 光标最初位于第一行之前;第一次调用 next 方法使第一行成为当前行;第二次调用使第二行成为当前行,依此类推
第一次箭头是指向表头行,如下图所示
当我们调用了
next()
方法后,光标就下移到第一行数据,并且方法返回true,此时就可以通过
getInt("id")
获取当前行id字段的值,也可以通过
getString("name")
获取当前行name字段的值。如果想获取下一行的数据,继续调用
next()
方法,以此类推。
直到最后一行,再调用
next()
方法的话,就是无效行,因为这时候箭头指向空,那么想要将表中数据放入集合中就可以使用
next()
方法,再套用一个
while
循环。当箭头指向有效行时,用
get
方法取出表中数据,再调用
set
方法对集合内的属性进行赋值。
四、将表中数据存储到集合中
1.创建实体类
由于我们数据库中的表名是user,所以这里定义实体类的名字就是User;在这个实体类中定义的成员变量就是表中的字段名(id,name,money)这里要和表中一致,否则容易出错
然后使用快捷键一键生成JavaBean类,并使用
Alt+Insert
快捷键重写toString类(一定要重写toString类,否则无法生成)具体的原因可以参照这篇文章回顾一下
publicclassUser{privateint id;privateString name;privatedouble money;publicUser(){}publicUser(int id,String name,double money){this.id = id;this.name = name;this.money = money;}/**
* 获取
* @return id
*/publicintgetId(){return id;}/**
* 设置
* @param id
*/publicvoidsetId(int id){this.id = id;}/**
* 获取
* @return name
*/publicStringgetName(){return name;}/**
* 设置
* @param name
*/publicvoidsetName(String name){this.name = name;}/**
* 获取
* @return money
*/publicdoublegetMoney(){return money;}/**
* 设置
* @param money
*/publicvoidsetMoney(double money){this.money = money;}@OverridepublicStringtoString(){return"User{"+"id="+ id +", name='"+ name +'\''+", money="+ money +'}';}}
2.查询表数据
这里代码与之前差不多,唯一不同的是在执行完SQL语句后要使用
ResultSet
方法来接收变量,以便于调用get和set方法(变量名可以自己取,这里为了可读性所以使用小写的result)
//注册驱动Class.forName("com.mysql.jdbc.Driver");//获取连接String url ="jdbc:mysql://localhost:3306/test?useSSL=false";String username ="root";String password ="123456";Connection c =DriverManager.getConnection(url,username,password);//定义sqlString sql ="SELECT * FROM user ";//获取执行sql的对象Statement stmt = c.createStatement();//执行sqlResultSet result = stmt.executeQuery(sql);
3.创建集合
这里List后的名字取决于你的实体类名字
List<User> list =newArrayList<>();
4.获取数据并赋值
首先我们要新建一个User对象user才能用来给集合内的变量赋值
//新建User对象User user =newUser();int id = result.getInt("id");String name = result.getString("name");double money = result.getInt("money");//set方法进行赋值
user.setId(id);
user.setName(name);
user.setMoney(money);
5.将数据存入集合
//add方法存入集合
list.add(user);
6.打印输出集合
System.out.println(list);
7.释放资源
//释放资源
result.close();
stmt.close();
c.close();
8.完整代码
importpojo.User;importjava.sql.*;importjava.util.ArrayList;importjava.util.List;publicclass jdbcDemo2 {publicstaticvoidmain(String[] args)throwsException{//注册驱动Class.forName("com.mysql.jdbc.Driver");//获取连接String url ="jdbc:mysql://localhost:3306/test?useSSL=false";String username ="root";String password ="123456";Connection c =DriverManager.getConnection(url,username,password);//定义sqlString sql ="SELECT * FROM user ";//获取执行sql的对象Statement stmt = c.createStatement();//执行sqlResultSet result = stmt.executeQuery(sql);//创建集合List<User> list =newArrayList<>();//遍历表while(result.next()){//新建User对象User user =newUser();//get方法获取数据int id = result.getInt("id");String name = result.getString("name");double money = result.getInt("money");//set方法进行赋值
user.setId(id);
user.setName(name);
user.setMoney(money);//add方法存入集合
list.add(user);}//输出集合System.out.println(list);//释放资源
result.close();
stmt.close();
c.close();}}
五、结语
接下来会讲述有关于SQL注入相关问题
版权归原作者 Alita11101_ 所有, 如有侵权,请联系我们删除。