《jsp项目开发全程实录》第二章将my sql 数据库改成ms sql2k数据库后的配置问题。中文数据乱码
发表在JavaWeb图书答疑
2009-11-09
是否精华
是
否
版块置顶:
是
否
设置时间:
非永久
永久
起始时间:
结束时间:
是否扣分:
是
否
《jsp项目开发全程实录》第二章将my sql 数据库改成ms sql2k数据库后,ms sql2k的用户名是sa 密码为空。并将ms sql2k的三个jar包放入里lib文件夹下,运行网站后在第一个页面输入用户名和密码时出现如下错误:
获取的查询字符串:login
java.sql.SQLException: No suitable driver found for jdbc:microsoft://127.0.0.1:1433/db_librarySys?user=sa&password=&useUnicode=true
at java.sql.DriverManager.getConnection(DriverManager.java:602)
at java.sql.DriverManager.getConnection(DriverManager.java:207)
at com.core.ConnDB.getConnection(ConnDB.java:33)
at com.core.ConnDB.executeQuery(ConnDB.java:51)
at com.dao.ManagerDAO.checkManager(ManagerDAO.java:73)
at com.action.Manager.managerLogin(Manager.java:51)
at com.action.Manager.execute(Manager.java:24)
我将connDB.properties文件的内容改为如下:
#DB_CLASS_NAME(驱动的类的类名)
#DB_CLASS_NAME=com.mysql.jdbc.Driver
#DB_URL(要连接数据库的地址)
#DB_URL=jdbc:mysql://127.0.0.1:3306/db_librarySys?user=root&password=111&useUnicode=true
DB_CLASS_NAME=com.microsoft.jdbc.sqlserver.SQLServerDriver
DB_URL=jdbc:microsoft://127.0.0.1:1433/db_librarySys?user=sa&password=&useUnicode=true
请问上面两行的内容是否修改正确,是否还要修改其它地方的代码才可以?
补充说明,改成ms sql2k连接成功后,网页中新增加的中文记录显示乱码,以前中文记录正常,详见附件。
获取的查询字符串:login
java.sql.SQLException: No suitable driver found for jdbc:microsoft://127.0.0.1:1433/db_librarySys?user=sa&password=&useUnicode=true
at java.sql.DriverManager.getConnection(DriverManager.java:602)
at java.sql.DriverManager.getConnection(DriverManager.java:207)
at com.core.ConnDB.getConnection(ConnDB.java:33)
at com.core.ConnDB.executeQuery(ConnDB.java:51)
at com.dao.ManagerDAO.checkManager(ManagerDAO.java:73)
at com.action.Manager.managerLogin(Manager.java:51)
at com.action.Manager.execute(Manager.java:24)
我将connDB.properties文件的内容改为如下:
#DB_CLASS_NAME(驱动的类的类名)
#DB_CLASS_NAME=com.mysql.jdbc.Driver
#DB_URL(要连接数据库的地址)
#DB_URL=jdbc:mysql://127.0.0.1:3306/db_librarySys?user=root&password=111&useUnicode=true
DB_CLASS_NAME=com.microsoft.jdbc.sqlserver.SQLServerDriver
DB_URL=jdbc:microsoft://127.0.0.1:1433/db_librarySys?user=sa&password=&useUnicode=true
请问上面两行的内容是否修改正确,是否还要修改其它地方的代码才可以?
补充说明,改成ms sql2k连接成功后,网页中新增加的中文记录显示乱码,以前中文记录正常,详见附件。
精彩评论 22
2009-11-10
13L
[FIELDSET][LEGEND]引自:12楼[/LEGEND]
您需要将网页中用到ChStr.java类中toChinese(String strvalue)方法转码的代码去掉,因为JSP默认的编码方式就是GBK,然后再将向数据库表中添加记录和修改记录的语句中的字段值调用toChinese(String strvalue)方法进行转码。
[/FIELDSET]
回复:能说得具体一点吗?比喻banner.jsp中代码:
<%@ page contentType="text/html; charset=GBK"%>
<%@ page import="com.core.ChStr" %>
<%
ChStr chStr=new ChStr();
String manager=(String)session.getAttribute("manager");
//验证用户是否登录
if (manager==null || "".equals(manager)){
response.sendRedirect("login.jsp");
}
%>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<table width="778" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td height="118" valign="top" background="Images/top_bg.gif" bgcolor="#EEEEEE"><table width="100%" height="33" border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="81%" height="10"></td>
<td colspan="2"></td>
</tr>
<tr>
<td height="20"> </td>
<td width="10%"><a href="#" onClick="window.location.reload();" class="word_dark">刷新页面</a></td>
<td width="9%"><a href="#" onClick="myclose()" class="word_dark">关闭系统</a></td>
<script language="javascript">
function myclose(){
if(confirm("真的要关闭当前窗口吗?")){
window.close();
}
}
</script>
</tr>
</table>
<table width="93%" height="79" border="0" cellpadding="0" cellspacing="0">
<tr>
<td height="69" align="right" valign="bottom">当前登录用户:<%=chStr.toChinese(manager)%></td>
</tr>
</table></td>
</tr>
</table>
ChStr.java中的代码:
package com.core;
public class ChStr {
public static String toChinese(String strvalue) {
try {
if (strvalue == null) { //当变量strvalue为null时
strvalue=""; //将变量strvalue赋值为空
} else {
//strvalue = new String(strvalue.getBytes("ISO8859_1"), "GBK"); //将字符串转换为GBK编码
strvalue = strvalue.trim(); //去除字符串的首尾空格
}
} catch (Exception e) {
strvalue=""; //将变量strvalue赋值为空
}
return strvalue; //返回转换后的输入变量strvalue
}
// 处理字符串中的空值
public static final String nullToString(String v, String toV) {
if (v == null || "".equals(v)) { //当输入变量v为空时
v = toV; //将输入变量v赋值为输入变量toV
}
return v; //返回转换后的输入变量v
}
//过滤危险字符
public static final String filterStr(String str){
str=str.replaceAll(";","");
str=str.replaceAll("&","&");
str=str.replaceAll("<","<");
str=str.replaceAll(">",">");
str=str.replaceAll("'","");
str=str.replaceAll("--"," ");
str=str.replaceAll("/","");
str=str.replaceAll("%","");
return str;
}
}
您需要将网页中用到ChStr.java类中toChinese(String strvalue)方法转码的代码去掉,因为JSP默认的编码方式就是GBK,然后再将向数据库表中添加记录和修改记录的语句中的字段值调用toChinese(String strvalue)方法进行转码。
[/FIELDSET]
回复:能说得具体一点吗?比喻banner.jsp中代码:
<%@ page contentType="text/html; charset=GBK"%>
<%@ page import="com.core.ChStr" %>
<%
ChStr chStr=new ChStr();
String manager=(String)session.getAttribute("manager");
//验证用户是否登录
if (manager==null || "".equals(manager)){
response.sendRedirect("login.jsp");
}
%>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<table width="778" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td height="118" valign="top" background="Images/top_bg.gif" bgcolor="#EEEEEE"><table width="100%" height="33" border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="81%" height="10"></td>
<td colspan="2"></td>
</tr>
<tr>
<td height="20"> </td>
<td width="10%"><a href="#" onClick="window.location.reload();" class="word_dark">刷新页面</a></td>
<td width="9%"><a href="#" onClick="myclose()" class="word_dark">关闭系统</a></td>
<script language="javascript">
function myclose(){
if(confirm("真的要关闭当前窗口吗?")){
window.close();
}
}
</script>
</tr>
</table>
<table width="93%" height="79" border="0" cellpadding="0" cellspacing="0">
<tr>
<td height="69" align="right" valign="bottom">当前登录用户:<%=chStr.toChinese(manager)%></td>
</tr>
</table></td>
</tr>
</table>
ChStr.java中的代码:
package com.core;
public class ChStr {
public static String toChinese(String strvalue) {
try {
if (strvalue == null) { //当变量strvalue为null时
strvalue=""; //将变量strvalue赋值为空
} else {
//strvalue = new String(strvalue.getBytes("ISO8859_1"), "GBK"); //将字符串转换为GBK编码
strvalue = strvalue.trim(); //去除字符串的首尾空格
}
} catch (Exception e) {
strvalue=""; //将变量strvalue赋值为空
}
return strvalue; //返回转换后的输入变量strvalue
}
// 处理字符串中的空值
public static final String nullToString(String v, String toV) {
if (v == null || "".equals(v)) { //当输入变量v为空时
v = toV; //将输入变量v赋值为输入变量toV
}
return v; //返回转换后的输入变量v
}
//过滤危险字符
public static final String filterStr(String str){
str=str.replaceAll(";","");
str=str.replaceAll("&","&");
str=str.replaceAll("<","<");
str=str.replaceAll(">",">");
str=str.replaceAll("'","");
str=str.replaceAll("--"," ");
str=str.replaceAll("/","");
str=str.replaceAll("%","");
return str;
}
}
2009-11-11
15L
[FIELDSET][LEGEND]引自:14楼[/LEGEND]
比如将添加记录和修改记录的SQL语句中
用到从表单中获得的文本值调用
toChinese(String strvalue)方法
进行转码就可以解决了。
[/FIELDSET]
回复:能以library_modify.jsp为例说一下哪几行要修改成怎样的才行。
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<%@ page import="com.actionForm.LibraryForm" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<%
LibraryForm libraryForm=(LibraryForm)request.getAttribute("libraryModifyif");
String libraryname="";
String curator="";
String tel="";
String address="";
String email="";
String url="";
String createTime="";
String introduce="";
%>
<head>
<title>图书馆管理系统</title>
<link href="CSS/style.css" rel="stylesheet">
</head>
<script language="javascript">
function checkForm(form){
for(i=0;i<form.length;i++){
if(form.elements[i].value==""){
alert("请将信息添写完整!");
form.elements[i].focus();
return false;
}
}
}
</script>
<body onLoad="clockon(bgclock)">
<%@include file="banner.jsp"%>
<%@include file="navigation.jsp"%>
<table width="778" border="0" cellspacing="0" cellpadding="0" align="center">
<tr>
<td valign="top" bgcolor="#FFFFFF"><table width="99%" height="510" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" class="tableBorder_gray">
<tr>
<td height="510" valign="top" style="padding:5px;"><table width="98%" height="487" border="0" cellpadding="0" cellspacing="0">
<tr>
<td height="22" valign="top" class="word_orange">当前位置:系统设置 > 图书馆信息 >>></td>
</tr>
<tr>
<td align="center" valign="top">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="84%"> </td>
</tr>
</table> <form name="form1" method="post" action="library.do?action=libraryModify">
<%
if(libraryForm!=null){
libraryname=chStr.toChinese(libraryForm.getLibraryname());
curator=chStr.toChinese(libraryForm.getCurator());
tel=libraryForm.getTel();
address=chStr.toChinese(libraryForm.getAddress());
email=libraryForm.getEmail();
url=libraryForm.getUrl();
createTime=chStr.toChinese(libraryForm.getCreateDate());
introduce=chStr.toChinese(libraryForm.getIntroduce());
}
%>
<table width="58%" border="0" cellpadding="0" cellspacing="0" bordercolor="#FFFFFF" bordercolordark="#D2E3E6" bordercolorlight="#FFFFFF">
<tr align="center">
<td width="20%" align="left" style="padding:5px;">图书馆名称:</td>
<td width="80%" align="left">
<input name="libraryname" type="text" id="libraryname" value="<%=libraryname%>" size="30">
</td>
<tr>
<td align="left" style="padding:5px;">馆长:</td>
<td align="left"><input name="curator" type="text" id="curator" size="30" value="<%=curator%>" ></td>
</tr>
<tr>
<td align="left" style="padding:5px;">联系电话:</td>
<td align="left"><input name="tel" type="text" id="tel" size="30" value="<%=tel%>"></td>
</tr>
<tr>
<td align="left" style="padding:5px;">联系地址:</td>
<td align="left"><input name="address" type="text" id="address" size="30" value="<%=address%>"></td>
</tr>
<tr>
<td align="left" style="padding:5px;">联系邮箱:</td>
<td align="left"><input name="email" type="text" id="email" size="30" value="<%=email%>"></td>
</tr>
<tr>
<td align="left" style="padding:5px;">图书馆网址:</td>
<td align="left"><input name="url" type="text" id="url" size="30" value="<%=url%>"></td>
</tr>
<tr>
<td align="left" style="padding:5px;">建馆时间:</td>
<td align="left"><input name="createDate" type="text" id="createDate" size="30" value="<%=createTime%>">
(日期格式:2007-11-22)</td>
</tr>
<tr>
<td height="84" align="left" style="padding:5px;">图书馆简介:</td>
<td align="left"><textarea name="introduce" cols="50" rows="5" class="wenbenkuang" id="introduce"><%=introduce%></textarea></td>
</tr>
<tr>
<td height="65" align="left" style="padding:5px;"> </td>
<td><input name="Submit" type="submit" class="btn_grey" value="保存" onClick="return checkForm(form1)">
<input name="Submit2" type="reset" class="btn_grey" value="取消"></td>
</tr>
</table>
</form></td>
</tr>
</table>
</td>
</tr>
</table><%@ include file="copyright.jsp"%></td>
</tr>
</table>
</body>
</html>
比如将添加记录和修改记录的SQL语句中
用到从表单中获得的文本值调用
toChinese(String strvalue)方法
进行转码就可以解决了。
[/FIELDSET]
回复:能以library_modify.jsp为例说一下哪几行要修改成怎样的才行。
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<%@ page import="com.actionForm.LibraryForm" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<%
LibraryForm libraryForm=(LibraryForm)request.getAttribute("libraryModifyif");
String libraryname="";
String curator="";
String tel="";
String address="";
String email="";
String url="";
String createTime="";
String introduce="";
%>
<head>
<title>图书馆管理系统</title>
<link href="CSS/style.css" rel="stylesheet">
</head>
<script language="javascript">
function checkForm(form){
for(i=0;i<form.length;i++){
if(form.elements[i].value==""){
alert("请将信息添写完整!");
form.elements[i].focus();
return false;
}
}
}
</script>
<body onLoad="clockon(bgclock)">
<%@include file="banner.jsp"%>
<%@include file="navigation.jsp"%>
<table width="778" border="0" cellspacing="0" cellpadding="0" align="center">
<tr>
<td valign="top" bgcolor="#FFFFFF"><table width="99%" height="510" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" class="tableBorder_gray">
<tr>
<td height="510" valign="top" style="padding:5px;"><table width="98%" height="487" border="0" cellpadding="0" cellspacing="0">
<tr>
<td height="22" valign="top" class="word_orange">当前位置:系统设置 > 图书馆信息 >>></td>
</tr>
<tr>
<td align="center" valign="top">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="84%"> </td>
</tr>
</table> <form name="form1" method="post" action="library.do?action=libraryModify">
<%
if(libraryForm!=null){
libraryname=chStr.toChinese(libraryForm.getLibraryname());
curator=chStr.toChinese(libraryForm.getCurator());
tel=libraryForm.getTel();
address=chStr.toChinese(libraryForm.getAddress());
email=libraryForm.getEmail();
url=libraryForm.getUrl();
createTime=chStr.toChinese(libraryForm.getCreateDate());
introduce=chStr.toChinese(libraryForm.getIntroduce());
}
%>
<table width="58%" border="0" cellpadding="0" cellspacing="0" bordercolor="#FFFFFF" bordercolordark="#D2E3E6" bordercolorlight="#FFFFFF">
<tr align="center">
<td width="20%" align="left" style="padding:5px;">图书馆名称:</td>
<td width="80%" align="left">
<input name="libraryname" type="text" id="libraryname" value="<%=libraryname%>" size="30">
</td>
<tr>
<td align="left" style="padding:5px;">馆长:</td>
<td align="left"><input name="curator" type="text" id="curator" size="30" value="<%=curator%>" ></td>
</tr>
<tr>
<td align="left" style="padding:5px;">联系电话:</td>
<td align="left"><input name="tel" type="text" id="tel" size="30" value="<%=tel%>"></td>
</tr>
<tr>
<td align="left" style="padding:5px;">联系地址:</td>
<td align="left"><input name="address" type="text" id="address" size="30" value="<%=address%>"></td>
</tr>
<tr>
<td align="left" style="padding:5px;">联系邮箱:</td>
<td align="left"><input name="email" type="text" id="email" size="30" value="<%=email%>"></td>
</tr>
<tr>
<td align="left" style="padding:5px;">图书馆网址:</td>
<td align="left"><input name="url" type="text" id="url" size="30" value="<%=url%>"></td>
</tr>
<tr>
<td align="left" style="padding:5px;">建馆时间:</td>
<td align="left"><input name="createDate" type="text" id="createDate" size="30" value="<%=createTime%>">
(日期格式:2007-11-22)</td>
</tr>
<tr>
<td height="84" align="left" style="padding:5px;">图书馆简介:</td>
<td align="left"><textarea name="introduce" cols="50" rows="5" class="wenbenkuang" id="introduce"><%=introduce%></textarea></td>
</tr>
<tr>
<td height="65" align="left" style="padding:5px;"> </td>
<td><input name="Submit" type="submit" class="btn_grey" value="保存" onClick="return checkForm(form1)">
<input name="Submit2" type="reset" class="btn_grey" value="取消"></td>
</tr>
</table>
</form></td>
</tr>
</table>
</td>
</tr>
</table><%@ include file="copyright.jsp"%></td>
</tr>
</table>
</body>
</html>
2009-11-14
16L
<%
if(libraryForm!=null){
libraryname=chStr.toChinese(libraryForm.getLibraryname());
curator=chStr.toChinese(libraryForm.getCurator());
tel=libraryForm.getTel();
address=chStr.toChinese(libraryForm.getAddress());
email=libraryForm.getEmail();
url=libraryForm.getUrl();
createTime=chStr.libraryForm.getCreateDate();
introduce=chStr.toChinese(libraryForm.getIntroduce());
}
%>
就是这几行,获取页面数据的时候直接进行转码
if(libraryForm!=null){
libraryname=chStr.toChinese(libraryForm.getLibraryname());
curator=chStr.toChinese(libraryForm.getCurator());
tel=libraryForm.getTel();
address=chStr.toChinese(libraryForm.getAddress());
email=libraryForm.getEmail();
url=libraryForm.getUrl();
createTime=chStr.libraryForm.getCreateDate();
introduce=chStr.toChinese(libraryForm.getIntroduce());
}
%>
就是这几行,获取页面数据的时候直接进行转码
2009-11-14
17L
[FIELDSET][LEGEND]引自:16楼[/LEGEND]
<%
if(libraryForm!=null){
libraryname=chStr.toChinese(libraryForm.getLibraryname());
curator=chStr.toChinese(libraryForm.getCurator());
tel=libraryForm.getTel();
address=chStr.toChinese(libraryForm.getAddress());
email=libraryForm.getEmail();
url=libraryForm.getUrl();
createTime=chStr.libraryForm.getCreateDate();
introduce=chStr.toChinese(libraryForm.getIntroduce());
}
%>
就是这几行,获取页面数据的时候直接进行转码
[/FIELDSET]
回复: 不知这几行要改怎样样后才能不是乱码?
<%
if(libraryForm!=null){
libraryname=chStr.toChinese(libraryForm.getLibraryname());
curator=chStr.toChinese(libraryForm.getCurator());
tel=libraryForm.getTel();
address=chStr.toChinese(libraryForm.getAddress());
email=libraryForm.getEmail();
url=libraryForm.getUrl();
createTime=chStr.libraryForm.getCreateDate();
introduce=chStr.toChinese(libraryForm.getIntroduce());
}
%>
就是这几行,获取页面数据的时候直接进行转码
[/FIELDSET]
回复: 不知这几行要改怎样样后才能不是乱码?
2009-11-16
18L
<%
if(libraryForm!=null){
libraryname=chStr.toChinese(libraryForm.getLibraryname());
curator=chStr.toChinese(libraryForm.getCurator());
tel=libraryForm.getTel();
address=chStr.toChinese(libraryForm.getAddress());
email=libraryForm.getEmail();
url=libraryForm.getUrl();
createTime=chStr.libraryForm.getCreateDate();
introduce=chStr.toChinese(libraryForm.getIntroduce());
}
%>
修改为:
<%
if(libraryForm!=null){
libraryname=libraryForm.getLibraryname();
curator=libraryForm.getCurator();
tel=libraryForm.getTel();
address=libraryForm.getAddress();
email=libraryForm.getEmail();
url=libraryForm.getUrl();
createTime=chStr.libraryForm.getCreateDate();
introduce=libraryForm.getIntroduce();
}
%>
即可。前提是目前数据库中保存的记录是不乱码的。
if(libraryForm!=null){
libraryname=chStr.toChinese(libraryForm.getLibraryname());
curator=chStr.toChinese(libraryForm.getCurator());
tel=libraryForm.getTel();
address=chStr.toChinese(libraryForm.getAddress());
email=libraryForm.getEmail();
url=libraryForm.getUrl();
createTime=chStr.libraryForm.getCreateDate();
introduce=chStr.toChinese(libraryForm.getIntroduce());
}
%>
修改为:
<%
if(libraryForm!=null){
libraryname=libraryForm.getLibraryname();
curator=libraryForm.getCurator();
tel=libraryForm.getTel();
address=libraryForm.getAddress();
email=libraryForm.getEmail();
url=libraryForm.getUrl();
createTime=chStr.libraryForm.getCreateDate();
introduce=libraryForm.getIntroduce();
}
%>
即可。前提是目前数据库中保存的记录是不乱码的。
2009-11-17
19L
[FIELDSET][LEGEND]引自:18楼[/LEGEND]
<%
if(libraryForm!=null){
libraryname=chStr.toChinese(libraryForm.getLibraryname());
curator=chStr.toChinese(libraryForm.getCurator());
tel=libraryForm.getTel();
address=chStr.toChinese(libraryForm.getAddress());
email=libraryForm.getEmail();
url=libraryForm.getUrl();
createTime=chStr.libraryForm.getCreateDate();
introduce=chStr.toChinese(libraryForm.getIntroduce());
}
%>
修改为:
<%
if(libraryForm!=null){
libraryname=libraryForm.getLibraryname();
curator=libraryForm.getCurator();
tel=libraryForm.getTel();
address=libraryForm.getAddress();
email=libraryForm.getEmail();
url=libraryForm.getUrl();
createTime=chStr.libraryForm.getCreateDate();
introduce=libraryForm.getIntroduce();
}
%>
即可。前提是目前数据库中保存的记录是不乱码的。
[/FIELDSET]
回复:现在关键是通过本网页新增,修改或保存到数据库中的汉字会变成乱码,怎样才能让通过本网页 新增,修改或保存到数据库中的汉字不变成乱码?
<%
if(libraryForm!=null){
libraryname=chStr.toChinese(libraryForm.getLibraryname());
curator=chStr.toChinese(libraryForm.getCurator());
tel=libraryForm.getTel();
address=chStr.toChinese(libraryForm.getAddress());
email=libraryForm.getEmail();
url=libraryForm.getUrl();
createTime=chStr.libraryForm.getCreateDate();
introduce=chStr.toChinese(libraryForm.getIntroduce());
}
%>
修改为:
<%
if(libraryForm!=null){
libraryname=libraryForm.getLibraryname();
curator=libraryForm.getCurator();
tel=libraryForm.getTel();
address=libraryForm.getAddress();
email=libraryForm.getEmail();
url=libraryForm.getUrl();
createTime=chStr.libraryForm.getCreateDate();
introduce=libraryForm.getIntroduce();
}
%>
即可。前提是目前数据库中保存的记录是不乱码的。
[/FIELDSET]
回复:现在关键是通过本网页新增,修改或保存到数据库中的汉字会变成乱码,怎样才能让通过本网页 新增,修改或保存到数据库中的汉字不变成乱码?