0

私には2つの問題がありますが、現在は1つだけ修正に取り組んでいます。331行目のプログラムで実行すると、SQLステートメントにエラーがあるというエラー( catchステートメント)が表示されます。それは他のもの(私が見るもの)と同一であり、私はエラーを見ていません。これがエラーを出すセクションの抜粋です。他のセクションと同じように、mysqlデータベースを更新できるはずです。これはエラーです。どこを見ればいいですか?何かが正しく投稿されませんでした、私もそれを見ています、ごめんなさい。

    //String st = "DELETE FROM student WHERE Description = 'Michael'";
    // String st = “UPDATE student SET Description = + ‘Michael’ WHERE studentID = ‘123’”;
    String studentID;
    String firstName;
    String lastName;
    double gpa;
    String status;
    String mentor;
    String level;
    String thesisTitle;
    String thesisAdvisor;
    String company;

    Scanner in = new Scanner(System.in);

    // print statements to match the database input 

    System.out.println("Now let's update a record");
    System.out.println("Please enter the student ID of the record you want to update >");
    studentID = in.next();
    System.out.println("Please enter the new First Name >");
    firstName = in.next();
    System.out.println("Please enter the new Last Name >");
    lastName = in.next();
    System.out.println("Please enter the new GPA[X.XX] >");
    gpa = in.nextDouble();
    System.out.println("Please enter the new Status [Active or Inactive] >");
    status = in.next();
    System.out.println("Please enter the new mentor >");
    mentor = in.next();
    System.out.println("Please enter the new level >");
    level = in.next();
    System.out.println("Please enter the new thesis Title >");
    thesisTitle = in.next();
    System.out.println("Please enter the new thesis Advisor's name >");
    thesisAdvisor = in.next();
    System.out.println("Please enter the new Company Name >");
    company = in.next();




//      stmt.executeUpdate("Update student Set studentID='" + studentID + "', firstName='" + firstName + "', lastName='" + lastName + "', gpa=" + gpa + "', status='" + status + "', mentor='" + mentor  + "', level='" + level + "', theseisTitle='" + thesisTitle + "', thesisAdvisor='" + thesisAdvisor + "', company='" + company + "WHERE studentID = '" + studentID + " '");





    stmt.executeUpdate("Update student Set studentID='" + studentID + "',firstName'" + firstName + "', lastName='" + lastName + "', gpa=" + gpa + "', status='" + status + "', mentor='" + mentor  + "', level='" + level + "', theseisTitle='" + thesisTitle + "', thesisAdvisor='" + thesisAdvisor + "', company='" + company + "WHERE studentID = '" + studentID + " '");

    // Close the statement and the connection

    stmt.close();
    conn.close();

} catch (Exception e) {
    System.err.println("ERROR: Either cannot connect to the DB " + " or error with the SQL statement");
}
4

3 に答える 3

1

私が見る1つの問題は、でが欠落していること=ですfirstName'" + firstName +

于 2012-11-19T02:44:37.117 に答える
1

クエリの問題の1つは、で構文エラーが発生することです。firstname

stmt.executeUpdate("Update student 
                    Set studentID='" + studentID + "',
                        firstName'" + firstName + "',                                          
                                 ^ here

もう1つは、で脆弱ですSQL injection。クエリをパラメータ化してくださいPreparedStatement、例を使用してください

String updateQuery = ""
        + "UPDATE student "
        + "SET    firstname = ?, "
        + "       lastname = ?, "
        + "       gpa = ?, "
        + "       status = ?, "
        + "       mentor = ?, "
        + "       level = ?, "
        + "       theseistitle = ?, "
        + "       thesisadvisor = ?, "
        + "       company = ? "
        + "WHERE  studentid = ? ";

PreparedStatement pstmt = con.prepareStatement(updateQuery);
pstmt.setString(1,firstName)
pstmt.setString(2,lastName)
pstmt.setInt(3,gpa)
pstmt.setString(4,status)
pstmt.setString(5,mentor)
pstmt.setString(6,level)
pstmt.setString(7,thesisTitle)
pstmt.setString(8,thesisAdvisor)
pstmt.setString(9,company)
pstmt.setString(10,studentID)

なぜ使用するのPreparedStatementですか?

  • から保護するSQL Injection
  • から保護するSQL Injection
  • 特に大きなクエリがある場合にコードを読みやすくするため

ソース

于 2012-11-19T02:46:40.520 に答える
0

WHERE句の直前で、companyを追加した後に終了引用符を省略しました。

于 2012-11-19T02:44:53.360 に答える