【发布时间】:2013-11-27 08:51:31
【问题描述】:
好的,所以我有一个应用程序连接到具有客户表的数据库。在客户表中,我捕获了一系列不同的值。 VH_ID 是车辆表的外键,insurance_ID 也是保险表的外键。
任何想法都将不胜感激。
编辑
public CustomerInformation getCustomerInfo(String customerName) {
CustomerInformation info = new CustomerInformation();
ResultSet result;
try {
String sqlStatement = "SELECT "
+ DBStrings.C_NAME + ","
+ DBStrings.C_ADDRESS + ","
+ DBStrings.C_PHONENO + ","
+ DBStrings.C_EMAIL + ","
+ DBStrings.C_VH_ID + ","
+ DBStrings.C_VH_MODEL + ","
+ DBStrings.C_VH_YEAR + ","
+ DBStrings.C_VH_REGO + ","
+ DBStrings.C_VH_CHASSIS + ","
+ DBStrings.C_VH_VIN + ","
+ DBStrings.C_INSURANCE
+ " FROM " + DBStrings.CUSTOMER + " WHERE " + DBStrings.C_ID + " = " + this.getCustomerId(customerName);
result = statement.executeQuery(sqlStatement);
while (result != null && result.next()) {
info.setName(result.getString(DBStrings.C_NAME));
info.setAddress(result.getString(DBStrings.C_ADDRESS));
info.setPhoneNumber(result.getString(DBStrings.C_PHONENO));
info.setEmail(result.getString(DBStrings.C_EMAIL));
info.setRego(result.getString(DBStrings.C_VH_REGO) + "");
info.setChassis(result.getString(DBStrings.C_VH_CHASSIS) + "");
info.setVin(result.getString(DBStrings.C_VH_VIN) + "");
info.setVehicleModel(result.getString(DBStrings.C_VH_MODEL) + "");
info.setYear(result.getInt(DBStrings.C_VH_YEAR) + "");
info.setInsurance(this.getInsuranceFromId(result.getInt(DBStrings.C_INSURANCE)));
info.setVehicleMake(this.getVehicleFromId(result.getInt(DBStrings.C_VH_ID)));
}
} catch (SQLException ex) {
Logger.getLogger(Database.class
.getName()).log(Level.SEVERE, null, ex);
}
return info;
}
这是嵌套在方法中的 ResultSet 的新代码。现在我收到错误:
SEVERE: null
java.sql.SQLException: ResultSet not open. Operation 'getInt' not permitted. Verify that autocommit is OFF.
at org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(Unknown Source)
at org.apache.derby.client.am.SqlException.getSQLException(Unknown Source)
at org.apache.derby.client.am.ResultSet.getInt(Unknown Source)
at Database.Database.getCustomerInfo(Database.java:599)
声明
connection = DriverManager.getConnection(connectionURL, "user", "pass");
statement = connection.createStatement();
【问题讨论】:
-
您确定存在名为 VH_MODEL 的列吗?
-
我非常肯定。我正在使用与 DBStrings.C_VH_MODEL 完全相同的字符串将客户信息添加到该表中。当查看 netbeans 服务部分的数据库时,数据就在那里。我不确定它为什么不抓取数据。
-
您是否尝试对数据库而不是从代码运行 String sqlStatement 的内容?问题是否仍然存在?
-
直接针对数据库工作没问题。它没有抓取数据似乎很奇怪。
-
rs = statement.executeQuery(sqlStatement); rs 不是此方法的局部变量。它可能被其他进程覆盖。我建议您将其设为局部变量 ResultSet rs = ... 声明相同。
标签: java database netbeans derby