Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java sql代码:从列所在的表中选择*_Java_Sql_Jdbc - Fatal编程技术网

Java sql代码:从列所在的表中选择*

Java sql代码:从列所在的表中选择*,java,sql,jdbc,Java,Sql,Jdbc,我有一个表名“优惠券”,我在eclipse上使用java 我有一个方法GetCouncil(长id);这给了我优惠券的id,我这样写的: public Coupon getCoupon(long id) { Connection con = ConnectionPool.getInstance().getConnection(); String sql = "SELECT * FROM Coupon WHERE TYPE=?"; Coupon co

我有一个表名“优惠券”,我在eclipse上使用java

我有一个方法GetCouncil(长id);这给了我优惠券的id,我这样写的:

public Coupon getCoupon(long id) {
        Connection con = ConnectionPool.getInstance().getConnection();
        String sql = "SELECT * FROM Coupon WHERE TYPE=?";
        Coupon coupon = new Coupon();
        try (PreparedStatement pstmt = con.prepareStatement(sql);){
            pstmt.setLong(1, id);
            try (ResultSet rs = pstmt.executeQuery();) {
                if (rs.next()) {
                    coupon.setId(rs.getLong(1));
                    coupon.setTitle(rs.getString(2));
                    coupon.setStartDate(rs.getDate(3));
                    coupon.setEndDate(rs.getDate(4));
                    coupon.setAmount(rs.getInt(5));
                    coupon.setType(CouponType.valueOf(rs.getString(6)));
                    coupon.setMessage(rs.getString(7));
                    coupon.setPrice(rs.getDouble(8));
                    coupon.setImage(rs.getString(9));
                } else {
                    System.out.println("Coupon ID: " + id + " could not be found\n");
                }
            }
        } catch (SQLException e) {
            CouponSystemException ex = new CouponSystemException("Coupon ID: " + id + " could not be retrieved\n", e);
            System.out.println(ex.getMessage());
            System.out.println(e);
        }
        ConnectionPool.getInstance().returnConnection(con);
        return coupon;
    }
我想做另一个方法,它给我的优惠券的类型!但是TYPE列不在第一列中,它给了我异常。
有什么建议吗

您可以尝试按名称而不是顺序位置引用列:

rs.getLong("type")
而不是:

rs.getLong(1)
有时,重新创建表的方式会改变列的顺序,因此依赖列的顺序位置是失败的

作为进一步的辩护,我总是列出我想要的栏目,而不是编码

select * ...
这也更有效,因为Java程序不会回调所有列,只回调它需要的列。

首先: 看起来代码中有如下问题

String sql=“从优惠券中选择*类型=?”

我认为
TYPE=?
应该理解为
ID=?

第二: 正如我看到的,
TYPE
列是string(因为
优惠券.setType(CouponType.valueOf(rs.getString(6));
),所以您必须更改
pstmt.setLong(1,id)
to
pstmt.setString(1,couponType.getValue())

第三: 始终避免选择*
,而是键入所需的所有列

第四: 尝试推广这两种方法
getCouponByID(long id)
getCouponByType(CouponType CouponType)
,以便将来的维护更容易

第五: Put
ConnectionPool.getInstance().returnConnection(con)
finally
子句中,因此您将确保返回到池的连接

第六:
如果使用
PreparedStatement
的次数少于很多次(即100次),并且只使用了一次,则性能会降低。在这种情况下使用
语句
具有更好的性能,但如果插入用户类型字符串,请小心SQL注入。在这种情况下,不要担心,因为它是
long
类型

第一个建议。。。格式化你的问题你得到了什么例外?通过其他列获取行有什么问题?多说点细节,好的。我很想帮忙,在我能帮你之前,你需要告诉我更多。我认为你上面展示的代码是有效的,你想做类似的事情,是吗?如果是这样,你能告诉我们失败的代码吗。我们还需要您得到的例外情况。拥有表定义(包含列和数据类型)和您正在使用的数据库品牌也会有所帮助。