【问题标题】:Insert variable table name in jsp在jsp中插入变量表名
【发布时间】:2012-11-14 21:29:53
【问题描述】:

我正在尝试向表中插入一条记录,我以 html 形式选择...我可以在 jsp 中使用类似的东西吗?

String queryString = "INSERT INTO ? (login,password,full_name,ulevel) VALUES (?, ?, ?, ?)";

【问题讨论】:

  • IIRC 位置值用于值。如果正确的话,你不能只检查表名并使用字符串连接,如果可以的话?
  • 那么您的建议是什么? :) 对不起,我不明白你..
  • 使用 concatenate 合并所有字符串。
  • 如果 Java 代码错误地写入 JSP 文件而不是 Java 类时出现问题,这不会成为 JSP 问题。换句话说,JSP 与问题完全无关。在使用main() 方法的普通Java 应用程序类中这样做时,您会遇到完全相同的问题。而是在 Java/JDBC 上下文中提出问题。

标签: html mysql forms jsp insert


【解决方案1】:

主要答案 如果你想使用 JDBC,我同意它可能是这样的,你可以试试这个:

<% String myquery = "SELECT * FROM EMPLOYEES WHERE DEPARTMENT = ?"; %>
<% PreparedStatement mystatement = connection.prepareStatement(myquery); %>
<% mystatement.setString(1, request.getParameter("myURLparam")); %>
<% ResultSet results= mystatement.execute(); %>

您可以参考此链接了解如何使用它。 Java Oracle 有更好的例子:http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html

上一个答案: 使用字符串格式

Java 示例:

String fs;
fs = String.format("The value of the float " +
               "variable is %f, while " +
               "the value of the " + 
               "integer variable is %d, " +
               " and the string is %s",
               floatVar, intVar, stringVar);

http://docs.oracle.com/javase/tutorial/java/data/strings.html - 检查底部。

将其应用于 JSP。

<html>
    <head>
      <title>Concatenate String in JSP</title>
    </head>
    <body bgcolor="#fff">
        <% String tableName = "Table"; %>
        <% String login = "login"; %>
        <% String password = "myPassword"; %>
        <% String fullName = "Full Name"; %>
        <% String ulevel = "Level 1"; %>
        <% String msg = "INSERT INTO " + tableName + " (login,password,full_name,ulevel) VALUES ("+ login + ", "+password+","+fullName+", "+ulevel+")"; %>
        <% out.println(msg); %>
    </body>
</html>

【讨论】:

  • 我使用了这个:"INSERT INTO " + tableNameVariable + "......" 它显示错误...
  • 在此示例中,您可以在此页面的任何位置传输msg 变量。虽然我给出了答案,但是你需要在jsp中查询什么?查询不应该在 servlet 中编程吗?
  • OP 试图对至少列值使用准备好的语句查询,但您建议回退到字符串连接(未加引号!)变量,这只会增加 SQL 注入风险?为什么?
【解决方案2】:

我有:

<%
String login = request.getParameter("login");
String password = request.getParameter("password");
String full_name = request.getParameter("full_name");
String ulevel = request.getParameter("ulevel");
String team_id = request.getParameter("team_id");
String fs = String.format("insert into " + "%s " + "(login,password,full_name,ulevel) values " + "(%s,%s,%s,%s)", team_id, login, password, full_name, ulevel);

Connection connection = null;
PreparedStatement pstatement = null;
Class.forName("com.mysql.jdbc.Driver").newInstance();
int updateQuery = 0;
if (login != null && password != null && full_name != null && ulevel != null && team_id != null) {
    if (login != "" && password != "" && full_name != "" && ulevel != "" && team_id != "") {

        try {
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/coding", "root", "root");
            pstatement = connection.prepareStatement(fs);
            pstatement.setString(1, login);
            pstatement.setString(2, password);
            pstatement.setString(3, full_name);
            pstatement.setString(4, ulevel);
            updateQuery = pstatement.executeUpdate();
            if (updateQuery != 0) {

                response.sendRedirect("index.jsp");



            }
        } catch (Exception ex) {
            out.println("Unable to connect to database.");
            } finally {
            pstatement.close();
            connection.close();
        }
    }
}

%>

参数login,password,full_name,ulevel,team_id来自其他源代码的html表单..

但这不起作用:/

【讨论】:

  • 问题出在Connection 而不是字符串。如果你打算使用out.print(fs),它可以工作。让我试着解决它,等一下……
  • 您可能需要在代码的第一行包含&lt;%@ page import="java.sql.*" %&gt;。之后,请确保您已将 JDBC 驱动程序安装为库。您可以发布您遇到的错误吗?
猜你喜欢
  • 1970-01-01
  • 2023-04-10
  • 2013-08-07
  • 1970-01-01
  • 1970-01-01
  • 2011-08-21
  • 2014-05-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多