Java sql代码:从列所在的表中选择*
我有一个表名“优惠券”,我在eclipse上使用java 我有一个方法GetCouncil(长id);这给了我优惠券的id,我这样写的: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
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)
topstmt.setString(1,couponType.getValue())代码>
第三:
始终避免选择*
,而是键入所需的所有列
第四:
尝试推广这两种方法getCouponByID(long id)
和getCouponByType(CouponType CouponType)
,以便将来的维护更容易
第五:
PutConnectionPool.getInstance().returnConnection(con)
在finally
子句中,因此您将确保返回到池的连接
第六:
如果使用PreparedStatement
的次数少于很多次(即100次),并且只使用了一次,则性能会降低。在这种情况下使用语句
具有更好的性能,但如果插入用户类型字符串,请小心SQL注入。在这种情况下,不要担心,因为它是long
类型 第一个建议。。。格式化你的问题你得到了什么例外?通过其他列获取行有什么问题?多说点细节,好的。我很想帮忙,在我能帮你之前,你需要告诉我更多。我认为你上面展示的代码是有效的,你想做类似的事情,是吗?如果是这样,你能告诉我们失败的代码吗。我们还需要您得到的例外情况。拥有表定义(包含列和数据类型)和您正在使用的数据库品牌也会有所帮助。