如何从jsp文件中检索数据库中的数据?

时间:2014-06-23 15:05:26

标签: java jsp jdbc

我有一个基本上显示数据库数据的.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,但即使这样也无效。

5 个答案:

答案 0 :(得分:3)

有几种方法可以做到这一点。如果要避免JSP中的Java代码,也可以使用JSTL。 e.g:

<%@ 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>

也许你想阅读:

答案 1 :(得分:1)

创建一个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就是你想要的         }

答案 2 :(得分:1)

使用ResultSet.getString()方法检查您的SQL查询列。如果您使用SELECT str FROM database_table,那很好。

答案 3 :(得分:1)

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

  • 一个Int代表您想要检索哪一列。
  • 您使用的另一个,取String,这将是结果集中的列名。

由于您的SELECT语句仅选择了列&#34; rs&#34;你没有专栏&#34; str&#34;在您要检索的结果集中。

答案 4 :(得分:1)

我认为您应该检查您的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);
}
相关问题