【问题标题】:how to pass sql array values from java controller to scala template如何将sql数组值从java控制器传递到scala模板
【发布时间】:2013-10-25 12:39:42
【问题描述】:

我是新手玩框架。我想将 java 控制器中的数组变量传递给 scala 模板。

try {
            String userName = "data";

            String password = "data";

            String url = "jdbc:mysql://localhost/playdb";

            // Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            Connection con = DriverManager.getConnection(url, userName, password);
            Statement stmt = con.createStatement();
            System.out.println("Connected database successfully...");
            String strSelect = "select * from computer";

            //statement.setString(1, name);
            ResultSet rset = stmt.executeQuery(strSelect);

            while(rset.next()) {   // Move the cursor to the next row
                String name = rset.getString("name");

                int    id   = rset.getInt("id");
                System.out.println( name + ", " + id);
                // ++rowCount;
            }


        }
        catch(SQLException e) {
            e.printStackTrace();
            System.out.println("cant Connected database successfully...");
        }
        Form<Computer> computerForm = form(Computer.class);
      return ok(
        createForm.render(computerForm,rset)
    );

和斯卡拉寺

    @(computerForm: Form[Computer],createFormRset: String)

我收到了错误

cannot find symbol [symbol: variable rset] [location: class controllers.Application]

我需要将 rset 值传递给 scala 模板。但我不知道如何请帮助我

【问题讨论】:

    标签: java scala playframework


    【解决方案1】:

    您需要在 try-block 之外声明 rset

    ResultSet rset = null;
    try {
                String userName = "data";
    
                String password = "data";
    
                String url = "jdbc:mysql://localhost/playdb";
    
                // Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                Connection con = DriverManager.getConnection(url, userName, password);
                Statement stmt = con.createStatement();
                System.out.println("Connected database successfully...");
                String strSelect = "select * from computer";
    
                //statement.setString(1, name);
                rset = stmt.executeQuery(strSelect);
    
                while(rset.next()) {   // Move the cursor to the next row
                    String name = rset.getString("name");
    
                    int    id   = rset.getInt("id");
                    System.out.println( name + ", " + id);
                    // ++rowCount;
                }
    
    
            }
            catch(SQLException e) {
                e.printStackTrace();
                System.out.println("cant Connected database successfully...");
            }
            Form<Computer> computerForm = form(Computer.class);
          return ok(
            createForm.render(computerForm,rset)
        );
    

    这个解决方案不是很漂亮,因为如果发生 SQL 异常,rset 将为空,您将在模板中遇到问题 (NullPinterException)。您可能需要考虑将 return 语句移到 try 块的末尾,并将另一个语句添加到 catch 块中以进行错误处理。

    【讨论】:

    • 我可以更改模板文件中的任何内容吗
    • 你应该把第二个变量的类型改为ResultSet。
    • 得到错误 not found: type ResultSet 并且我的模板在我更改后看起来像这样 @(message: Array[ResultSet]) 我只是将 rset 值传递给视图
    • 在模板中:将Array[ResultSet] 替换为java.sql.ResultSet。第一:您不传递 ResultSet 数组。它只是一个结果集。第二个在模板中,您没有来自控制器的导入语句。进一步: Play-framework 无法按照您尝试使用它的方式工作。创建一个处理 SQL 内容的模型类。在控制器中,获取代表数据的模型类实例的列表/数组。将它们传递给视图并显示它们。查看 play framework 文档中提供的教程和示例。
    【解决方案2】:

    基本上,您可以将任何 java 对象传递给模板。 Play 框架对视图进行类型检查,因此您必须声明 rset。如果您查看 Play 附带的计算机数据库示例,您会看到它传递了一个 Page 对象和三个字符串:

    @(currentPage: com.avaje.ebean.Page[Computer], currentSortBy: String, currentOrder: String, currentFilter: String)
    

    但是,您可能会发现将值从 rset 复制到您的 computerForm 对象或另一个 POJO 中并将其传递给模板更容易。

    【讨论】:

    • 使用 ebean 很容易。但我正在使用核心 sql 查询。我正在使用尝试和缓存方法。所以请帮助我如何做到这一点。我为此奋斗了一个多星期。现在还没有澄清
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-28
    • 2014-12-14
    • 2020-09-18
    • 1970-01-01
    • 2015-06-05
    • 2021-04-20
    相关资源
    最近更新 更多