【问题标题】:Prepared Statements from text fields in java来自java中文本字段的准备语句
【发布时间】:2015-01-18 19:55:54
【问题描述】:

抱歉听起来很愚蠢..但我想创建一个准备好的语句来摆脱我的 java 项目中的注入。问题是我似乎不明白如何将文本框数据中的 int 转换为 String 并在语句中使用它。我已经研究了几个小时,但一无所获!这是我的注入代码:

 this.sql_Query = "update customer set cust_id ='" + 
     String.valueOf(txtcust_id.getText()) + ",'" + txtcust_name.getText() +
     "','" + txtf_name.getText() + "','" + txtb_date.getText() + "' , '" +
     txtcnic.getText() + "','" + txtcity.getText() + "','" +
     txtcard_num.getText() + "',,'" + txtacc_num.getText() + "',,'" +
     txtb_n.getText() + "',,'" + txtadd.getText() + "',,'" +
     txtemail.getText() + "','" + txtph_num.getText() + "' )";

这就是我把它转换成的:

String query = "INSERT INTO customers( cust_id , cust_name , father_name, birth_date, CNIC," 
            city, card_num, acc_num, bank_name, address , email, ph_num ) values (?,?,?,?,?,?,?,?,?,?,?,?);
            pst = conn.prepareStatement(query); // create a statement
            pst.setInt(1, cust_id); // set input parameter 1
            pst.setString(2, "cust_name"); // set input parameter 2
            pst.setString(3, "father_name"); // set input parameter 3
            pst.setDate(4, birth_date );
            pst.setBigint(5, CNIC);
            pst.setString(6, "city");
            pst.setBigint(7, card_num);
            pst.setBigint(8, acc_num);
            pst.setString(9, "bank_name");
            pst.setString(10, "address");
            pst.setString(11, "email");
            pst.setBigint(12, ph_num);
            pstmt.executeUpdate();

我不明白如何处理这里的整数类型的东西。 我会很感激我能得到的所有帮助,因为这让我很沮丧。

【问题讨论】:

  • 为什么要在表中插入列名?此外,您在解析为int 后调用setInt() 设置一个整数值。
  • 大多数数据库驱动程序允许在数字列上调用 setString,但您不应该依赖它。尤其是如果这是您需要验证的用户数据。

标签: java sql prepared-statement parameterized


【解决方案1】:

从 String 中获取 int 应该很简单。

只需将每个应该是 int 的字符串包装为:

pst.setInt(x, Integer.parseInt(yourVarNameHere));

为了使您的代码更健壮,您可能应该将 String 转换为 int 作为单独的验证步骤,如果传入的 String 不可解析,它将捕获 NumberFormatException。

【讨论】:

  • 所以如果我想将 cust_id 更改为字符串.. 我应该把 cust_id 放在 yourvarname 的地方吗?
  • 如果你想把cust_id字符串改成int,然后把它放在那里,是的。在您的情况下,它将是 Integer.parseInt(txtcust_id.getText())
  • 哇哦!非常感谢,它就像一个魅力.. 只是一个快速的问题.. 日期和时间也是一样的吗?
  • 是的,确实如此,这就是我现在遇到问题的原因。我不知道如何使用准备好的语句将其放入数据库
  • 自从我编写任何直接访问 JDBC 的代码以来已经有好几年了,但从文档看来,日期处理可能涉及:一个 DateFormat.parse(String) 来获取一个 java.util.Date,然后构造通过调用 java.util.Date 上的 getTime() 作为构造函数参数来生成 java.sql.Date 实例。
【解决方案2】:

您可以首先验证输入的输入是否符合条件(数字、有效范围),然后您可以将String 转换为int

Integer.parseInt(numberInString)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-23
    • 2012-12-18
    • 2018-09-05
    • 1970-01-01
    • 2021-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多