【问题标题】:Inserting files file path in MySQL via Java通过Java在MySQL中插入文件文件路径
【发布时间】:2012-12-02 16:55:00
【问题描述】:

我的 java 程序从文本字段中收集文件路径:

pathField.getText();

并将结果插入我的数据库 (phpMyAdmin)。但是,它似乎不包括反斜杠()。 EG - C:UsersSteveDesktop

数据库中的 FilePath 字段设置为“文本”。 我已经在System.out 语句中测试了pathField.getText(),它使用反斜杠打印。

Statement st = (Statement) conn.createStatement();

            String query_to_update = "INSERT INTO `evidence_db`.`mcases` ("
                    + "`PID`,"
                    + " `FilePath`) "
                    + "VALUES ("
                    + "DEFAULT,"
                    + " '" + pathField.getText() + "');";

            System.out.println("Query: " + query_to_update);

            int val = st.executeUpdate(query_to_update);

请注意,我已经编辑了上面的代码,所以可能会有一些小错误。

【问题讨论】:

  • 你在使用preparedStatement吗?您的部分代码会有所帮助
  • Java 中的 My SQL 语句是一个字符串。然后通过以下方式发送:st.executeUpdate(query);
  • 你能把你的代码贴在这里吗?
  • 顺便说一句 / 是一个正斜杠。在将它们插入 MySQL 之前,您可能必须转义它们。反斜杠是肯定的,而不是正斜杠。无论哪种方式,您都可以使用反斜杠 `\` 转义斜杠
  • 如果您使用准备好的语句,他们可能会为您处理转义。

标签: java mysql phpmyadmin


【解决方案1】:

你应该使用准备好的语句来避免这种错误

public static void main(String args[]) {

  Connection con = null;
  PreparedStatement pst = null;
  ResultSet rs = null;

  try {

  Class.forName(driver);
  con = DriverManager.getConnection(connection);

  String sql =
  "select * from Employees where FirstName " + "in(?,?,?)";
  pst = con.prepareStatement(sql);

  pst.setString(1, "komal");
  pst.setString(2, "ajay");
  pst.setString(3, "santosh");

  rs = pst.executeQuery();
  System.out.println("EmployeeID\tFirstName");
  while (rs.next()) {
  System.out.print("  "+rs.getString(1));
  System.out.print("\t\t"+rs.getString(2));
  System.out.println("\t\t"+rs.getString(3));
  }

  } catch (Exception e) {
  System.out.println(e);
  }
  }
} 

在你的情况下

String query_to_update = "INSERT INTO `evidence_db`.`mcases` ("
                    + "`PID`,"
                    + " `FilePath`) "
                    + "VALUES (?,?);";

PreparedStatement pst=coneection.prepareStatement(query_to_update);
pst.setString(1,"DEFAULT");
pst.setString(2,pathField.getText());
pst.executeUpdate();

【讨论】:

  • 澄清一下,setString 方法是否设置了允许插入该字段的字符数量 - 从而停止 sql 注入?
  • 不,不会,如果使用setString 方法设置的字符数超过该字段的大小,您将获得该字段的limit exceeded error
  • @StevenMclaren : 同意 abu,错误将由你 mysql offcourse 产生
  • @BhavikShah - 这些值是否需要输入两次?一个在 query_to_update (?,?) 中,再一次到 .setString?
  • @StevenMclaren:不应该保持原样
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-30
  • 2022-10-24
  • 2019-05-24
相关资源
最近更新 更多