如何使用Java从Postgres数据库获取inet数据类型?我努力了:
ResultSet foo = // query goes here //
foo.getString("loopback");
但是,当我这样做时,它会抛出一个SQL异常“无效的列名”。 AFAIK没有与Java中的postgres inet对应的数据类型。我能做什么?
最佳答案
张贴回应克里斯特拉弗斯
我原来的查询:
//Query returning the set of devices in a given market
String stm ="SELECT device "
"FROM mopdb.devices d " +
"INNER JOIN mopdb.markets m " +
"ON (d.market_id = m.market_id) " +
"WHERE (m.short = ?) " +
"ORDER BY d.device_id ";
设备表中的“设备”由几列组成,包括回送和oob,它们(显然)是IP地址(需要清除的IPv4)。
这是我采用ResultSet并构造一个新的“ device”对象的行
ResultSet d = DBUtilities.getDevicesFromMarket(m.toString());
while(d.next()) {
String loopback, oob;
Device deviceName = new Device(d.getString("device"),
(DBInet.valueOf(d.getString("loopback"))),
(DBInet.valueOf(oob = d.getString("oob"))),
d.getString("traffic_type"), d.getString("clli"),
d.getString("rack"), d.getInt("market_id"),
d.getString("codebase"));
model.addElement(deviceName);
}
DBInet.valueOf是一个静态方法,可以将PostgreSQL inet数据类型的String表示形式转换为DBInet对象。 java.net.InetAddress的包装器类。
问题是我只从设备表中选择“设备”列。下面是按预期工作的查询。
//Query returning the set of devices in a given market
String stm ="SELECT * " +
"FROM mopdb.devices d " +
"INNER JOIN mopdb.markets m " +
"ON (d.market_id = m.market_id) " +
"WHERE (m.short = ?) " +
"ORDER BY d.device_id ";