《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连接成功后,网页中新增加的中文记录显示乱码,以前中文记录正常,详见附件。
分享到:
精彩评论 22
hanqg
学分:0 LV1
2009-11-09
11L
[FIELDSET][LEGEND]引自:10楼[/LEGEND]
出现乱码的原因是程序编码的问题,您只需要将程序中的编码改为GBK的就可以了。
[/FIELDSET]

回复:
  所有jsp网页中gb2312都改成了GBK,也不行,网页中显示的其它汉字正常,只是网中数据窗中新增或修改的中文,保存后就变成乱码了,详见顶楼的附件
东北虎
学分:0 LV1
2009-11-10
12L
您需要将网页中用到ChStr.java类中toChinese(String strvalue)方法转码的代码去掉,因为JSP默认的编码方式就是GBK,然后再将向数据库表中添加记录和修改记录的语句中的字段值调用toChinese(String strvalue)方法进行转码。
hanqg
学分:0 LV1
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">&nbsp;</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("&","&amp;");
str=str.replaceAll("<","&lt;");
str=str.replaceAll(">","&gt;");
str=str.replaceAll("'","");
str=str.replaceAll("--"," ");
str=str.replaceAll("/","");
str=str.replaceAll("%","");
return str;
}
}



  
东北虎
学分:0 LV1
2009-11-10
14L
比如将添加记录和修改记录的SQL语句中
用到从表单中获得的文本值调用
toChinese(String strvalue)方法
进行转码就可以解决了。
hanqg
学分:0 LV1
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">当前位置:系统设置 &gt; 图书馆信息 &gt;&gt;&gt;</td>
      </tr>
      <tr>
        <td align="center" valign="top">
 <table width="100%"  border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td width="84%">&nbsp;      </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;">&nbsp;</td>
      <td><input name="Submit" type="submit" class="btn_grey" value="保存" onClick="return checkForm(form1)">
        &nbsp;
        <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>

  
柠檬草
学分:0 LV1
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());
}
%>
就是这几行,获取页面数据的时候直接进行转码
hanqg
学分:0 LV1
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]

回复: 不知这几行要改怎样样后才能不是乱码?
  
无语_mrkj
学分:3155 LV11
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();
}
%>
即可。前提是目前数据库中保存的记录是不乱码的。
hanqg
学分:0 LV1
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]

回复:现在关键是通过本网页新增,修改或保存到数据库中的汉字会变成乱码,怎样才能让通过本网页 新增,修改或保存到数据库中的汉字不变成乱码?
无语_mrkj
学分:3155 LV11
2009-11-19
20L
这个问题您可以在向数据库中添加数据前,将获取到的中文信息,通过chStr.toChinese()方法进行一次转码后(将编码转换为GBK),再存到数据库中就不会乱码了。不过涉及到的文件会比较多,您需要一一进行修改。
首页上一页 123 下一页尾页 22 条记录 2/3页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照