【问题标题】:How to retrieve data from a database from a jsp file?如何从 jsp 文件中检索数据库中的数据?
【发布时间】:2014-08-13 16:33:59
【问题描述】:

我有一个 .jsp 文件,它基本上显示来自数据库的数据。数据库类在 .java 文件中单独定义。为了获取数据库的内容,我调用了数据库的 getData 方法。但是所做的函数调用永远不会执行,也不会返回任何内容。

但是,如果我从 getData 函数返回任何预先计算的值,那么它执行得很好。

我想知道如何从 .jsp 文件访问数据库。

我不想将 java 代码直接添加到 .jsp 文件中。所以我想通过方法调用来做到这一点。


.jsp 文件中的函数:
<%
    ArrayList<String> al = com.Database.getData();
%>


Java函数:
getData(){
    al = new ArrayList<String>();
    Connection conn = null;
    Statement stmt = null;
    ResultSet rs   = null;
    al.add("first");
    try{
        Class.forName("com.mysql.jdbc.Driver");
        conn = DriverManager.getConnection(DB_URL,USER,PASS);
        stmt = conn.createStatement();

        String sql = "SELECT rs FROM DATABASE";
        rs = stmt.executeQuery(sql);
        while(rs.next()){
            String str  = rs.getString("str");
            al.add(str);
        }
    }catch(Exception e){
        e.printStackTrace();
    }
    al.add("nikunj ");
    al.add("banka ");
    return al;
}

调用后arraylist的内容是{"first", "nikunj", "banka"},并且没有数据库中的数据。

如何从数据库中获取数据。我尝试创建一个静态块,该块将在程序开始时填充 ArrayList,但即使这样也不起作用。

【问题讨论】:

  • 您正在从表 DATABASE 中选择字段 rs,然后尝试将字段 str 从 ResultSet 中取出...
  • SELECT rs 然后getString("str")?你没有选择你想进入的领域。
  • rs 将保存数据库中的所有数据。我会按顺序获取数据并将其添加到al中。
  • 你没有得到任何错误跟踪吗?
  • 不打印错误跟踪。仅将 3 个字符串添加到 al 中。

标签: java jsp jdbc


【解决方案1】:

有几种方法可以做到这一点。如果您想避免在 JSP 中使用 Java 代码,也可以使用 JSTL。例如:

<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jstl/sql" prefix="sql" %>

<sql:setDataSource var="dataSource" driver="com.mysql.jdbc.Driver"
                   url="jdbc:mysql://localhost/test"
                   user="root"  password="pass123"/>

<html>
<head>
<title>JSTL SQL</title>
</head>
<body>

<sql:query var = "result" dataSource="${dataSource}">
SELECT str FROM table
</sql:query>

<table border=1>
<c:forEach var="row" query="${result.rows}">
<tr>
<td><c:out value="${row.str}"/></td>
</tr>
</c:forEach>
</table>

</body>
</html>

也许你想阅读:

【讨论】:

  • @Nikunj Banka:Paul Vargas 是正确的,你应该避免在JSPs 中使用 Java 代码。 servlet 将是在这里使用的最佳选择。使用servlet的相应GETPOST方法,从数据库中检索数据,然后将其写入servletrequest对象中,使用JSTLJSP中显示标签。
  • 这也是另一种方式。感谢您分享您的想法。
【解决方案2】:

创建一个jsp有这个代码:

<%
  List list = main.myPack.Test.getData();
  System.out.println(list);

%>

像这样创建一个类的静态方法:

public static List getData()
    {
        List<String> list = new ArrayList<String>();
        try{

            System.out.println("invoked");
            Class.forName("com.mysql.jdbc.Driver");
            System.out.println("making connection");
            Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "welcome");
            System.out.println("Connection established");
            Statement stmt=con.createStatement();
            ResultSet rset=stmt.executeQuery("select * from student");
            System.out.println("fetching data");
            while(rset.next())
            {
                String name = rset.getString("student_name");
                String id = rset.getString("student_id");
                list.add(name);
                list.add(id);
                System.out.println(name+" "+id);
            }
            System.out.println(list);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return list;

然后调用jsp就是你想要的 }

【讨论】:

    【解决方案3】:

    亲爱的,使用 ResultSet.getString() 方法检查您的 SQL 查询列。如果您使用 SELECT str FROM database_table 就可以了。

    【讨论】:

      【解决方案4】:

      我认为@Harsha 为您指明了正确的方向。 ResultSet.getString() 有两个重载。

      • 使用Int 表示通常要检索的列。
      • 您使用的另一个是String,这将是结果集中的列名。

      由于您的 SELECT 语句仅选择了“rs”列,因此您的结果集中没有“str”列可供检索。

      【讨论】:

        【解决方案5】:

        我认为你应该检查你的 sql 语句,我认为你有数据库错误!

        //String sql = "SELECT rs FROM DATABASE";
        String sql = "SELECT str FROM DATABASE";
        rs = stmt.executeQuery(sql);
        while(rs.next()){
           String str  = rs.getString("str"); //you get "str" field here not "rs"
           al.add(str);
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-10-30
          • 1970-01-01
          • 2012-05-16
          • 1970-01-01
          • 2021-09-17
          • 2016-05-17
          • 1970-01-01
          相关资源
          最近更新 更多