Java-JDBC-查询获取数据库数据
Java-JDBC-查询获取数据库数据
JDBC对数据库的操作也叫做CURD: 它代表创建(Create)、更新(Update)、读取(Retrieve)和删除(Delete)操作
在JDBC中,使⽤查询语句获取到的是⼀个resultSet数据集
这个数据集可以想象为⼀个表格,表头就是SQL语句查询的字段,每⼀⾏就是查询出来的每⼀条数据
resultSet数据集提供了⼀系列的get⽅法,可以获取数据集中的数据
resultSet数据集也有⼀个next()⽅法,这个⽅法实现的效果如果有下⼀⾏,就返回true并且游标往下移动⼀⾏,如果没有下⼀⾏数据,就返回false
如何使⽤JDBC完成数据库查询操作
在使⽤JDBC进⾏查询的时候,⼀般都先写⼀个实体类,这个实体类是为了完成将每⼀⾏数据封装为⼀个对象⽽创建,实体类中的每⼀个属性都对应SQL查询出来的每⼀个字段(实体类的具体注意事项见代码注释)
在包装实体类的时候,属性推荐使⽤包装类进⾏封装,避免空值异常
package ity;
import java.io.Serializable;
import java.util.Date;
/**
* @author: shanlei
* @version: 1.0
*/
/*
* 实体类:
* 和数据库表格名称和字段是⼀⼀对应的类
* 该类的对象主要⽤处是存储从数据库中查询出来的数据
* 除此之外,该类没有任何的其他功能
* 要求
* 1类名和表名保持⼀致  (见名知意)
* 2属性个数和数据库的表的列数保持⼀致
* 3属性的数据类型和列的数据类型保持⼀致
* 4属性名和数据库表格的列名要保持⼀致
* 5所有的属性必须都是私有的 (出于安全考虑)
* 6实体类的属性推荐写成包装类
* 7⽇期类型推荐写成java.util.Date
* 8所有的属性都要有get和set⽅法
* 9必须具备空参构造⽅法
* 10实体类应当实现序列化接⼝ (mybatis缓存分布式需要 )
* 11实体类中其他构造⽅法可选
* */
public class Emp implements Serializable {
private Integer empno;
private String ename;
private String job;
private Integer mgr;
private Date hiredate;
private Double sal;
private Double comm;
private Integer deptno;
@Override
public String toString() {
return "emp{" +
"empno=" + empno +
", ename='" + ename + '\'' +
", job='" + job + '\'' +
", mgr=" + mgr +
", hiredate=" + hiredate +
", sal=" + sal +
", comm=" + comm +
", deptno=" + deptno +
'}';
}
// 空参构造器
public Emp() {
}
// 有参构造器
public Emp(int empno, String ename, String job, int mgr, Date hiredate, double sal, double comm, int deptno) {        pno = empno;
this.job = job;
< = mgr;
resultset 遍历this.hiredate = hiredate;
this.sal = sal;
thism = comm;
this.deptno = deptno;
}
// 下⾯都是set与get⽅法
public int getEmpno() {
return empno;
}
public void setEmpno(int empno) {
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public int getMgr() {
return mgr;
}
public void setMgr(int mgr) {
< = mgr;
}
public Date getHiredate() {
return hiredate;
}
public void setHiredate(Date hiredate) {
this.hiredate = hiredate;
}
public double getSal() {
return sal;
}
public void setSal(double sal) {
this.sal = sal;
}
public double getComm() {
return comm;
}
public void setComm(double comm) {
thism = comm;
}
public int getDeptno() {
return deptno;
}
public void setDeptno(int deptno) {
this.deptno = deptno;
}
}
JDBC查询数据库数据代码
package st01;
import ity.Emp;
import java.sql.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* @author: shanlei
* @version: 1.0
*/
public class Test04 {
private static String driver = "sql.cj.jdbc.Driver";
private static String url = "jdbc:mysql://localhost/mytestdb?useSSL=false&useUnicode=ture&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai";    private static String user = "root", password = "123456";
// 这是main⽅法,实现程序主要逻辑
public static void main(String[] args) {
List<Emp> emps = testQuery();
for (Emp emp : emps) {
System.out.println(emp);
}
}
public static List<Emp> testQuery(){
Connection connection = null;
// Statement statement = null; 直接使⽤Statement执⾏查询语句可能遭到SQL注⼊攻击,推荐使⽤PreparedStatement
PreparedStatement preparedstatement = null;
ResultSet resultSet = null;
List<Emp> emps = null;
try {
// 加载注册驱动
Class.forName(driver);
//2.获得链接 Connection
connection = Connection(url, user, password);
// 3.准备SQL语句并执⾏
/*
* 1使⽤PreparedStatement语句对象防⽌SQL注⼊攻击
* 2PreparedStatement 可以使⽤ ? 作为参数的占位符
* 3使⽤?作为占位符,即使是字符串和⽇期类型,也不使⽤单独再添加 ''
* ateStatement();获得的是普通语句对象 Statement
* 5connection.prepareStatement(sql);可以获得⼀个预编译语句对象PreparedStatement
* 6如果SQL语句中有?作为参数占位符号,那么要在执⾏CURD之前先设置参数
* 7通过set***(问号的编号,数据) ⽅法设置参数
* */
String sql = "select * from emp";
preparedstatement = connection.prepareStatement(sql);
resultSet = uteQuery();// 这⾥不需要再传⼊SQL语句
// 如果不怕SQL注⼊的话也可以直接使⽤uteQuery(sql)查询语句,代码如下            /*
// 3.获取语句对象
statement = ateStatement();
// 4.执⾏语句
String sql = "select * from emp";
resultSet = uteQuery(sql);
*/
// 4.获取结果并对结果进⾏遍历封装
emps = new ArrayList<Emp>();
()){
int empno = Int("empno");
String ename = String("ename");
String job = String("job");
int mgr = Int("mgr");
Date hiredate = Date("hiredate");
double sal = Double("sal");
double comm = Double("comm");
int deptno = Int("deptno");
emps.add(new Emp(empno, ename, job, mgr, hiredate, sal ,comm, deptno));
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally{
// 5.关闭资源
if(null != resultSet){
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(null != preparedstatement){
try {
preparedstatement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(null != connection){
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return emps;
}
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。