2017-03-31 11 views
0

私は自分のクラスファイルにメソッドを作成しましたが、SQLデータベースにデータを挿入しました。SQL Prepared Statement&returned type

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

んが、彼らがいないじゃないんです。 '' PreparedStatement''に文字列を設定するときに '' '文字を追加することは想定されていませんが、実際の値にそれらを含める必要はありません。 – Kayaman

+0

メソッドでCarオブジェクトを返すには、Carクラスのインスタンスを作成して返す必要があります。それは簡単です。車c =新しい車();戻り値c; –

+0

これを変更するには何が必要ですか? – user3079838

答えて

1

これはあなたの質問の最終的な答えではなく、私のコメントを明確にすることです。

あなたの方法はCarオブジェクトを返すようにしたい場合は、クラスの車のインスタンスを作成し、それを返す必要があります:

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

関連する問題