予欢411 2024-07-05 18:55 采纳率: 0%
浏览 3

使用getparameter读出来全是问号


<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Connection"%>
<%@ page language="java" contentType="textcml;charset=UTF-8"
         pageEncoding="UTF-8"%>
<html>
<body>
<%
//   try {
//      tagAdd obj = new tagAdd(); // 实例化包含 delete 方法的类
//
//      // 调用 delete 方法,并传入 request 和 response 参数
//      obj.delete(request, response);
//   } catch (SQLException e) {
//      // 处理 SQLException 异常
//      e.printStackTrace();
//   } catch (ClassNotFoundException e) {
//      // 处理 ClassNotFoundException 异常
//      e.printStackTrace();
//   }
   Class.forName("com.mysql.jdbc.Driver");
   String url = "jdbc:mysql://localhost:3306/baijiu?useUnicode=true&characterEncoding=utf-8";
   String user = "root";
   String password = "123456";
   Connection conn = DriverManager.getConnection(url, user, password);
   String getTname=request.getParameter("DTname");
   System.out.println(getTname);
   request.setCharacterEncoding("UTF-8");
   response.setCharacterEncoding("UTF-8");
   if (conn == null) {
      System.out.println("连接失败");
   } else {
      System.out.println("success");
      String sql="delete from tag where TName=?";
      PreparedStatement ps = conn.prepareStatement(sql);
      //给占位符赋值
      ps.setString(1, getTname);
      System.out.println(sql);
      if (ps.executeUpdate() >= 0) {
         System.out.println("success");
      } else {
         System.out.println("fail");
      }
      conn.close();
   }
%>

</body>
<html>

使用这个函数对数据库删除读出来都是问号,运行结果如图

img

  • 写回答

1条回答 默认 最新

  • 一只小爪磕 前端领域新星创作者 2024-07-05 23:38
    关注

    您好题主!
    🍭本答案参考GPT-4o,由爪磕整理并总结,希望对您有所帮助!


    从你的代码和运行结果来看,出现问号的问题可能是由于字符编码和读取顺序的问题。你在读取 request.getParameter("DTname") 之前设置了字符编码,这样设置字符编码应该在读取参数之前完成。

    请尝试以下步骤来解决这个问题:

    1. 设置请求和响应的字符编码应在读取参数之前。
    2. 确保你在 HTML 表单中提交的内容也是以 UTF-8 编码提交的。

    修改后的代码如下:

    <%@page import="java.sql.ResultSet"%>
    <%@page import="java.sql.PreparedStatement"%>
    <%@page import="java.sql.DriverManager"%>
    <%@page import="java.sql.Connection"%>
    <%@ page language="java" contentType="text/html;charset=UTF-8"
             pageEncoding="UTF-8"%>
    <html>
    <body>
    <%
       request.setCharacterEncoding("UTF-8");  // 设置请求的字符编码
       response.setCharacterEncoding("UTF-8");  // 设置响应的字符编码
    
       Class.forName("com.mysql.jdbc.Driver");
       String url = "jdbc:mysql://localhost:3306/baijiu?useUnicode=true&characterEncoding=utf-8";
       String user = "root";
       String password = "123456";
       Connection conn = DriverManager.getConnection(url, user, password);
       String getTname = request.getParameter("DTname");
       System.out.println(getTname);  // 打印读取的参数
    
       if (conn == null) {
          System.out.println("连接失败");
       } else {
          System.out.println("success");
          String sql = "delete from tag where TName=?";
          PreparedStatement ps = conn.prepareStatement(sql);
          // 给占位符赋值
          ps.setString(1, getTname);
          System.out.println(sql);
          if (ps.executeUpdate() >= 0) {
             System.out.println("success");
          } else {
             System.out.println("fail");
          }
          conn.close();
       }
    %>
    </body>
    </html>
    

    另外,确保你的 HTML 表单也使用 UTF-8 编码提交数据:

    <form method="post" action="your_jsp_file.jsp" accept-charset="UTF-8">
        <input type="text" name="DTname">
        <input type="submit" value="Submit">
    </form>
    

    这样设置后,字符编码应该被正确处理,读取的参数也不应该是问号了。希望这能解决你的问题。

    评论

报告相同问题?

问题事件

  • 创建了问题 7月5日

悬赏问题

  • ¥15 35114 SVAC视频验签的问题
  • ¥15 impedancepy
  • ¥15 在虚拟机环境下完成以下,要求截图!
  • ¥15 求往届大挑得奖作品(ppt…)
  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见