我在做一个jsp的页面的时候,在调用mysql数据库中属性为text的字段的时候总是乱码,请高手帮我分析下,到底错在哪儿了?最好能帮我改一下!谢谢了!!!
我的配置是 :
win2000 pro
resin-2.1.6
mysql 4.0.12
jdk1.3
mm.mysql.jdbc-1.2b
下面是数据库和代码:
------------------------------------------
数据库
------------------------------------------
# 主机: localhost
# 数据库: t
# 表: txt
#
CREATE TABLE `txt` (
`id` int(11) NOT NULL auto_increment,
`txt` text NOT NULL,
PRIMARY KEY (`id`)
) TYPE=MyISAM;
------------------------------------------
index.jsp
------------------------------------------
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<%@ include file="Connections/cont.jsp" %>
<%
// *** Edit Operations: declare variables
// set the form action variable
String MM_editAction = request.getRequestURI();
if (request.getQueryString() != null && request.getQueryString().length() > 0) {
MM_editAction += "?" + request.getQueryString();
}
// connection information
String MM_editDriver = null, MM_editConnection = null, MM_editUserName = null, MM_editPassword = null;
// redirect information
String MM_editRedirectUrl = null;
// query string to execute
StringBuffer MM_editQuery = null;
// boolean to abort record edit
boolean MM_abortEdit = false;
// table information
String MM_editTable = null, MM_editColumn = null, MM_recordId = null;
// form field information
String[] MM_fields = null, MM_columns = null;
%>
<%
// *** Insert Record: set variables
if (request.getParameter("MM_insert") != null && request.getParameter("MM_insert").toString().equals("form1")) {
MM_editDriver = MM_cont_DRIVER;
MM_editConnection = MM_cont_STRING;
MM_editUserName = MM_cont_USERNAME;
MM_editPassword = MM_cont_PASSWORD;
MM_editTable = "txt";
MM_editRedirectUrl = "index.jsp";
String MM_fieldsStr = "id|value|txt|value";
String MM_columnsStr = "id|none,none,NULL|txt|,none,";
// create the MM_fields and MM_columns arrays
java.util.StringTokenizer tokens = new java.util.StringTokenizer(MM_fieldsStr,"|");
MM_fields = new String[tokens.countTokens()];
for (int i=0; tokens.hasMoreTokens(); i++) MM_fields[i] = tokens.nextToken();
tokens = new java.util.StringTokenizer(MM_columnsStr,"|");
MM_columns = new String[tokens.countTokens()];
for (int i=0; tokens.hasMoreTokens(); i++) MM_columns[i] = tokens.nextToken();
// set the form values
for (int i=0; i+1 < MM_fields.length; i+=2) {
MM_fields[i+1] = ((request.getParameter(MM_fields[i])!=null)?(String)request.getParameter(MM_fields[i]):"");
}
// append the query string to the redirect URL
if (MM_editRedirectUrl.length() != 0 && request.getQueryString() != null) {
MM_editRedirectUrl += ((MM_editRedirectUrl.indexOf(?) == -1)?"?":"&") + request.getQueryString();
}
}
%>
<%
// *** Insert Record: construct a sql insert statement and execute it
if (request.getParameter("MM_insert") != null) {
// create the insert sql statement
StringBuffer MM_tableValues = new StringBuffer(), MM_dbValues = new StringBuffer();
for (int i=0; i+1 < MM_fields.length; i+=2) {
String formVal = MM_fields[i+1];
String elem;
java.util.StringTokenizer tokens = new java.util.StringTokenizer(MM_columns[i+1],",");
String delim = ((elem = (String)tokens.nextToken()) != null && elem.compareTo("none")!=0)?elem:"";
String altVal = ((elem = (String)tokens.nextToken()) != null && elem.compareTo("none")!=0)?elem:"";
String emptyVal = ((elem = (String)tokens.nextToken()) != null && elem.compareTo("none")!=0)?elem:"";
if (formVal.length() == 0) {
formVal = emptyVal;
} else {
if (altVal.length() != 0) {
formVal = altVal;
} else if (delim.compareTo("") == 0) { // escape quotes
StringBuffer escQuotes = new StringBuffer(formVal);
for (int j=0; j < escQuotes.length(); j++)
if (escQuotes.charAt(j) == \) escQuotes.insert(j++,\);
formVal = "" + escQuotes + "";
} else {
formVal = delim + formVal + delim;
}
}
MM_tableValues.append((i!=0)?",":"").append(MM_columns[i]);
MM_dbValues.append((i!=0)?",":"").append(formVal);
}
MM_editQuery = new StringBuffer("insert into " + MM_editTable);
MM_editQuery.append(" (").append(MM_tableValues.toString()).append(") values (");
MM_editQuery.append(MM_dbValues.toString()).append(")");
if (!MM_abortEdit) {
// finish the sql and execute it
Driver MM_driver = (Driver)Class.forName(MM_editDriver).newInstance();
Connection MM_connection = DriverManager.getConnection(MM_editConnection,MM_editUserName,MM_editPassword);
PreparedStatement MM_editStatement = MM_connection.prepareStatement(MM_editQuery.toString());
MM_editStatement.executeUpdate();
MM_connection.close();
// redirect with URL parameters
if (MM_editRedirectUrl.length() != 0) {
response.sendRedirect(response.encodeRedirectURL(MM_editRedirectUrl));
return;
}
}
}
%>
<%
Driver Driverread = (Driver)Class.forName(MM_cont_DRIVER).newInstance();
Connection Connread = DriverManager.getConnection(MM_cont_STRING,MM_cont_USERNAME,MM_cont_PASSWORD);
PreparedStatement Statementread = Connread.prepareStatement("SELECT * FROM txt");
ResultSet read = Statementread.executeQuery();
boolean read_isEmpty = !read.next();
boolean read_hasData = !read_isEmpty;
Object read_data;
int read_numRows = 0;
%>
<%
int Repeat1__numRows = -1;
int Repeat1__index = 0;
read_numRows += Repeat1__numRows;
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>数据库连接测试</title>
</head>
<body>
<% while ((read_hasData)&&(Repeat1__numRows-- != 0)) { %>
<p><%=(((read_data = read.getObject("id"))==null || read.wasNull())?"":read_data)%> <br>
<%=(((read_data = read.getObject("txt"))==null || read.wasNull())?"":read_data)%> </p>
<%
Repeat1__index++;
read_hasData = read.next();
}
%>
<hr align="center" size="1" noshade>
<p> </p>
<form method="post" action="<%=MM_editAction%>" name="form1">
<table align="center">
<tr valign="baseline">
<td nowrap align="right">Id:</td>
<td> <input type="text" name="id" value="" size="32"> </td>
</tr>
<tr valign="baseline">
<td nowrap align="right">Txt:</td>
<td> <textarea name="txt" cols="32" rows="10"></textarea> </td>
</tr>
<tr valign="baseline">
<td nowrap align="right"> </td>
<td> <input type="submit" value="插入记录"> </td>
</tr>
</table>
<input type="hidden" name="MM_insert" value="form1">
</form>
<p> </p>
</body>
</html>
<%
read.close();
Statementread.close();
Connread.close();
%>
------------------------------------------
Connections文件夹下
cont.jsp
------------------------------------------
<%
// FileName="mysql_jdbc_conn.htm"
// Type="JDBC" ""
// DesigntimeType="JDBC"
// HTTP="true"
// Catalog=""
// Schema=""
String MM_cont_DRIVER = "org.gjt.mm.mysql.Driver";
String MM_cont_USERNAME = "root";
String MM_cont_PASSWORD = "";
String MM_cont_STRING = "jdbc:mysql://localhost/t";
%>
你用getObject()??
那可能会出错的。
改用流来读取就不会出错了。
没遇见过,支持一下吧!
直接使用read.getString 试试看!
楼上的方法如果碰到text字段里有\0 那就只能读出一部分。
如果你的text字段里没有\0 那就没事。