2016-07-02 9 views
1

私の主キーがcourse_codeであり、それは "SLIOP-P-001" のようなパターン(SLIOP-SUBJECT INITIAL-NUMBER)を持っているjavaを使用してmysqlテーブルの次の値を生成するには?もちろんテーブルで

生成]ボタンをクリックしたときに、私はSLIOP-P-002を生成する必要があります。

誰かが私にこれをコード化する方法を案内できますか?

プロジェクトスクリーンショットを添付しました。以下のレコードを入力しました。 enter image description here

私は以下のコードを試しました。しかし、それは動作しません。

private void generate_course_codeActionPerformed(java.awt.event.ActionEvent evt) {              
    String c_code=course_catergory.getSelectedItem().toString(); 

    if(c_code=="Printing"){ 
     try { 

    pst.executeUpdate("INSERT INTO course (course_code)VALUE(?)",Statement.RETURN_GENERATED_KEYS); 

     rs = pst.getGeneratedKeys(); 

     if (rs.next()) { 
      cour_code.setText(rs.getString(1)); 
     } 

     } 


    catch(Exception e){ 
     //JOptionPane.showMessageDialog(null,"Error occured","Error",JOptionPane.ERROR_MESSAGE); 
     JOptionPane.showMessageDialog(null,e); 
    } 
     } 
}   
+0

あなたは試みましたか?あなたはその過程でどこにいるのですか?あなたのコードを共有して問題の原因を説明すると、より役立つ回答が得られます。 – 4castle

+0

これは 'getGeneratedKeys'がどのように動作するかではありません。 1つは、値を指定せずにパラメータのプレースホルダを使用して挿入を実行しようとしています。これは動作しません。また、あなたのデータベースが現在そのコードを生成していることはありません(もしそうなら、そのコードも表示する必要があります)! –

答えて

1

このようなパターンを自動的に作成する方法については気づきません。しかし、このようなキーを生成する一つの退屈な方法は以下の通りです:

  1. はcourse_codeのエントリを挿入し

    CREATE TABLE course (
        id int NOT NULL AUTO_INCREMENT, 
        course_code CHAR(7) NOT NULL, 
        PRIMARY KEY (id) 
    ); 
    
  2. テーブルを作成します。

    PreparedStatement pst = connection.prepareStatement("INSERT INTO course (course_code) VALUES (?)"); 
    pst.setString(1, "SLIOP-P"); 
    pst.executeUpdate(); 
    // close pst 
    

    これはcourse_codeを挿入します接尾辞として使用することができる新しい整数値idを生成します(下記参照)。

  3. ご希望course_codeのための選択クエリを実行します。

    PreparedStatement pst2 = connection.prepareStatement("select * from course where course_code = ?"); 
    pst2.setString(1, "SLIOP-P"); // this is an example; pass anything 
    ResultSet rs = pst2.executeQuery(); 
    String courseCode = null; 
    if (rs.next()) { 
        courseCode = rs.getString("course_code") + "-" + String.format("%03d", rs.getInt("id")); 
    } 
    
  4. 戻り、このコースコードをあなたの方法から:あなたは私に言わせれば

    return courseCode; 
    

しかし、より良い方法がありますすべての可能なコースコードをマップに格納する。要件がない場合を除きます。

+0

ありがとうございます。コードを実行すると、「フィールド 'カテゴリ'にデフォルト値がありません」というポップアップが表示されます。なぜこのエラーが発生するのですか? – lakshi

+0

このエラーメッセージはどこに届きますか? – ujulu

+0

[Generate]ボタンをクリックしてプログラムを実行します。 – lakshi

関連する問題