Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.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数据库和结果集_Java_Sql_Database_Class_Resultset - Fatal编程技术网

Java数据库和结果集

Java数据库和结果集,java,sql,database,class,resultset,Java,Sql,Database,Class,Resultset,第一篇文章在这里,所以我希望我得到正确的礼仪 在一个编程课程的项目中工作,我们被赋予了一些使事情变得有点尴尬的参数(因为我知道有更好的方法) 我创建了一个数据库,并填充了数据,我可以从中获得我需要的数据,但我的方式是笨拙和垃圾。所以我在寻找更好的方法 我现在处理的两个类是StockData.class和CheckStock.class StockData.class是数据库处理程序 其中我有以下内容: public static String getPrice(String key) {

第一篇文章在这里,所以我希望我得到正确的礼仪

在一个编程课程的项目中工作,我们被赋予了一些使事情变得有点尴尬的参数(因为我知道有更好的方法)

我创建了一个数据库,并填充了数据,我可以从中获得我需要的数据,但我的方式是笨拙和垃圾。所以我在寻找更好的方法

我现在处理的两个类是StockData.class和CheckStock.class

StockData.class是数据库处理程序

其中我有以下内容:

    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中,但我无法解决如何实现人们所说的内容…一整天盯着问题是我看不见树木的树木。。。