2017-03-31 7 views
0

방금 ​​내 클래스 파일에 메서드를 만들었고 SQL 데이터베이스에 데이터를 삽입 했습니까?SQL 준비 문 및 반환 형식

1)이 준비된 문구는 정확합니까? 2) 방법에 대한 유형 차량을 반환해야합니다 (이 작업은 어디에서 수행 할 수 있습니까). ..... 나는 순간에 얻을 오류는 방법은 메서드를 호출

public Car addVehicle(String aLicense, int aJourneys, String aUsername, String aPassword) { 
    Car c = new Car(); 
    try { 

     Class.forName("com.mysql.jdbc.Driver"); 
     Connection conn = DriverManager.getConnection(url + dbName, userName, password); 
     statement = conn.createStatement(); 
     String query = " insert into eflow.registration (cLicense, cJourneys, cUsername, cPassword)" 
       + " values (?, ?, ?, ?)"; 

     PreparedStatement preparedStmt = conn.prepareStatement(query); 
     preparedStmt.setString(1, aLicense); 
     preparedStmt.setInt(2, aJourneys); 
     preparedStmt.setString(3, aUsername); 
     preparedStmt.setString(4, aPassword); 

     preparedStmt.execute(); 

     conn.close(); 

    } catch (Exception e) { 
     System.err.println("Got an exception!"); 
     System.err.println(e.getMessage()); 

    } 
    return c; 

} 

(자동차 클래스 파일의 이름입니다) 방법이 아니라고 오류를 반환하는 형식의 자동차를 반환해야합니다이므로 인수에 적용

//int addingID = Integer.parseInt(enteringID.getText()); 
       String addingReg = enteringReg.getText(); 
       int addingJourneys = Integer.parseInt(enteringJourneys.getText()); 
       String addingUsername = enteringUsername.getText(); 
       @SuppressWarnings("deprecation") 
       String addingPassword = enteringPassword.getText(); 
       Car newCar = new Car(addingReg, addingJourneys, addingUsername, addingPassword); 
       int addStatus = myCar.addVehicle(newCar); 
       if (addStatus == 1) { 
        JOptionPane.showMessageDialog(null, "Vehicle Added"); 
        enteringID.setText("(eg. 1-999)"); 
        enteringReg.setText("(eg. - 162-MH-749)"); 
        enteringJourneys.setText("(eg. 7)"); 
        enteringUsername.setText("(eg. - [email protected])"); 
        enteringPassword.setText(""); 
       } 

       else { 
        JOptionPane.showMessageDialog(null, "Error, Please Try Again"); 
       } 
      } catch (Exception f) { 
       JOptionPane.showMessageDialog(null, "Error, Please Try Again"); 
      } 
     } 
    }); 
+2

없음가 아니에요. 하나의 경우 String을'PreparedStatement'로 설정할 때'''문자를 추가하지 않아야합니다. 실제 값에 포함시키지 않으려면 그렇지 않습니다. – Kayaman

+0

메소드에서 Car 객체를 반환하려면 Car 클래스의 인스턴스를 만들어 반환해야합니다. 그것은 쉽습니다. 자동차 c = 새로운 자동차(); c를 돌려 보내라. –

+0

변경하려면 어떻게해야합니까? – user3079838

답변

1

이 질문에 대한 최종 대답은 아니지만 내 의견을 명확히하기 위해. 당신이 당신의 방법은 자동차 개체를 반환하려면

, 당신은 클래스 자동차의 인스턴스를 생성하고 그것을 반환해야합니다 :

public Car addVehicle(String aLicense, int aJourneys, String aUsername, String aPassword) { 
try {   
    Class.forName("com.mysql.jdbc.Driver"); 
    Connection conn = DriverManager.getConnection(url + dbName, userName, password); 
    statement = conn.createStatement(); 
    String query = " insert into eflow.registration (cLicense, cJourneys, cUsername, cPassword)" 
      + " values (?, ?, ?, ?)"; 

    PreparedStatement preparedStmt = conn.prepareStatement(query); 
    preparedStmt.setString(1, "'" + aLicense + "'"); 
    preparedStmt.setInt(2, aJourneys); 
    preparedStmt.setString(3, "'" + aUsername + "'"); 
    preparedStmt.setString(4, "'" + aPassword + "'"); 

    preparedStmt.execute(); 

    conn.close(); 

    Car c = new Car(); 
    //Do anything with the car object that you like. 
    //for example: c.setColor("blue"); 
    return c; 

} catch (Exception e) { 
    System.err.println("Got an exception!"); 
    System.err.println(e.getMessage()); 
    //kayaman is correct here: we still need to return something here in order to be able to compile 
    return null; 
} 
+0

정확하게 고맙습니다. –

+0

아무에게도 데이터베이스에 문자열을 전달해야하는 방법에 대한 조언이 있습니까? – user3079838

0

별도의 논리를! 당신이 그것을 필요로하는 곳에

사용이 클래스는 연결을 검색 없습니다 :

public class DatabaseConnection 
{ 
    private static final String CONN_URL = "some connection url"; 
    private static Connection instance = null; 

    static 
    { 
     try 
     { 
      Class.forName("com.mysql.jdbc.Driver"); 
     } 
     catch (ClassNotFoundException e) 
     { 
      e.printStackTrace(); 
     } 
    } 

    public static synchronized Connection getInstance() throws SQLException 
    { 
     if (instance == null) 
     { 
      instance = DriverManager.getConnection(CONN_URL); 
     } 
     return instance; 
    } 
} 

이 같은 함수에 사용 :

public Car addVehicle(String aLicense, int aJourneys, String aUsername, String aPassword) 
{ 
    String sql = "insert into eflow.registration (cLicense, cJourneys, cUsername, cPassword) values (?, ?, ?, ?)"; 

    try (Connection conn = DatabaseConnection.getInstance(); PreparedStatement prepStatement = conn.prepareStatement(sql)) 
    { 
     Car successfulAdd = new Car(); 

     prepStatement.setString(1, aLicense); 
     prepStatement.setInt(2, aJourneys); 
     prepStatement.setString(3, aUsername); 
     prepStatement.setString(4, aPassword); 

     if (prepStatement.execute()) 
     { 
      return successfulAdd; 
     } 
    } 
    catch (SQLException e) 
    { 
     e.printStackTrace(); 
    } 
    return null; 
} 
+0

내 질문에 다른 클래스를 추가했습니다. 누군가가 어시스트 할 수있는 경우 데이터베이스에 쓰는 방법을 호출했습니다. – user3079838

+0

@ user3079838 데이터베이스에 추가 대기 중입니까? 너 이미 해본 적있어? – user218046

+0

메소드의 정보에 다른 클래스에서 추가 한 문자열 등이 필요합니다. 나는 지금 일하도록하고있다. 당신의 도움을 주셔서 감사합니다 – user3079838