jdbc查询数据库数据遇到了一个错误

今天在使用QueryRunner类来查询多表数据时遇到bug

首先在runner里面使用select*是会报错的具体原因需要后面探索

java.sql.SQLException: '1.7722222222E10' in column '5' is outside valid range for the datatype INTEGER

Scanner sc=new Scanner(System.in);
       QueryRunner runner=new QueryRunner();
       Connection conn=null;
       conn=JDBCUtils.getConnection();
       String sql="SELECT *FROM order_items INNER JOIN orders ON order_items.order_id = orders.id WHERE user_id = (SELECT id FROM users WHERE username =?)";
       BeanListHandler<OrderItems>handler=new BeanListHandler<OrderItems>(OrderItems.class);
       System.out.println("请输入用户");
       String username=sc.next();
     List<OrderItems> list=runner.query(conn,sql,handler,username);
     list.forEach(System.out::println);

而使用preparestatement则不会报错

 Scanner input = new Scanner(System.in);

        System.out.print("请输入用户名:");
        String username = input.next();

        //1、注册驱动
        Class.forName("com.mysql.jdbc.Driver");

        //2、获取连接
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test01_bookstore?rewriteBatchedStatements=true", "root", "root");

        //3、编写sql
        String sql = "SELECT * FROM order_items INNER JOIN orders ON order_items.order_id = orders.id WHERE user_id = (SELECT id FROM users WHERE username = ?)";

        //4、创建PreparedStatement
        PreparedStatement pst = conn.prepareStatement(sql);//此时的sql带?的

        pst.setString(1, username);

        //5、执行sql
        ResultSet rs = pst.executeQuery();
        while(rs.next()){
            for (int i = 1; i <= 14; i++) {
                System.out.print(rs.getObject(i)+"\t");
            }
            System.out.println();
        }

        //6、关闭
        rs.close();
        pst.close();
        conn.close();
        input.close();

但可以看出queryrunner使用起来简便许多

在后面我换成具体字段后又出现bug,经过查阅发现在多表查询里面需要指定字段属于哪个表否则会报错

Column 'id' in field list is ambiguous

修改之后就正常了

Scanner sc=new Scanner(System.in);
       QueryRunner runner=new QueryRunner();
       Connection conn=null;
       conn=JDBCUtils.getConnection();
       String sql="SELECT order_items.id, order_items.count,order_items.amount,order_items.title,order_items.author, order_items.price,order_items.img_path,order_items.order_id FROM order_items INNER JOIN orders ON order_items.order_id = orders.id WHERE user_id = (SELECT id FROM users WHERE username =?)";
       BeanListHandler<OrderItems>handler=new BeanListHandler<OrderItems>(OrderItems.class);
       System.out.println("请输入用户");
       String username=sc.next();
     List<OrderItems> list=runner.query(conn,sql,handler,username);
     list.forEach(System.out::println);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值