public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
String title = request.getParameter("title");
String content = request.getParameter("content");
String category = request.getParameter("category");
int cid = Integer.parseInt(category); System.out.println(title);
System.out.println(content);
System.out.println(cid);
DataSource ds = null;
try {
InitialContext context = new InitialContext();
ds = (DataSource) context.lookup("java:comp/env/jdbc/MBlog");
long end = System.currentTimeMillis();
            System.out.println("end-start");             //测试连接数据库时间 } catch (Exception e) {
System.out.println("获取数据源失败!");
}
try {
Connection conn = ds.getConnection();
if(conn==null)
{
System.out.println("连接失败");
}
else{
System.out.println("连接成功!");
}
String sql = "insert into blog(cat_id,title,content,created_time)values(?,?,?,'2010-12-01')";
PreparedStatement pstm = conn.prepareStatement(sql);

pstm.setInt(1, cid);
pstm.setString(2, title);
pstm.setString(3, content);

int result = pstm.executeUpdate();
System.out.println(result);
} catch (SQLException e) {
e.printStackTrace();
}
}问题:jsp页面中的textarea文本框中,输入了两行数据
title:测试
content:再测试
        一遍
cid:    1执行完数据库操作后为什么content字段只有插入了“再测试”这一行数据呢?也就是说换行数据没有插入到数据库中,我哪写错了!

解决方案 »

  1.   

    发一下JSP中文本域组件的代码  看看哇PS:你可以在插入数据库之前System.out.println(content);
    就可以知道是页面值拿错了 还是 插入数据库出错了
      

  2.   

    <form id="form1" name="form1" method="post" action="/blog/servlet/BlogServlet">
      <table width="828" border="0">
        <tr>
          <td width="79">主题:</td>
          <td width="739"><label>
            <input type="text" name="title" id="textfield" />
          </label></td>
        </tr>
        <tr>
          <td>类别:</td>
          <td><select name="category">
            <option value="1">心情故事</option>
            <option value="2">旅游故事</option>
          </select></td>
        </tr>
        <tr>
          <td>内容:</td>
          <td><label>
            <textarea name="content" cols="100" rows="6" id="content"></textarea>
            
            
          </label></td>
        </tr>
        <tr>
          <td><label>
            <input type="reset" name="button" id="button" value="重置" />
          </label></td>
          <td><label>
            <input type="submit" name="button2" id="button2" value="提交" />
          </label></td>
        </tr>
        <tr>
          <td>&nbsp;</td>
          <td>&nbsp;</td>
        </tr>
        <tr>
          <td>&nbsp;</td>
          <td>&nbsp;</td>
        </tr>
      </table>
    </form>上面是jsp的form加了
    pstm.setInt(1, cid);
    pstm.setString(2, title);
    System.out.println(content);
    pstm.setString(3, content);
    是多行数据,但是执行数据库操作时就进去一行数据
      

  3.   

    这个问题 是因为 你的多行文本 有回车 也就是 \r\n的字符,这个字符在数据库里如果组装成 sql语句就会出现这种问题,这是textarea的bug,你可以 在后台 用replace先过滤r\n的字符,这个字符 你直接打印控制台 是看不到的。
      

  4.   

    你用的是什么数据库,如果是mysql把相应的字段类型设置成text,如果是oracle设置成Clob
      

  5.   

    content.replace('\n','~');
    content.replace('\r','~');
    把读到的字符串里面的\n\r用一个用不到的特殊字符替代,然后以后从数据库读出来的时候在反过来调用替换回去
      

  6.   

    读出来仍然是个字符串吗  在replace('~','\n');
    不然你就换个其它的文本域组件试一下
      

  7.   

    java语法取值代回车的一定要替换掉,js取值的时候可以不用.我做过测试,但是具体的原因不知道,还在研究中
      

  8.   

    多设置几个断点,debug模式运行,跟踪下你要的那几个参数,看看哪一步数据没有取到。加油!
      

  9.   

    强烈建议java程序员不要用sql server
      

  10.   

    数据库用text或者ntext
    我没有遇到换行就报错的问题
    只有使用一些编辑器的时候才会有一些特殊字符串的问题
      

  11.   

    servlet里把字符串打印一下我估计你取的时候就少了是不是有单引号这样的非法字符
      

  12.   

    因为sqlserver是微软专门为他的c#设计的,不是为sun等公司设计的,其他公司要想用他必须考虑兼容性而且微软的大多东西都不是开源的....觉得可以就给个分,建议不要用sqlserver