CrazyCodePlayer.. 2021-11-03 12:55 采纳率: 44.4%
浏览 41
已结题

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("连接失败");
        }
    }
}
  • 写回答

1条回答 默认 最新

  • CrazyCodePlayer.. 2021-11-03 12:58
    关注

    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存储过程

    评论

报告相同问题?

问题事件

  • 系统已结题 11月11日
  • 创建了问题 11月3日

悬赏问题

  • ¥15 matlab数据降噪处理,提高数据的可信度,确保峰值信号的不损失?
  • ¥15 怎么看我在bios每次修改的日志
  • ¥15 python+mysql图书管理系统
  • ¥15 Questasim Error: (vcom-13)
  • ¥15 船舶旋回实验matlab
  • ¥30 SQL 数组,游标,递归覆盖原值
  • ¥15 为什么我的数据接收的那么慢呀有没有完整的 hal 库并 代码呀有的话能不能发我一份并且我用 printf 函数显示处理之后的数据,用 debug 就不能运行了呢
  • ¥20 gitlab 中文路径,无法下载
  • ¥15 用动态规划算法均分纸牌
  • ¥30 udp socket,bind 0.0.0.0 ,如何自动选取用户访问的服务器IP来回复数据