Java数据库和结果集
第一篇文章在这里,所以我希望我得到正确的礼仪 在一个编程课程的项目中工作,我们被赋予了一些使事情变得有点尴尬的参数(因为我知道有更好的方法) 我创建了一个数据库,并填充了数据,我可以从中获得我需要的数据,但我的方式是笨拙和垃圾。所以我在寻找更好的方法 我现在处理的两个类是StockData.class和CheckStock.class StockData.class是数据库处理程序 其中我有以下内容:Java数据库和结果集,java,sql,database,class,resultset,Java,Sql,Database,Class,Resultset,第一篇文章在这里,所以我希望我得到正确的礼仪 在一个编程课程的项目中工作,我们被赋予了一些使事情变得有点尴尬的参数(因为我知道有更好的方法) 我创建了一个数据库,并填充了数据,我可以从中获得我需要的数据,但我的方式是笨拙和垃圾。所以我在寻找更好的方法 我现在处理的两个类是StockData.class和CheckStock.class StockData.class是数据库处理程序 其中我有以下内容: public static String getPrice(String key) {
public static String getPrice(String key) {
try {
ResultSet res = stmt.executeQuery("SELECT * FROM StockDB WHERE stockID = '" + key + "'");
if (res.next()) { // there is a result
return res.getString(3);
} else {
return null;
}
} catch (SQLException e) {
System.out.println(e);
return null;
}
}
key = "11";
debug.append(" " + newline);
debug.append(" " + StockData.getName(key));
debug.append(" " + StockData.getPrice(key));
debug.append(" " + StockData.getQuantity(key));
及
(每列都有其他类似的)
我通过以下方式从CheckStock调用这些方法:
public static String getPrice(String key) {
try {
ResultSet res = stmt.executeQuery("SELECT * FROM StockDB WHERE stockID = '" + key + "'");
if (res.next()) { // there is a result
return res.getString(3);
} else {
return null;
}
} catch (SQLException e) {
System.out.println(e);
return null;
}
}
key = "11";
debug.append(" " + newline);
debug.append(" " + StockData.getName(key));
debug.append(" " + StockData.getPrice(key));
debug.append(" " + StockData.getQuantity(key));
正如你所看到的,我正在手工输入我的stockID,这是一个字符串。。这使得系统无法扩展(我必须为任何新项目手动添加一套全新的钥匙)
为了使用数据库提供密钥,我尝试使用以下方法
ResultSet stockIDList = StockData.getID();
while (stockIDList.next())
{
key = (stockIDList.getNString(1));
debug.append(" " + StockData.getName(key));
debug.append(" " + StockData.getPrice(key));
debug.append(" " + StockData.getQuantity(key));
}
ResultSet stockIDList = StockData.getID();
while (stockIDList.next())
{
key = (stockIDList.getString(1));
stockID.append(" " + key + newline);
stockDescription.append(" " + StockData.getName(key) + newline);
stockPrice.append(" " + StockData.getPrice(key) + newline);
stockQuantity.append(" " + StockData.getQuantity(key) + newline);
double price = StockData.getPrice(key);
int quantity = StockData.getQuantity(key);
double total = price * quantity;
String stringTotal = String.valueOf(total);
stockTotalValue.append(" " + stringTotal + newline);
}
但这会导致各种各样的SQL错误
我假设我遗漏了一些非常简单的东西,或者有更好的方法
在互联网和ResultSet上的oracle页面的帮助下,我一整天都在努力解决这个小问题,但我一辈子都弄不明白为什么它不起作用
提前感谢您的帮助
Myranda我(通过反复试验)找到了一个解决办法
从我所看到的搜索结果来看,我本应该用最后的语句来结束查询,但如果没有netBeans到处乱扔感叹号,我似乎无法让它们适应
所以我为我查询的每个字段使用了一个单独的station名称
public static double getPrice(String key) {
try {
Statement stmtPrice;
stmtPrice = connection.createStatement();
ResultSet res = stmtPrice.executeQuery("SELECT * FROM StockDB WHERE stockID = '" + key + "'");
if (res.next()) {
return res.getDouble(3);
} else {
return 0;
}
} catch (SQLException e) {
System.out.println(e);
return 0;
}
}
public static int getQuantity(String key) {
try {
Statement stmtQty;
stmtQty = connection.createStatement();
ResultSet res = stmtQty.executeQuery("SELECT * FROM StockDB WHERE stockID = '" + key + "'");
if (res.next()) {
return res.getInt(4);
} else {
return 0;
}
} catch (SQLException e) {
System.out.println(e);
return 0;
}
}
然后使用下面的函数调用它
ResultSet stockIDList = StockData.getID();
while (stockIDList.next())
{
key = (stockIDList.getNString(1));
debug.append(" " + StockData.getName(key));
debug.append(" " + StockData.getPrice(key));
debug.append(" " + StockData.getQuantity(key));
}
ResultSet stockIDList = StockData.getID();
while (stockIDList.next())
{
key = (stockIDList.getString(1));
stockID.append(" " + key + newline);
stockDescription.append(" " + StockData.getName(key) + newline);
stockPrice.append(" " + StockData.getPrice(key) + newline);
stockQuantity.append(" " + StockData.getQuantity(key) + newline);
double price = StockData.getPrice(key);
int quantity = StockData.getQuantity(key);
double total = price * quantity;
String stringTotal = String.valueOf(total);
stockTotalValue.append(" " + stringTotal + newline);
}
毫无疑问,有人会被我使用的笨拙代码吓坏,但它似乎正在发挥作用,所以现在我将接受笨拙而不是非功能性的代码
谢谢大家抽出时间
Myranda我(通过反复试验)找到了一个解决办法
从我所看到的搜索结果来看,我本应该用最后的语句来结束查询,但如果没有netBeans到处乱扔感叹号,我似乎无法让它们适应
所以我为我查询的每个字段使用了一个单独的station名称
public static double getPrice(String key) {
try {
Statement stmtPrice;
stmtPrice = connection.createStatement();
ResultSet res = stmtPrice.executeQuery("SELECT * FROM StockDB WHERE stockID = '" + key + "'");
if (res.next()) {
return res.getDouble(3);
} else {
return 0;
}
} catch (SQLException e) {
System.out.println(e);
return 0;
}
}
public static int getQuantity(String key) {
try {
Statement stmtQty;
stmtQty = connection.createStatement();
ResultSet res = stmtQty.executeQuery("SELECT * FROM StockDB WHERE stockID = '" + key + "'");
if (res.next()) {
return res.getInt(4);
} else {
return 0;
}
} catch (SQLException e) {
System.out.println(e);
return 0;
}
}
然后使用下面的函数调用它
ResultSet stockIDList = StockData.getID();
while (stockIDList.next())
{
key = (stockIDList.getNString(1));
debug.append(" " + StockData.getName(key));
debug.append(" " + StockData.getPrice(key));
debug.append(" " + StockData.getQuantity(key));
}
ResultSet stockIDList = StockData.getID();
while (stockIDList.next())
{
key = (stockIDList.getString(1));
stockID.append(" " + key + newline);
stockDescription.append(" " + StockData.getName(key) + newline);
stockPrice.append(" " + StockData.getPrice(key) + newline);
stockQuantity.append(" " + StockData.getQuantity(key) + newline);
double price = StockData.getPrice(key);
int quantity = StockData.getQuantity(key);
double total = price * quantity;
String stringTotal = String.valueOf(total);
stockTotalValue.append(" " + stringTotal + newline);
}
毫无疑问,有人会被我使用的笨拙代码吓坏,但它似乎正在发挥作用,所以现在我将接受笨拙而不是非功能性的代码
谢谢大家抽出时间
Myranda“但这会导致各种SQL错误。”好的错误代表了你问题的答案。将一个错误复制到一个好的搜索引擎通常已经提供了很多线索。当你忽视它们时,你基本上是在自食其果。不要这样做,并在问题中包含它们,以防你无法解释它们或找到线索。我得到了答案ror消息:java.sql.SQLException:ResultSet未打开。不允许执行“下一步”操作。请验证autocommit是否已关闭。但我看不到如何将我找到的解决方案应用到我的代码中…你是否尝试过提供线索?是的,我将其复制粘贴到了google中,但我无法解决如何实现人们所说的内容…一整天盯着问题是我看不见树木的树木……”但这会导致各种各样的SQL错误好的错误代表了你问题的答案。将一个错误复制到一个好的搜索引擎通常已经提供了很多线索。当你忽视它们时,你基本上是在自食其果。不要这样做,并在问题中包含它们,以防你无法解释它们或找到线索。我得到了答案ror消息:java.sql.SQLException:ResultSet未打开。不允许执行“下一步”操作。请验证autocommit是否已关闭。但我看不到如何将我找到的解决方案应用到我的代码中…你是否尝试过提供线索?是的,我将其复制粘贴到了google中,但我无法解决如何实现人们所说的内容…一整天盯着问题是我看不见树木的树木。。。