how2j.cn


工具版本兼容问题
执行查询SQL语句


本视频是解读性视频,所以希望您已经看过了本知识点的内容,并且编写了相应的代码之后,带着疑问来观看,这样收获才多。 不建议一开始就观看视频



9分20秒
本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器



步骤 1 : 查询语句   
步骤 2 : SQL语句判断账号密码是否正确   
步骤 3 : 获取总数   
步骤 4 : 练习-分页查询   
步骤 5 : 答案-分页查询   

executeQuery 执行SQL查询语句

注意: 在取第二列的数据的时候,用的是rs.get(2) ,而不是get(1). 这个是整个Java自带的api里唯二的地方,使用基1的,即2就代表第二个。

另一个地方是在PreparedStatement这里
查询语句
package jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class TestJDBC { public static void main(String[] args) { try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } try (Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8", "root", "admin"); Statement s = c.createStatement();) { String sql = "select * from hero"; // 执行查询语句,并把结果集返回给ResultSet ResultSet rs = s.executeQuery(sql); while (rs.next()) { int id = rs.getInt("id");// 可以使用字段名 String name = rs.getString(2);// 也可以使用字段的顺序 float hp = rs.getFloat("hp"); int damage = rs.getInt(4); System.out.printf("%d\t%s\t%f\t%d%n", id, name, hp, damage); } // 不一定要在这里关闭ReultSet,因为Statement关闭的时候,会自动关闭ResultSet // rs.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
步骤 2 :

SQL语句判断账号密码是否正确

edit
1. 创建一个用户表,有字段name,password
2. 插入一条数据

insert into user values(null,'dashen','thisispassword');

3. SQL语句判断账号密码是否正确

判断账号密码的正确方式是根据账号和密码到表中去找数据,如果有数据,就表明密码正确了,如果没数据,就表明密码错误。

不恰当的方式 是把uers表的数据全部查到内存中,挨个进行比较。 如果users表里有100万条数据呢? 内存都不够用的。
CREATE TABLE user ( id int(11) AUTO_INCREMENT, name varchar(30) , password varchar(30), PRIMARY KEY (id) ) ; insert into user values(null,'dashen','thisispassword');
package jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class TestJDBC { public static void main(String[] args) { try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } try (Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8", "root", "admin"); Statement s = c.createStatement(); ) { String name = "dashen"; //正确的密码是:thisispassword String password = "thisispassword1"; String sql = "select * from user where name = '" + name +"' and password = '" + password+"'"; // 执行查询语句,并把结果集返回给ResultSet ResultSet rs = s.executeQuery(sql); if(rs.next()) System.out.println("账号密码正确"); else System.out.println("账号密码错误"); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
执行的sql语句为

select count(*) from hero

然后通过ResultSet获取出来
获取总数
package jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class TestJDBC { public static void main(String[] args) { try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } try (Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8", "root", "admin"); Statement s = c.createStatement();) { String sql = "select count(*) from hero"; ResultSet rs = s.executeQuery(sql); int total = 0; while (rs.next()) { total = rs.getInt(1); } System.out.println("表Hero中总共有:" + total+" 条数据"); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
步骤 4 :

练习-分页查询

edit  姿势不对,事倍功半! 点击查看做练习的正确姿势
设计一个方法,进行分页查询

public static void list(int start, int count)

start 表示开始页数,count表示一页显示的总数
list(0,5) 表示第一页,一共显示5条数据
list(10,5) 表示第三页,一共显示5条数据
进行分页查询用到的SQL语句参考 : 查询数据
步骤 5 :

答案-分页查询

edit
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
查看本答案会花费3个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
查看本答案会花费3个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
账号未激活 账号未激活,功能受限。 请点击激活
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频

3分15秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器


package jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class TestJDBC { public static void list(int start, int count){ try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } try (Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8", "root", "admin"); Statement s = c.createStatement();) { String sql = "select * from hero limit " +start + "," + count; // 执行查询语句,并把结果集返回给ResultSet ResultSet rs = s.executeQuery(sql); while (rs.next()) { int id = rs.getInt("id");// 可以使用字段名 String name = rs.getString(2);// 也可以使用字段的顺序 float hp = rs.getFloat("hp"); int damage = rs.getInt(4); System.out.printf("%d\t%s\t%f\t%d%n", id, name, hp, damage); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) { list(10,5); } }


HOW2J公众号,关注后实时获知最新的教程和优惠活动,谢谢。


问答区域    
2024-07-14 利用SQL语句分页查询实现
虚心求学




运行结果 以下是从索引0开始的前5个数据 1 Hero1 100.000000 2 Hero2 100.000000 3 Hero3 100.000000 4 Hero4 100.000000 5 Hero5 100.000000 以下是第2页的内容 6 Hero6 100.000000 7 Hero7 100.000000 8 Hero8 100.000000 9 Hero9 100.000000 10 Hero10 100.000000 以下是第3页的内容 11 Hero11 100.000000 12 Hero12 100.000000 13 Hero13 100.000000 14 Hero14 100.000000 15 Hero15 100.000000 以下是第4页的内容 16 Hero16 100.000000 17 Hero17 100.000000 18 Hero18 100.000000 19 Hero19 100.000000 20 Hero20 100.000000 以下是第5页的内容 21 Hero21 100.000000 22 Hero22 100.000000 23 Hero23 100.000000 24 Hero24 100.000000 25 Hero25 100.000000
public static void main(String[] args) {
        list(0,5);
        list(2);
        list(3);
        list(4);
        list(5);
    }
    public static void list(int page)
    {
        System.out.println("以下是第"+page+"页的内容");
        int count = 5;
        executeFind(String.format("select * from hero limit %d,%d", (page-1)*count,count));
    }
    public static void list(int start,int count)
    {
        System.out.println("以下是从索引"+start+"开始的前"+count+"个数据");
        executeFind(String.format("select * from hero limit %d,%d", start,count));
    }
    public static void executeFind(String sql) {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (Exception e) {
            e.printStackTrace();
        }
        try (Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8",
                "root", "admin"); Statement s = c.createStatement();) {
            ResultSet rs = s.executeQuery(sql);
            while(rs.next())
            {
                int id = rs.getInt(1);
                String name = rs.getString(2);
                float hp = rs.getFloat("hp");
                int damage = rs.getInt(4);
                //System.out.println("执行成功");
                System.out.printf("%d\t%s\t%f\t%n", id,name,hp,damage);
            }
             
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

							





回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2022-11-09 分页优化答案
KSK_KIES




省去我们计算开始页的环节,直接调用slice方法,start表示第几页,pagesize表示一页多少条数据
public static void list(int start,int pageSize) {
      try (
                Connection connection  = DriverManager.getConnection("jdbc:mysql://localhost:3306/how2java?characterEncoding=UTF-8", "root", "admin");
                Statement statement = connection.createStatement();
            )
            {   
                String ccString ="select count(*) from hero";
                ResultSet result = statement.executeQuery(ccString);
                int total=0;
                while (result.next()) {
                   total = result.getInt(1);  //获取表中总数
                }   
                int pageNum = start * pageSize - pageSize; //计算开始页数
                String sql="select * from hero limit "+pageNum+","+pageSize;
                ResultSet rs = statement.executeQuery(sql);
                System.out.println("第"+start+"页,共"+ (total%pageSize != 0?(total/pageSize)+1:(total/pageSize))+"页");
                while(rs.next()) {
                    int id = rs.getInt("id");// 可以使用字段名
                    String name = rs.getString(2);// 也可以使用字段的顺序
                    float hp = rs.getFloat("hp");
                    int damage = rs.getInt(4);
                    System.out.printf("%d\t%s\t%f\t%d%n", id, name, hp, damage);
                }
                 
            } catch (SQLException e) {
                // TODO: handle exception
                e.printStackTrace();
            }
  }

							


1 个答案

LUO萝北
答案时间:2023-05-13
public static void Limit(int start, int end) { try { Class.forName("com.mysql.cj.jdbc.Driver"); String url = "jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai"; String user = "root"; String password = "123456"; Connection conn; try { conn = DriverManager.getConnection(url, user, password); String sql = "SELECT * FROM hero limit ?,?"; PreparedStatement s = conn.prepareStatement(sql); s.setInt(1, start); s.setInt(2, end); ResultSet r = s.executeQuery(); while(r.next()) { int a = r.getInt("id"); String str = r.getString("name"); int b = r.getInt("hp"); int c = r.getInt("damage"); System.out.println(a+" "+str+" "+b+" "+c); } } catch (SQLException e) { e.printStackTrace(); } } catch (ClassNotFoundException e) { e.printStackTrace(); } }



回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2022-04-26 什么是结果集
2021-08-24 练习 - 分页查询
2020-10-27 答案


提问太多,页面渲染太慢,为了加快渲染速度,本页最多只显示几条提问。还有 40 条以前的提问,请 点击查看

提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
关于 JAVA 中级-JDBC-查询 的提问

尽量提供截图代码异常信息,有助于分析和解决问题。 也可进本站QQ群交流: 578362961
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
在已经存在的几千个提问里,有相当大的比例,是因为使用了和站长不同版本的开发环境导致的,比如 jdk, eclpise, idea, mysql,tomcat 等等软件的版本不一致。
请使用和站长一样的版本,可以节约自己大量的学习时间。 站长把教学中用的软件版本整理了,都统一放在了这里, 方便大家下载: https://how2j.cn/k/helloworld/helloworld-version/1718.html

上传截图