问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

jdbc select数据库中数据时rs.next()明明是true,可是就是进不去while(rs.next())循环中

发布网友 发布时间:2022-04-10 23:11

我来回答

5个回答

懂视网 时间:2022-04-11 03:32

* 定义一个方法,查询emp表的数据将其封装为对象,然后装载集合,返回。 1. 定义Emp类 2. 定义方法 public List<Emp> findAll(){} 3. 实现方法 select * from emp;


2、建表

create table emp(
id int primary key not null,
ename varchar(50),
job_id int,
mgr int,
joindate date,
salary decimal(7,2),
bonus decimal(7,2),
dept_id int
);


insert into emp values(1001,‘孙悟空‘,4,1004,‘2000-12-17‘,8000.00,null,20);
insert into emp values(1002,‘卢俊义‘,3,1006,‘2001-02-20‘,16000.00,3000.00,30);
insert into emp values(1003,‘林冲‘,3,1006,‘2001-02-22‘,12500.00,5000.00,30);


3、代码

Emp类

package cn.itcast.domain;

import java.util.Date;

public class Emp {
 private int id;
 private String ename;
 private int job_id;
 private int mgr;
 private Date joindate;
 private double salary;
 private double bonus;
 private int dept_id;


 public int getId() {
 return id;
 }

 public void setId(int id) {
 this.id = id;
 }

 public String getEname() {
 return ename;
 }

 public void setEname(String ename) {
 this.ename = ename;
 }

 public int getJob_id() {
 return job_id;
 }

 public void setJob_id(int job_id) {
 this.job_id = job_id;
 }

 public int getMgr() {
 return mgr;
 }

 public void setMgr(int mgr) {
 this.mgr = mgr;
 }

 public Date getJoindate() {
 return joindate;
 }

 public void setJoindate(Date joindate) {
 this.joindate = joindate;
 }

 public double getSalary() {
 return salary;
 }

 public void setSalary(double salary) {
 this.salary = salary;
 }

 public double getBonus() {
 return bonus;
 }

 public void setBonus(double bonus) {
 this.bonus = bonus;
 }

 public int getDept_id() {
 return dept_id;
 }

 public void setDept_id(int dept_id) {
 this.dept_id = dept_id;
 }


 @Override
 public String toString() {
 return "Emp{" +
  "id=" + id +
  ", ename=‘" + ename + ‘‘‘ +
  ", job_id=" + job_id +
  ", mgr=" + mgr +
  ", joindate=" + joindate +
  ", salary=" + salary +
  ", bonus=" + bonus +
  ", dept_id=" + dept_id +
  ‘}‘;
 }
}


实现:

package cn.itcast.jdbc;

import cn.itcast.domain.Emp;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

/*
 * *定义一个方法,查询emp表的数据将其封装为对象,然后装载集合,返回。
 */
public class JDBCDemo8 {
 public static void main(String[] args) {
 List<Emp> list = new JDBCDemo8().findall();
 System.out.println(list);
 }
 /**
 * 查询所有对象
 *
 */
 public List<Emp> findall() {
 Connection conn = null;
 Statement stmt = null;
 ResultSet rs = null;
 ArrayList<Emp> list = null;
 try {
  //1.注册驱动
  Class.forName("com.mysql.jdbc.Driver");
  //2.获取连接
  conn = DriverManager.getConnection("jdbc:mysql:///ceshi", "root", "123456");
  //3.定义SQL
  String sql = "select * from emp";
  //4.获取执行SQL的对象
  stmt = conn.createStatement();
  //5.执行SQL
  rs = stmt.executeQuery(sql);
  //6.遍历结果集,封装对象,装载集合
  Emp emp = null;
  list = new ArrayList<>();
  while (rs.next()) {
  //获取数据
  int id = rs.getInt("id");
  String ename = rs.getString("ename");
  int job_id = rs.getInt("job_id");
  int mgr = rs.getInt("mgr");
  Date joindate = rs.getDate("joindate");
  double salary = rs.getDouble("salary");
  double bonus = rs.getDouble("bonus");
  int dept_id = rs.getInt("dept_id");
  //创建emp对象
  emp = new Emp();
  emp.setId(id);
  emp.setEname(ename);
  emp.setJob_id(job_id);
  emp.setMgr(mgr);
  emp.setJoindate(joindate);
  emp.setSalary(salary);
  emp.setBonus(bonus);
  emp.setDept_id(dept_id);
  //装载集合
  list.add(emp);
  }

 } catch (ClassNotFoundException e) {
  e.printStackTrace();
 } catch (SQLException e) {
  e.printStackTrace();
 } finally {
  if (rs != null) {
  try {
   rs.close();
  } catch (SQLException e) {
   e.printStackTrace();
  }
  }

  if (stmt != null) {
  try {
   stmt.close();
  } catch (SQLException e) {
   e.printStackTrace();
  }
  }

  if (conn != null) {
  try {
   conn.close();
  } catch (SQLException e) {
   e.printStackTrace();
  }
  }
 }
 return list;

 }

}


二、JDBC工具类

1、说明

在写jdbc时,有很多重复代码,可以写一个工具类,来简化书写;


2、分析

分析:
 1. 注册驱动也抽取
 
 2. 抽取一个方法获取连接对象
 * 需求:不想传递参数(麻烦),还得保证工具类的通用性。
 * 解决:配置文件
  jdbc.properties
  url=
  user=
  password=
  
 3. 抽取一个方法释放资源


3、jdbc工具类

package cn.itcast.util;

import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.sql.*;
import java.util.Properties;

/**
 * JDBC工具类
 */
public class JDBCUtils {
 private static String url;
 private static String user;
 private static String password;
 private static String driver;
 /**
 * 文件的读取,只需要读取一次即可拿到这些值。使用静态代码块
 */
 static{
 //读取资源文件,获取值。

 try {
  //1. 创建Properties集合类。
  Properties pro = new Properties();

  //获取src路径下的文件的方式--->ClassLoader 类加载器
  ClassLoader classLoader = JDBCUtils.class.getClassLoader();
  URL res = classLoader.getResource("jdbc.properties");
  String path = res.getPath();
  // System.out.println(path);///D:/IdeaProjects/itcast/out/production/day04_jdbc/jdbc.properties
  //2. 加载文件
  // pro.load(new FileReader("D:\IdeaProjects\itcast\day04_jdbc\src\jdbc.properties"));
  pro.load(new FileReader(path));

  //3. 获取数据,赋值
  url = pro.getProperty("url");
  user = pro.getProperty("user");
  password = pro.getProperty("password");
  driver = pro.getProperty("driver");
  //4. 注册驱动
  Class.forName(driver);
 } catch (IOException e) {
  e.printStackTrace();
 } catch (ClassNotFoundException e) {
  e.printStackTrace();
 }
 }


 /**
 * 获取连接
 * @return 连接对象
 */
 public static Connection getConnection() throws SQLException {

 return DriverManager.getConnection(url, user, password);
 }

 /**
 * 释放资源
 * @param stmt
 * @param conn
 */
 public static void close(Statement stmt,Connection conn){
 if( stmt != null){
  try {
  stmt.close();
  } catch (SQLException e) {
  e.printStackTrace();
  }
 }

 if( conn != null){
  try {
  conn.close();
  } catch (SQLException e) {
  e.printStackTrace();
  }
 }
 }


 /**
 * 释放资源
 * @param stmt
 * @param conn
 */
 public static void close(ResultSet rs,Statement stmt, Connection conn){
 if( rs != null){
  try {
  rs.close();
  } catch (SQLException e) {
  e.printStackTrace();
  }
 }

 if( stmt != null){
  try {
  stmt.close();
  } catch (SQLException e) {
  e.printStackTrace();
  }
 }

 if( conn != null){
  try {
  conn.close();
  } catch (SQLException e) {
  e.printStackTrace();
  }
 }
 }

}


配置文件

--jdbc.properties--

url=jdbc:mysql:///db3
user=root
password=root
driver=com.mysql.jdbc.Driver


使用JDBC工具类

public List<Emp> findAll2(){
 Connection conn = null;
 Statement stmt = null;
 ResultSet rs = null;
 List<Emp> list = null;
 try {
  conn = JDBCUtils.getConnection();
  //3.定义sql
  String sql = "select * from emp";
  //4.获取执行sql的对象
  stmt = conn.createStatement();
  //5.执行sql
  rs = stmt.executeQuery(sql);
  //6.遍历结果集,封装对象,装载集合
  Emp emp = null;
  list = new ArrayList<Emp>();
  while (rs.next()) {
  // 获取数据
  int id = rs.getInt("id");
  String ename = rs.getString("ename");
  int job_id = rs.getInt("job_id");
  int mgr = rs.getInt("mgr");
  Date joindate = rs.getDate("joindate");
  double salary = rs.getDouble("salary");
  double bonus = rs.getDouble("bonus");
  int dept_id = rs.getInt("dept_id");
  // 创建emp对象,并赋值
  emp = new Emp();
  emp.setId(id);
  emp.setEname(ename);
  emp.setJob_id(job_id);
  emp.setMgr(mgr);
  emp.setJoindate(joindate);
  emp.setSalary(salary);
  emp.setBonus(bonus);
  emp.setDept_id(dept_id);

  //装载集合
  list.add(emp);
  }

 } catch (SQLException e) {
  e.printStackTrace();
 }finally {

  JDBCUtils.close(rs,stmt,conn);
 }
 return list;
 }

}


三、JDBC登录案例

package cn.itcast.jdbc;

import cn.itcast.util.JDBCUtils;

import java.sql.*;
import java.util.Scanner;

/**
 * 练习:
 *  * 需求:
 *  1. 通过键盘录入用户名和密码
 *  2. 判断用户是否登录成功
 */
public class JDBCDemo9 {

 public static void main(String[] args) {
 //1.键盘录入,接受用户名和密码
 Scanner sc = new Scanner(System.in);
 System.out.println("请输入用户名:");
 String username = sc.nextLine();
 System.out.println("请输入密码:");
 String password = sc.nextLine();
 //2.调用方法
 boolean flag = new JDBCDemo9().login2(username, password);
 //3.判断结果,输出不同语句
 if(flag){
  //登录成功
  System.out.println("登录成功!");
 }else{
  System.out.println("用户名或密码错误!");
 }


 }



 /**
 * 登录方法
 */
 public boolean login(String username ,String password){
 if(username == null || password == null){
  return false;
 }
 //连接数据库判断是否登录成功
 Connection conn = null;
 Statement stmt = null;
 ResultSet rs = null;
 //1.获取连接
 try {
  conn = JDBCUtils.getConnection();
  //2.定义sql
  String sql = "select * from user where username = ‘"+username+"‘ and password = ‘"+password+"‘ ";
  System.out.println(sql);
  //3.获取执行sql的对象
  stmt = conn.createStatement();
  //4.执行查询
  rs = stmt.executeQuery(sql);
  //5.判断
  /* if(rs.next()){//如果有下一行,则返回true
  return true;
  }else{
  return false;
  }*/
  return rs.next();//如果有下一行,则返回true

 } catch (SQLException e) {
  e.printStackTrace();
 }finally {
  JDBCUtils.close(rs,stmt,conn);
 }


 return false;
 }

 /**
 * 登录方法,使用PreparedStatement实现
 */
 public boolean login2(String username ,String password){
 if(username == null || password == null){
  return false;
 }
 //连接数据库判断是否登录成功
 Connection conn = null;
 PreparedStatement pstmt = null;
 ResultSet rs = null;
 //1.获取连接
 try {
  conn = JDBCUtils.getConnection();
  //2.定义sql
  String sql = "select * from user where username = ? and password = ?";
  //3.获取执行sql的对象
  pstmt = conn.prepareStatement(sql);
  //给?赋值
  pstmt.setString(1,username);
  pstmt.setString(2,password);
  //4.执行查询,不需要传递sql
  rs = pstmt.executeQuery();
  //5.判断
  /* if(rs.next()){//如果有下一行,则返回true
  return true;
  }else{
  return false;
  }*/
  return rs.next();//如果有下一行,则返回true

 } catch (SQLException e) {
  e.printStackTrace();
 }finally {
  JDBCUtils.close(rs,pstmt,conn);
 }


 return false;
 }

}


建表语句

create table USER (
 id INT PRIMARY KEY AUTO_INCREMENT,
 username VARCHAR(32),
 PASSWORD VARCHAR(32)
);


insert into user values(null,‘zhangsan‘,‘123‘);
insert into user values(null,‘lisi‘,‘234‘);

JDBC-select练习&jdbc工具类

标签:manage   dea   root   bcd   strong   into   insert   out   test   

热心网友 时间:2022-04-11 00:40

额!是不是你的数据查找出来只有一条,然后你已经输出了rs.next()了,然后第二次就不可能为true了!!

热心网友 时间:2022-04-11 01:58

哥们你的这个问题解决了吗?我也遇到了,就是不执行,到底怎么回事啊?

热心网友 时间:2022-04-11 03:33

错误示例:
ResultSet rs = ps.executeQuery();
System.out.println(rs.next());
while(rs.next()) {
name= rs.getString("name");
}
正确示例:
ResultSet rs = ps.executeQuery();
while(rs.next()) {
name= rs.getString("name");
}
错误代码:System.out.println(rs.next());
原因:因为rs.next()是游标,可以看成指针,当System.out.println(rs.next());输出来之后,就代表该指针已经获取了第一行的数据。因此进入while(rs.next){
}时,指针再向下走就会获取第二行的数据,刚好你没有第二行数据,因此返回false。

热心网友 时间:2022-04-11 05:24

我也遇到这种情况,但是我这边能查到结果的为true,查不到的为false
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
历史要怎么读,有啥诀窍 高中历史诀窍 年终会活动策划方案 深度解析:第一财经回放,探索财经新风向 逆水寒手游庄园怎么邀请好友同住 逆水寒手游 逆水寒不同区可以一起组队吗? 逆水寒手游 逆水寒怎么进入好友世界? 逆水寒手游 逆水寒怎么去别人的庄园? 使用puppeteer实现将htmll转成pdf 内卷时代下的前端技术-使用JavaScript在浏览器中生成PDF文档 如果找工作遇到被骗钱了打什么电话投诉 你好,我在惠州做工地被公司骗了,我想曝光公司哪些不合法的事情,该打什么电话 我装修房子。被装修公司欺骗了。该怎么办。是直接打电话给315吗? 如果被骗了打骗子公司当地的工商局电话,他们会处理? 被所谓的公司给骗了应该打什么电话举报? 举报公司怎么举报我被一家公司骗了 被外省公司骗了打哪里工商局电话报警? 中国员工被日本老板欺骗我们该打什么电话? 赛尔号手游精灵的血怎么上五百? 请问大家赛尔号手游的基地在哪儿和怎样回收精灵呢 赛尔号手游的巅峰圣战 违规了添加不了好友也进不去群聊怎么解决? 投资纸黄金做短期。 赛尔号手游萨格罗斯和塔克林谁强 请问工行的纸黄金与股票的买卖操作相同吗??? 我是赛尔号新手(9月1日建的号),怎么打塔克林? 赛尔号手游机械塔克林增幅道具怎么得 赛尔号手游机械塔克林特性什么好? 求聚星好看的言情小说 支气管炎者宜注意些什么问题?宜吃什么?不宜吃什么?急需知道! 求一份劳动争议仲裁申请书 万分感谢 NBA中谁打架最厉害 马天宇微博为何被举报? 马天宇的近况如何,他最近有什么工作安排? 钟汉良和马天宇闹崩了么? 你是怎么看待马天宇的? 马天宇已经很少出现在荧幕上了,他都在忙些什么? 关于微博评论的问题,非常奇怪,求解。马天宇发出的评论总会提醒我,怎么关掉 被网络暴力多年的马天宇是怎么回应的? 为什么马天宇的微博全没有了 马天宇发微博“我要发疯了”,随后就发大尺度照片,是他本人所为吗? 新浪微博为什么关闭评论,别人还是可以回复? 马天宇的父亲是怎么找到的? 安源煤业股票最新走势?安源煤业最新分析预测?600397安源煤业今天什么价? 求国外的舆情研究现状 国外的网络舆情研究有哪些进展? 安源煤业股票今年最高价?安源煤业600397股票价格?安源煤业目前会继续涨吗? 求:舆情 现状及发展对策 抖音上因为主播让我送礼,骂了对方被他拉黑,但是我还是想看他直播,怎么办,还有其它什么办法吗_百度问一问 安源煤业为什么猛涨?安源煤业四季报 年报情况?600397安源煤业股股东?