最近项目中由于环境需要,需在服务端搭建一套B/S模式的mysql数据库管理系统,上网查找,找到了一个开源项目JspMyAdmin,这个web应用类似于PHP中常用的PhpMyAdmin。但在实际的部署使用中发现了很多BUG和错误,不过最终还是解决了。
下面给大家介绍一下具体的安装方法和BUG的解决办法:
一、上官网下载源码,官网地址:http://sourceforge.net/projects/jspmyadmin/
二、解压文件到tomcat下
三、在启动服务前,先配置一下数据库相关信息;打开config.inc.jsp文件修改第10行开始的各个信息,包括地址,端口,用户名,密码。不解释,详细大家都懂的。
四、现在启动服务,访问服务http://localhost/jspmyadmin/
五、发现报500错误,错误信息大概是:
org.apache.jasper.JasperException: Unable to compile class for JSP:
An error occurred at line: 43 in the jsp file: /lib.inc.jsp
Enumeration cannot be resolved
40: pageContext.setAttribute(PROPERTIES_REQUEST_KEY,myproperties, pageContext.SESSION_SCOPE);
41: }
42: Hashtable all = new Hashtable();
43: Enumeration enum = myproperties.propertyNames();
44: while (enum.hasMoreElements()) {
45: String key= (String)enum.nextElement();
46: String value= myproperties.getProperty( key );
出现该问题是由于新版本中enum是个关键字,所以这里定义成变量是冲突的,所以解决此问题很简单,只需要修改第lib.inc.jsp文件的43行:
Enumeration enum = myproperties.propertyNames();
中的enum改为enum_xxx(任意命名,但尽量不要重名),之后还有几个应用,一并修改,不要漏改。
六、继续刷新页面,会报类似以下错误:Oops! an exception occurred.
The exception was: java.sql.SQLException: Communication failure during handshake. Is there a server running on localhost:3306?
The exception class was : class java.sql.SQLException出现这个原因是此应用自带的mysql驱动JDBC版本太低,可以更换上你经常使用和当前数据库版本对应的jar包到WEB-INF\lib下,将mysql.jar替换掉。
七、继续刷新页面,可能还会报错,信息如下:
Oops! an exception occurred.
The exception was: java.sql.SQLException: Invalid authorization specification: Access denied for user ‘root’@'localhost’ (using password: NO)
The exception class was : class java.sql.SQLException
大家一看这个报错信息,是很明显的密码错误,可是我们明明都已经配置了密码,如果你没有出现这个错误,说明你mysql数据库的默认密码是空,(运气好啊。。。)其实这个是程序中的bug,程序内部在最终设置用户名和密码并没有读取刚才配置的配置文件,而是内部直接指定了。解决方法也很简单:打开lib.inc.jsp在89行左右找到代码 cm.setUser(“root”);
cm.setPassword(“”);
改为:
cm.setUser(cfg.get4Server(“user”,server));
cm.setPassword(cfg.get4Server(“password”,server));
即可,但这样还是没有生效,需要重启服务,因为在第一次运行时候,它会将这些信息放到application里面,第二次就不在读取配置文件了,所以需要重启。
八、完成以上调试,基本就可以打开了,但是查看数据记录遇到中文会乱码,可以进行以下修改,解决乱码:打开lib.inc.jsp修改17行为
<%@ page contentType=”text/html; charset=GBK” pageEncoding=”GBK” language=”java” import=”java.text.*,java.sql.*,java.util.*,java.io.*,java.net.*,com.jspmyadmin.*” errorPage=”error.jsp” %>
如果还是乱码就在此文件21行前加入request.setCharacterEncoding(“GBK”);即可。
九、现在可以使用,最后还是说明一下几个常见的错误,
1.例如:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘-10-12′ at line 1
类似错误,请检查自己的数据库名称是否有非法字符,如果是数字开头,或者使用除下划线外的符号都会报错,请先手动修改库名,再运行。
2.例如:Oops! an exception occurred.
The exception was: java.sql.SQLException: Operation not allowed after ResultSet closed
The exception class was : class java.sql.SQLException
出现以上错误,原因是在读取结果集之前关闭了数据连接。打开tbl_change.jsp文件,定位在20行左右,将result.close();剪切掉,放到25行ResultSetMetaData rsdt = result.getMetaData();后面
3.例如:Oops! an exception occurred.
The exception was: java.sql.SQLException: Can not issue data manipulation statements with executeQuery().
The exception class was : class java.sql.SQLException
出现以上错误,是个严重的bug,此程序没有更改数据的SQL方法,都调用的查询,这个我很郁闷,我在lib.inc.jsp中加入两个方法:
//大哥,破程序什么都是查询,还得自己写个修改。。
public boolean mysql_update(PageContext localpagectx, String query) throws SQLException {
boolean isok=false;
Connection conn = (Connection)localpagectx.getAttribute(“ds_conn”);
PreparedStatement pstm = conn.prepareStatement(query);
int i=pstm.executeUpdate();
if(i>0)
{
isok=true;
}
return isok;
}
//大哥,破程序什么都是查询,还得自己写个修改。。
public boolean mysql_update(Connection localconn, String query) throws SQLException {
boolean isok=false;
Connection conn = localconn;
PreparedStatement pstm = conn.prepareStatement(query);
int i=pstm.executeUpdate();
if(i>0)
{
isok=true;
}
return isok;
}
十.最后,利用伟大的google翻译和自己很烂的英语汉化了此程序,部署后默认是中文,(不太准确,凑乎的用大家)
今天就写到这里,这个程序的错误,太多了,看了想完美的运行得好好休整一番,需要的朋友可以一起探讨,如果时间允许,我后期会继续写出此程序的bug修复方法。以下附上现阶段的修复和汉化后版本,直接将文件解压到tomcat目录下即可。源文件已经附上在class目录下。
不错 小伙子 技术越来越牛了
呵呵,最近忙什么呢
小伙子 看了你的东东 不错 现在的技术很牛了啊