我做了一个JSP页面,里面有连接数据库的语句,也有列出数据的语句,能实现,也好使了!
但我现在想把连接数据库及列数据的语句做成JAVABEAN,在JSP页面中调这个BEAN,可是运行就出错。请指点。
这个是BEAN
package news;
import java.sql.*;
public class sql_data
{
String sDBDriver="com.microsoft.jdbc.sqlserver.SQLServerDriver";
String url="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=qianerp";
String user="sa";
String password="396330100";
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
public sql_data()
{
try
{
Class.forName(sDBDriver);
}
catch(java.lang.ClassNotFoundException e)
{
System.err.println("sql_data()" + e.getMessage());
}
}
public void executeInsert(String sql)
{
try
{
conn=DriverManager.getConnection(url,user,password);
stmt=conn.createStatement();
stmt.executeUpdate(sql);
stmt.close();
conn.close();
}
catch(SQLException ex)
{
System.err.println("sql_data.executeUpdate:"+ex.getMessage());
}
}
public ResultSet executeQuery(String sql)
{
try
{
conn=DriverManager.getConnection(url,user,password);
stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs=stmt.executeQuery(sql);
}
catch(SQLException ex)
{
System.err.println("sql_data.executeQuery:"+ex.getMessage());
}
return rs;
}
public void executeUpdate(String sql)
{
try
{
conn=DriverManager.getConnection(url,user,password);
stmt=conn.createStatement();
stmt.executeUpdate(sql);
stmt.close();
conn.close();
}
catch(SQLException ex)
{
System.err.println("aq.executeQuery"+ex.getMessage());
}
}
public void executeDelete(String sql)
{
try
{
conn=DriverManager.getConnection(url,user,password);
stmt=conn.createStatement();
stmt.executeUpdate(sql);
stmt.close();
conn.close();
}
catch(SQLException ex)
{
System.err.println("sql_data.executeDelete:"+ex.getMessage());
}
}
public void closestmt()
{
try
{
stmt.close();
}
catch(SQLException e)
{
e.printStackTrace();
}
}
public void closeConn()
{
try
{
conn.close();
}
catch(SQLException e)
{
e.printStackTrace();
}
}
}
下面是JSP页面<%@ page contentType="text/html;charset=gb2312" %>
<%@ page language="java" import="java.sql.*"%>
<%@ page language="java" import="java.util.*"%>
<%@ page language="java" import="java.text.*"%>
<jsp:useBean id="sqlbean" class="news.sql_data"/>
<html>
<body>
<% //Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
//String url="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=qianerp";
// pubs 为你的数据库的
//String user="sa";
//String password="396330100";
//Connection conn= DriverManager.getConnection(url,user,password);
//Statement stmt=conn.createStatement
//(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select a21,a1,a2,a8,a9,a13 from gb";
ResultSet rs=null;
rs=sqlbean.executeQuery(sql);
while(rs.next()) { %>
_______________________________________________________<br>
<%=rs.getString(1)%>|<%=rs.getString(2)%>|<%=rs.getString(3)%>|<%=rs.getString(4)%>|<%=rs.getString(5)%>|<%=rs.getString(6)%>|<br>
<% } %>
<% out.print("数据库操作成功,恭喜你556677"); %>
<%
//rs.close();
//stmt.close();
//conn.close();
%>
</body>
</html>
但我现在想把连接数据库及列数据的语句做成JAVABEAN,在JSP页面中调这个BEAN,可是运行就出错。请指点。
这个是BEAN
package news;
import java.sql.*;
public class sql_data
{
String sDBDriver="com.microsoft.jdbc.sqlserver.SQLServerDriver";
String url="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=qianerp";
String user="sa";
String password="396330100";
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
public sql_data()
{
try
{
Class.forName(sDBDriver);
}
catch(java.lang.ClassNotFoundException e)
{
System.err.println("sql_data()" + e.getMessage());
}
}
public void executeInsert(String sql)
{
try
{
conn=DriverManager.getConnection(url,user,password);
stmt=conn.createStatement();
stmt.executeUpdate(sql);
stmt.close();
conn.close();
}
catch(SQLException ex)
{
System.err.println("sql_data.executeUpdate:"+ex.getMessage());
}
}
public ResultSet executeQuery(String sql)
{
try
{
conn=DriverManager.getConnection(url,user,password);
stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs=stmt.executeQuery(sql);
}
catch(SQLException ex)
{
System.err.println("sql_data.executeQuery:"+ex.getMessage());
}
return rs;
}
public void executeUpdate(String sql)
{
try
{
conn=DriverManager.getConnection(url,user,password);
stmt=conn.createStatement();
stmt.executeUpdate(sql);
stmt.close();
conn.close();
}
catch(SQLException ex)
{
System.err.println("aq.executeQuery"+ex.getMessage());
}
}
public void executeDelete(String sql)
{
try
{
conn=DriverManager.getConnection(url,user,password);
stmt=conn.createStatement();
stmt.executeUpdate(sql);
stmt.close();
conn.close();
}
catch(SQLException ex)
{
System.err.println("sql_data.executeDelete:"+ex.getMessage());
}
}
public void closestmt()
{
try
{
stmt.close();
}
catch(SQLException e)
{
e.printStackTrace();
}
}
public void closeConn()
{
try
{
conn.close();
}
catch(SQLException e)
{
e.printStackTrace();
}
}
}
下面是JSP页面<%@ page contentType="text/html;charset=gb2312" %>
<%@ page language="java" import="java.sql.*"%>
<%@ page language="java" import="java.util.*"%>
<%@ page language="java" import="java.text.*"%>
<jsp:useBean id="sqlbean" class="news.sql_data"/>
<html>
<body>
<% //Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
//String url="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=qianerp";
// pubs 为你的数据库的
//String user="sa";
//String password="396330100";
//Connection conn= DriverManager.getConnection(url,user,password);
//Statement stmt=conn.createStatement
//(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select a21,a1,a2,a8,a9,a13 from gb";
ResultSet rs=null;
rs=sqlbean.executeQuery(sql);
while(rs.next()) { %>
_______________________________________________________<br>
<%=rs.getString(1)%>|<%=rs.getString(2)%>|<%=rs.getString(3)%>|<%=rs.getString(4)%>|<%=rs.getString(5)%>|<%=rs.getString(6)%>|<br>
<% } %>
<% out.print("数据库操作成功,恭喜你556677"); %>
<%
//rs.close();
//stmt.close();
//conn.close();
%>
</body>
</html>
type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception org.apache.jasper.JasperException
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:370)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
root cause java.lang.NullPointerException
org.apache.jsp.sql_005ftest_jsp._jspService(org.apache.jsp.sql_005ftest_jsp:72)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
note The full stack trace of the root cause is available in the Apache Tomcat/5.5.9 logs
前调用你的数据库驱动加载方法:sql_data()也就是:
String sql="select a21,a1,a2,a8,a9,a13 from gb";
ResultSet rs=null;
sql_data();
rs=sqlbean.executeQuery(sql);
//String url="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=qianerp";
// pubs 为你的数据库的
//String user="sa";
//String password="396330100";
//Connection conn= DriverManager.getConnection(url,user,password);
//Statement stmt=conn.createStatement
//(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select a21,a1,a2,a8,a9,a13 from gb";
ResultSet rs=null;
rs=sqlbean.executeQuery(sql);
while(rs.next()) { %>
_______________________________________________________<br>
<%=rs.getString(1)%>|<%=rs.getString(2)%>|<%=rs.getString(3)%>|<%=rs.getString(4)%>|<%=rs.getString(5)%>|<%=rs.getString(6)%>|<br>
<% } %>
<% out.print("数据库操作成功,恭喜你556677"); %>
<%
//rs.close();
//stmt.close();
//conn.close();
%>
这一部分也放到java类中?
try:在rs=sqlbean.executeQuery(sql);
前调用你的数据库驱动加载方法:sql_data()也就是:
String sql="select a21,a1,a2,a8,a9,a13 from gb";
ResultSet rs=null;
sql_data();
rs=sqlbean.executeQuery(sql);
sql_data()
它不是个构造方法吗?也需要执行吗?我是初学,请指点!
org.apache.jasper.JasperException: Unable to compile class for JSPAn error occurred at line: 8 in the jsp file: /sql_test.jsp
Generated servlet error:
Syntax error, insert ";" to complete Statement
An error occurred at line: 8 in the jsp file: /sql_test.jsp //第8行有问题
Generated servlet error:
Syntax error, insert ";" to complete Statement //缺少";"
org.apache.jasper.JasperException: Unable to compile class for JSPAn error occurred at line: 8 in the jsp file: /sql_test.jsp
Generated servlet error:
The method sql_data() is undefined for the type sql_data我加上分号了,就提法没有找到这个方法?
我写sqlbean.之后也没有提示我有这个方法啊?
bean里全是些setXXX()和getXXX()方法jsp页面就可以使用< %= beanName.getXXX() %>方法
以及< % beanName.setXXX(xx xx) %>方法你上面的用法感觉就是调用一个普通的java类
如果不想改java类
可以把jsp页面中的<jsp:useBean id="sqlbean" class="news.sql_data"/>
一行改成:
<%@page import="news.sql_data"%>
然后用sql_data sd = new sql_data();
语句来加载驱动String sql="select a21,a1,a2,a8,a9,a13 from gb";
ResultSet rs=null;
rs=sd.executeQuery(sql);
while(rs.next()) { %>
...
用你的方法也不行啊
org.apache.jasper.JasperException: Unable to compile class for JSPAn error occurred at line: 10 in the jsp file: /sql_test.jsp
Generated servlet error:
sd cannot be resolvedAn error occurred at line: 10 in the jsp file: /sql_test.jsp
Generated servlet error:
sd cannot be resolved
这句写了吗,写了就不应该
"sd cannot be resolved"了
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page language="java" import="java.sql.*"%>
<%@ page language="java" import="java.util.*"%>
<%@ page language="java" import="java.text.*"%>
<%@ page language="java" import="news.sql_data"%>
sql_data sd = new sql_data(); <html>
<body>
<%
//Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
//String url="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=qianerp";
//pubs 为你的数据库的
//String user="sa";
//String password="396330100";
//Connection conn= DriverManager.getConnection(url,user,password);
//Statement stmt=conn.createStatement
//(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select a21,a1,a2,a8,a9,a13 from gb";
ResultSet rs=null;
sd.sql_data();
rs=sd.executeQuery(sql);
while(rs.next()) { %>
_______________________________________________________<br>
<%=rs.getString(1)%>|<%=rs.getString(2)%>|<%=rs.getString(3)%>|<%=rs.getString(4)%>|<%=rs.getString(5)%>|<%=rs.getString(6)%>|<br>
<% } %>
<% out.print("数据库操作成功,恭喜你556677888"); %>
<%
//rs.close();
//stmt.close();
//conn.close();
%>
</body>
</html>
我的想法是把 sql语句写到一个listBean.java里面 数据结果放到另外一个dataBean.java里面jsp界面只是给参数给listBean.java产生对,结果放到dataBean.java产生对象里面,然后jsp界面返回结果,这样容易管理 把所有的对数据库操作都放到java里面不知道有什么错误 望指出
大哥,也许你做的对,但对我来说挺难的,我也不会啊!我就想把目前的弄明白,一点点的学!
我觉得我目前的这两个东西挺简单的,我也能理解,就是不好使?郁闷!!!
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page language="java" import="java.sql.*"%>
<%@ page language="java" import="java.util.*"%>
<%@ page language="java" import="java.text.*"%>
<%@ page language="java" import="news.sql_data"%>
sql_data sd = new sql_data(); <html>
<body>
<%
//Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
//String url="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=qianerp";
//pubs 为你的数据库的
//String user="sa";
//String password="396330100";
//Connection conn= DriverManager.getConnection(url,user,password);
//Statement stmt=conn.createStatement
//(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select a21,a1,a2,a8,a9,a13 from gb";
ResultSet rs=null;
sd.sql_data();
rs=sd.executeQuery(sql);
while(rs.next()) { %>
_______________________________________________________<br>
<%=rs.getString(1)%>|<%=rs.getString(2)%>|<%=rs.getString(3)%>|<%=rs.getString(4)%>|<%=rs.getString(5)%>|<%=rs.getString(6)%>|<br>
<% } %>
<% out.print("数据库操作成功,恭喜你556677888"); %>
<%
//rs.close();
//stmt.close();
//conn.close();
%>
</body>
</html>sql_data sd = new sql_data(); 是java代码,写到<% %>里试试
是不是哟,
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page language="java" import="java.sql.*"%>
<%@ page language="java" import="java.util.*"%>
<%@ page language="java" import="java.text.*"%>
<jsp:useBean id="sqlbean" class="news.sql_data"/><%@ page language="java" import="news.*"%>
不是用jsp:useBean
<%@ page language="java" import="java.sql.*"%>
<%@ page language="java" import="java.util.*"%>
<%@ page language="java" import="java.text.*"%>
<%@ page language="java" import="news.sql_data"%>
<html>
<body>
<%
String sql="select a21,a1,a2,a8,a9,a13 from gb";
ResultSet rs=null;
//sd.sql_data();
sql_data sd = new sql_data();
rs=sd.executeQuery(sql);
while(rs.next()) { %>
_______________________________________________________<br>
<%=rs.getString(1)%>|<%=rs.getString(2)%>|<%=rs.getString(3)%>|<%=rs.getString(4)%>|<%=rs.getString(5)%>|<%=rs.getString(6)%>|<br>
<% } %>
<% out.print("数据库操作成功,恭喜你556677888"); %>
</body>
</html>
还是不对啊org.apache.jasper.JasperException
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:370)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
root cause java.lang.NullPointerException
org.apache.jsp.sql_005ftest_jsp._jspService(org.apache.jsp.sql_005ftest_jsp:62)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
while(rs.next()) { %>while语句前要判断rs是否是null吧,改成while(rs!=null && rs.next())试试看
<javabean中>
String sDBDriver="sun.jdbc.odbc.JdbcOdbcDriver";//目前我只用这方法连接,没有问题
String url="jdbc:odbc:test";
String user="sa";
String password="sa";
<jsp中><%@ page contentType="text/html;charset=gb2312" %>
<%@ page language="java" import="java.sql.*"%>
<%@ page language="java" import="java.util.*"%>
<%@ page language="java" import="java.text.*"%><jsp:useBean id="sqlbean" class="qwe.sql_data" scope="page"/>//发现你1楼的里面scope没有写
<html>
<body>
<% try
{
sqlbean.sql_data();
String sql="select * from student";
ResultSet rs=sqlbean.executeQuery(sql);
while(rs.next()){
out.println(rs.getInt(1));
out.println(rs.getString(2));
out.println(rs.getString(3));
out.println(rs.getString(4));
//注意与数据库类型相符}
}catch(Exception ee)
{}
//rs.close();
//stmt.close();
//conn.close();
%>
</body>
</html>自己测试了下成功显示的,SQL语句也没有问题。
希望能帮你解决问题~!
请不要把数据库连接与释放放到javabean里面去,在servlet的每个业务逻辑中请用一个connection,在业务结束的时候transaciton commit,finally里面connection close。
Test.java:
package news;
import java.sql.*;
public Class Test{
public static void main(String args[]){
String strSQL=="select a21,a1,a2,a8,a9,a13 from gb";
ResultSet rs=null;
Sql_data sd = new Sql_data();
rs=sd.executeQuery(strSQL);
if(rs.next())
System.out.println("OK!");
}
}
跑一下,看看哪里会出问题。
另外,你的bean有一些问题,首先,Class的首字母最好大写:Sql_data;其次,executeQuery方法的返回值是ResultSet,但是在你的类中该方法实际上是对sql_data类的私有数据成员rs赋值!而你又不为它写getter方法,所以这样写根本没有用。直接把rs做成executeQuery()的局部变量好了