2014-04-27 10 views
0

그래서 내 쿼리가 제대로 작동하지 않습니다. 또한 나는 아마 mySQL 주입을 일으킬 수있는 준비된 진술을 사용하지 않기 때문에 그것을 이해합니다. 앞으로 나아갈 때마다 문제가 발생할 때마다 오류가 발생합니다. 이것도 학교장을위한 것입니다. 일명 내 코딩 스타일은 아마도 최고 였지만 나는 그것에 대해 연구 중입니다.Java MySQL 쿼리 문제

public String newEmpInsert() { 
    return newEmpInsert; 
} 
private String newEmpInsert = "INSERT INTO empInfo" 
    + "(firstName, lastName, SSN, address, salary, pin, empLevel, contactInfo) " 
    + "VALUES ('"+firstName+"', '"+lastName+"', '"+SSN+"', '"+address+"', '"+salary+"'," 
    + "'"+pin+"', '"+empLevel+"', '"+contactInfo+"')"; 

클래스 내에서 getter 및 setter에서 설정하는 데 사용되는 모든 변수 가운데 사람의 코드는 다음

public void newEmpInsert() { 

    // SQL Connection 
    Connection conn = null; 
    try { 
     conn = MySQL_connection_test.getConnection(); 
     // Create a statement 
     Statement stmt = conn.createStatement(); 
     stmt.executeQuery(queries.newEmpInsert()); 

    } 
    catch (SQLException e) { 
     // TODO Auto-generated catch block 
     //e.printStackTrace(); 
     System.out.println("--------->>Invalid query!!!!<<--------------"); 
     System.out.println("Your query has an error, please try again!!"); 
    } 

    // Close the connection 
    //VERY IMPORTANT!! 
    finally { 
     try { 
      conn.close(); 
     } 
     catch (SQLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
      System.out.println("Database closed"); 
    } 
} 

내가 변수가 제대로 때문에 설정지고 확신 내 주에서 나는 다음과 같은 ...

public class TESTPACKAGE { 
public static void main(String[] args) { 

    //declare a new instance of the procedures 
    SqlProcedures procedures = new SqlProcedures(); 

    procedures.queries = new Queries(); 

    //use the setters 
    procedures.queries.setFirstName("Anthony"); 
    procedures.queries.setLastName("inner"); 
    procedures.queries.setSSN(123451235); 
    procedures.queries.setAddress("1300 S Farmview"); 
    procedures.queries.setSalary(18.00); 
    procedures.queries.setPin(1234); 
    procedures.queries.setEmpLevel(2); 
    procedures.queries.setContactInfo("1254569133"); 


    System.out.println(procedures.queries.getFirstName()); 
    System.out.println(procedures.queries.getLastName()); 
    System.out.println(procedures.queries.getSSN()); 
    System.out.println(procedures.queries.getAddress()); 
    System.out.println(procedures.queries.getSalary()); 
    System.out.println(procedures.queries.getPin()); 
    System.out.println(procedures.queries.getEmpLevel()); 
    System.out.println(procedures.queries.getContactInfo()); 



    //execture a query 
    procedures.newEmpInsert(); 





} 

}

WH했다 엉덩이 나는 게터를 실행하여 모든 것이 제대로 돌아가도록하고 있습니다 .. 제발 나를 도와주세요!

더 많은 코드가 필요하면 알려주세요. 포함 시키겠습니다. 나는 내가 필요한 모든 것을 포함했다고 생각한다.

다시

+1

당신이 모든 문자열 값에 작은 따옴표를 사용할 필요가' ' "+ firstName을 +"' –

+1

@AbhikChakraborty의 대답은 (모든 문자열 속성을 입력을 위해 그것을 할 필요가) 작동합니다. 문자열 연결을 사용하여 SQL 문을 더 생성하는 것은 SQL 주입 가능성을 열어 놓기 때문에 권장되지 않습니다. Prepared Statements를 대신 사용하십시오. Hibernate는 데이터베이스를 다룰 때 널리 사용되는 메커니즘이다. –

+0

@AmilWaduwawara 나는 당신과 동의한다 !! –

답변

0

당신은 결과를 반환하는 쿼리입니다 executeQuery를 사용하여 INSERT 쿼리를 실행할 수없는 모든 도움을 주셔서 감사합니다;

즉,

stmt.executeQuery(queries.newEmpInsert()); 

대신 executeUpdate을 사용해야합니다.

stmt.executeUpdate(queries.newEmpInsert()); 
+0

감사합니다 !!!! 효과가있었습니다. 아직 오류가 발생하고 있지만 여기에서 가져올 수 있어야합니다! "기본값"과 같은 MySql 오류뿐입니다. 다시 한번 감사드립니다. 내가 투표 할 수 있다면 – Ainnera