当前位置: 技术问答>java相关
工作快完了出现了问题,,关于数据库的知识.愿意献出200分
来源: 互联网 发布时间:2015-08-03
本文导语: 我做的是信息发布平台,然后用orcle保存内容 因为是图片新闻,所以没有用lob型的,而是用了varchar2 最大字节设为4000 可是在实际中经常出fe:java.sql.SQLException: 数据大小超出此类型的最大值: 2830 的错误. 好象实际中只能存...
我做的是信息发布平台,然后用orcle保存内容
因为是图片新闻,所以没有用lob型的,而是用了varchar2
最大字节设为4000
可是在实际中经常出fe:java.sql.SQLException: 数据大小超出此类型的最大值: 2830
的错误.
好象实际中只能存放2000个字节
而且问题是有时候删除一个汉字竟然少3个字节
但是如果把varchar2设为8,可以存放4个字节
faint to death!!!!!!!!!!!!!!!!!!!!!
postServlet 的原代码如下:
用jspsmart是来上传图片的
import com.jspsmart.upload.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.lang.*;
import java.sql.*;
import java.util.*;
import java.util.Date;
import java.io.*;
public class postServlet extends HttpServlet {
private String sDBDriver = "oracle.jdbc.driver.OracleDriver";
private String sConnStr = "jdbc:oracle:thin:@202.99.99.209:1521:zw";
private ServletConfig config;
final public void init(ServletConfig config) throws ServletException {
this.config = config;
}
final public ServletConfig getServletConfig() {
return config;
}
protected void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
SmartUpload mySmartUpload = new SmartUpload();
try {
mySmartUpload.initialize(config, req, res);
mySmartUpload.upload();
mySmartUpload.save(mySmartUpload.getRequest().getParameter("path"));
String title = mySmartUpload.getRequest().getParameter("title");
String content = mySmartUpload.getRequest().getParameter("content");
String picturename=mySmartUpload.getRequest().getParameter("path")+"\"+ mySmartUpload.getFiles().getFile(0).getFileName();
String postdate = mySmartUpload.getRequest().getParameter("postdate");
Class.forName(sDBDriver);
Connection conn = DriverManager.getConnection(sConnStr, "tedagov", "tedagov");
String strSQL1 = "insert into tpxwb(title,content,picturename,postdate,id,status,bureau_id) values (?,?,?,?,seq_id.nextval,'publishing',22)";
PreparedStatement prestmt = conn.prepareStatement(strSQL1);
prestmt.setString(1, title);
prestmt.setString(2, content);
prestmt.setString(3, picturename);
prestmt.setString(4, postdate);
prestmt.executeUpdate();
prestmt.close();
conn.close();
} catch (java.sql.SQLException fe) {
System.err.println("fe:" + fe);
} catch (java.lang.ClassNotFoundException de) {
System.err.println("de:" + de.getMessage());
} catch (com.jspsmart.upload.SmartUploadException e) {
System.err.println("e:" + e.getMessage());
}
RequestDispatcher dispatcher = this.getServletContext().getRequestDispatcher("/servlet/listTitleServlet");
dispatcher.forward(req, res);
}
public void destroy() {
}
}
因为是图片新闻,所以没有用lob型的,而是用了varchar2
最大字节设为4000
可是在实际中经常出fe:java.sql.SQLException: 数据大小超出此类型的最大值: 2830
的错误.
好象实际中只能存放2000个字节
而且问题是有时候删除一个汉字竟然少3个字节
但是如果把varchar2设为8,可以存放4个字节
faint to death!!!!!!!!!!!!!!!!!!!!!
postServlet 的原代码如下:
用jspsmart是来上传图片的
import com.jspsmart.upload.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.lang.*;
import java.sql.*;
import java.util.*;
import java.util.Date;
import java.io.*;
public class postServlet extends HttpServlet {
private String sDBDriver = "oracle.jdbc.driver.OracleDriver";
private String sConnStr = "jdbc:oracle:thin:@202.99.99.209:1521:zw";
private ServletConfig config;
final public void init(ServletConfig config) throws ServletException {
this.config = config;
}
final public ServletConfig getServletConfig() {
return config;
}
protected void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
SmartUpload mySmartUpload = new SmartUpload();
try {
mySmartUpload.initialize(config, req, res);
mySmartUpload.upload();
mySmartUpload.save(mySmartUpload.getRequest().getParameter("path"));
String title = mySmartUpload.getRequest().getParameter("title");
String content = mySmartUpload.getRequest().getParameter("content");
String picturename=mySmartUpload.getRequest().getParameter("path")+"\"+ mySmartUpload.getFiles().getFile(0).getFileName();
String postdate = mySmartUpload.getRequest().getParameter("postdate");
Class.forName(sDBDriver);
Connection conn = DriverManager.getConnection(sConnStr, "tedagov", "tedagov");
String strSQL1 = "insert into tpxwb(title,content,picturename,postdate,id,status,bureau_id) values (?,?,?,?,seq_id.nextval,'publishing',22)";
PreparedStatement prestmt = conn.prepareStatement(strSQL1);
prestmt.setString(1, title);
prestmt.setString(2, content);
prestmt.setString(3, picturename);
prestmt.setString(4, postdate);
prestmt.executeUpdate();
prestmt.close();
conn.close();
} catch (java.sql.SQLException fe) {
System.err.println("fe:" + fe);
} catch (java.lang.ClassNotFoundException de) {
System.err.println("de:" + de.getMessage());
} catch (com.jspsmart.upload.SmartUploadException e) {
System.err.println("e:" + e.getMessage());
}
RequestDispatcher dispatcher = this.getServletContext().getRequestDispatcher("/servlet/listTitleServlet");
dispatcher.forward(req, res);
}
public void destroy() {
}
}
|
一个汉字多少个字节,
是要看你的数据库的字符集的!
好像GBK有三个字节的情况,记不太清楚了,你咨询oracle吧!
smartUpload我用过,没问题!
是要看你的数据库的字符集的!
好像GBK有三个字节的情况,记不太清楚了,你咨询oracle吧!
smartUpload我用过,没问题!
|
为什么不用blob clob nclob 这些这些存储大对象的数据类型来保存图片等的数据呢。
|
类型改成blob吧
很好用的
很好用的
|
如果不考虑字节长度限制!
try to use NVARCHAR2
try to use NVARCHAR2
|
强烈建议用blob,因为varchar2在数据很大的时候总出怪问题
|
保存图片用blob是最好的。
|
一条记录最多只能保存8000个字节,也就是4000个汉字,一个字段最多保存4000个字节,也就是2000个汉字,看看你的一条记录的总长度吧,可能是这方面的问题,
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。