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