问一个javabean连接mysql数据库的问题

yeyuanzhi2000 2009-01-01 04:46:08
我直接在jsp页面中连接mysql数据库成功,代码如下:
<%@ page contentType="text/html;charset=gb2312"%>   
<%@ page import="java.sql.*"%>
<html>
<body>
<%Class.forName("com.mysql.jdbc.Driver").newInstance();
String url ="jdbc:mysql://localhost/new2007?user=root&password=123&useUnicode=true&characterEncoding=8859_1";
//testDB为你的数据库名
Connection conn= DriverManager.getConnection(url);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from tb_user";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<%}%>
<%out.print("数据库操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>

后来,我把它改成javabean+jsp的形式:
1、JDBConnection类如下:
package com;
import java.sql.*; //导入数据库操作的类

public class JDBConnection //构造方法,初始化
{

private Connection conn; //连接对象
private Statement stmt; //语句对象
private ResultSet rs; //结果集对象
private String accessdriver; //保存Access驱动程序字符串
private String accessURL; //保存Access连接字符串

public JDBConnection()
{
//Access驱动程序
accessdriver = "com.mysql.jdbc.Driver";
//连接字符串
accessURL = "jdbc:mysql://localhost/new2007?user=root&password=123&useUnicode=true&characterEncoding=8859_1";
conn = null;
}

//该方法从参数得到数据库路径,并加到连接字符串后面,然后再建立连接
public Connection getConnToAccess(){
try{
Class.forName(accessdriver);
conn = DriverManager.getConnection(accessURL);
}catch(Exception e){
System.out.println("操作数据库出错,请仔细检查");
System.err.println(e.getMessage());
}
return conn;
}



//关闭数据库连接
public void close()
{
try{
//rs.close();
//stmt.close();
conn.close();
}catch(SQLException sqlexception){
sqlexception.printStackTrace();
}
}
}

2、index.jsp代码如下:
<%@ page contentType="text/html;charset=gb2312"%>   
<%@ page import="java.sql.*"%>
<jsp:useBean id="DBConn" scope="request" class="com.JDBConnection"/>
<html>
<body>
<%
Connection conn= DBConn.getConnToAccess();
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from tb_user";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<%}%>
<%out.print("数据库操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>

但是运行时提示错误:
org.apache.jasper.JasperException: /index.jsp(3,0) The value for the useBean class attribute com.JDBConnection is invalid.
不知为什么?请高手指点,谢谢!!
...全文
154 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
使用Tomcat 常见 "The value for the useBean class attribute is invalid" 错误。
该错误是指 JSP 中给定的 useBean 标签的 class 属性的值无效(不是 Bean 的属性值)。

楼主仔细检查一下

还有就是建议不要把数据库连接语句放在前台jsp页面中
在后台处理比较安全
yeyuanzhi2000 2009-01-02
  • 打赏
  • 举报
回复
谢谢各位!
1、我已经把mysql-connector-java-3.1.14-bin-g.jar和mysql-connector-java-3.1.14-bin.jar放到Tomcat 5.5\common\lib目录下面了呀?
2、<jsp:useBean id="DBConn" scope="request" class="com.JDBConnection"/>scope之前也是page,但是还是运行错误。
是不是JDBConnection类连接代码有问题?麻烦各位帮我仔细检查一下。谢谢!!
qq871616204 2009-01-02
  • 打赏
  • 举报
回复
尽量少在JSP中嵌入JAVA代码
ZiSheng 2009-01-02
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 yeyuanzhi2000 的回复:]
谢谢各位!
1、我已经把mysql-connector-java-3.1.14-bin-g.jar和mysql-connector-java-3.1.14-bin.jar放到Tomcat 5.5\common\lib目录下面了呀?
2、 <jsp:useBean id="DBConn" scope="request" class="com.JDBConnection"/>scope之前也是page,但是还是运行错误。
是不是JDBConnection类连接代码有问题?麻烦各位帮我仔细检查一下。谢谢!!
[/Quote]
导入你的bean,这样:
<%@ page import="com.JDBConnection"%>

<jsp:useBean id="DBConn" scope="request" class="JDBConnection"/>
看看行不
qiaopengfei 2009-01-02
  • 打赏
  • 举报
回复
同意8楼的意见,代码写的规范有点不好,而且还有关闭资源等问题都要注意要在finally{}块中。
请楼主写代码时注意一下。
zrcai 2009-01-02
  • 打赏
  • 举报
回复

package com;
import java.sql.*;
public class DB {
private static Connection getConn() {
Connection conn = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager
.getConnection("jdbc:mysql://localhost:/bbs?user=root&password=root");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}

private static Statement getStmt(Connection conn) {
Statement stmt = null;
try {
stmt = conn.createStatement();
} catch (SQLException e) {
e.printStackTrace();
}
return stmt;
}

private static ResultSet getRs(Statement stmt, String sql) {
ResultSet rs = null;
try {
rs = stmt.executeQuery(sql);
} catch (SQLException e) {
e.printStackTrace();
}
return rs;
}

public static void closeConn(Connection conn) {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
conn = null;
}
}

public static void closeStmt(Statement stmt) {
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
stmt = null;
}
}

public static void closeRs(ResultSet rs) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
rs = null;
}
}
}
yeyuanzhi2000 2009-01-02
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 guolimin1118 的回复:]
你的JDBConnection类的属性看着怪怪的
最好都写成局部变量。这样对并发执行的时候才能不出现问题
[/Quote]
那要怎样写呢?谁能帮我写一个类?
aloie 2009-01-02
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 Rachael1001 的回复:]
这样调用
感觉怪怪的
scope为什么是request?
还不如
<%@ page import="java.sql.*"%>
<%@ page import="com.JDBConnection"%>

<%
JDBConnection jDBConn = new JDBConnection();
Connection conn= jDBConn.getConnToAccess();
.................
%>
[/Quote]

y
guolimin1118 2009-01-02
  • 打赏
  • 举报
回复
你的JDBConnection类的属性看着怪怪的
最好都写成局部变量。这样对并发执行的时候才能不出现问题
Rachael1001 2009-01-01
  • 打赏
  • 举报
回复
这样调用
感觉怪怪的
scope为什么是request?
还不如
<%@ page import="java.sql.*"%>
<%@ page import="com.JDBConnection"%>

<%
JDBConnection jDBConn = new JDBConnection();
Connection conn= jDBConn.getConnToAccess();
.................
%>
glglglglglgllll 2009-01-01
  • 打赏
  • 举报
回复
检查下。应该是细节问题
believefym 2009-01-01
  • 打赏
  • 举报
回复
你这个类没有被找到
看一下web-inf\classes\com\下面有没有这个类
leihaoyi827 2009-01-01
  • 打赏
  • 举报
回复
连接相应的数据库的Jar包加进去了没有?

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧