java调用mysql存储过程报错

img

为什么让游标先向下在previous会报错?

img

如果我不进行判断(忽略查不到数据)
直接进行查找

img

img


结果没有问题。但是如果数据库里没有该数据,则没有提示。

求解怎么处理报错(下图是数据库信息)

img

下面是源码

package bookmanage_java;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Scanner;

public class reader_namelist {
    private DbUtil dbUtil = new DbUtil();
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入读者姓名或姓名中的某个字:");
        String readername = sc.nextLine();
        reader_namelist r = new reader_namelist();
        r.ser_readerlist(readername);
    }
    public void ser_readerlist(String rname) {
        Connection con = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        try {
            con = dbUtil.getCon();
            String sql = "CALL reader_namelist(?)";
            // 获取执行sql语句对象
            pstmt = con.prepareStatement(sql);
            // 准备参数
            pstmt.setString(1, rname);
            // 执行查询操作
            rs = pstmt.executeQuery();
            // 处理结果集
            if (rs.next()) {
                System.out.println("查询结果:");
                System.out.println("readerno    readername    readertype    readerdept");
                rs.previous();

               // 前移一步
            } else {
                System.out.println("查不到数据");
            }
            while (rs.next()) {
                System.out.println(rs.getString(1).trim() + "       " + rs.getString(2).trim() + "       " + rs.getString(3).trim() + "       " + rs.getString(4).trim());
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                dbUtil.closeCon(con);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}
package bookmanage_java;

import java.sql.Connection;
import java.sql.DriverManager;

public class DbUtil1 {
    //private String dbUrl="jdbc:mysql://localhost:3306/books?useUnicode=true&characterEncoding=UTF8";/bc连接
    private String jdbcName= "com.mysql.cj.jdbc.Driver";//bc驱动程序
    private String dbUrl="jdbc:mysql://localhost:3306/books?serverTimezone=PRC&useSSL=false&characterEncoding=gbk";
    private String dbUserName="root";//用户名
    private String dbPassword="123";//密码
    /*获得连接对象 */
    public Connection getCon() throws Exception{
        Class.forName(jdbcName);//加载驱动
        Connection con=DriverManager.getConnection(dbUrl,dbUserName,dbPassword);//创建连接对象
        return con;
    }
    /*断开连接     */
    public void closeCon(Connection con) throws Exception {
        if (con!=null){
            con.close();
        }
    }
    /*主函数,连接数据库*/
    public static void main(String[] args) {
        DbUtil dbUtil=new DbUtil();
        try {
            dbUtil.getCon();
            System.out.println("连接成功");
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println("连接失败");
        }
    }
}

DELIMITER $$
CREATE PROCEDURE reader_namelist
(IN readern VARCHAR(10))
BEGIN
SELECT readerno,readername,readertype,readerdept
FROM reader
WHERE readername LIKE CONCAT('%',readern,'%')
ORDER BY readertype;
END $$

以上是mysql存储过程