問題:をぶら下げ
Iデータベースに接続するいくつかのコードは、レコードが基準に基づいて発見されたかどうかを確認してい、レコードが見つかった場合は3を返し、ユーザーがこれらの詳細を持つレコードがすでに存在すると言うメッセージを生成します。レコードがまだ存在しない場合は、挿入クエリを実行してレコードを作成します。
2番目に短い時間連続して実行されたselectクエリは、結果がレコードが見つかったときにハングしているようです(戻り値3、ユーザーにメッセージを出力します)。エラーが報告されず、プログラムのGUIが応答しなくなります(他のオブジェクトをクリックすることができず、ウィンドウを閉じるのに応答しません)。 Netbeansはまだ正常に動作しており、私はそのプログラムの実行を停止することができます。
テスト:
A)私は私の最初の実行が成功した後、同じデータベース上の別のクエリを実行するが、別のテーブルの上に、コードが正しく実行されますが、元のクエリを試してみて、実行するために戻った場合再びハングアップします。
B)コードを実行して結果を戻しても、コードは実行されません。 (下のコードを参照してください)
C)SE上の他の同様の質問のスキャンをしましたが、私の問題の解決策を見つけることができないようです。
使用の資源: ucanaccess-2.0.9.3、NetBeans IDEの8.1、JDK 1.8(起因する会社では、旧バージョンとの互換性の問題に1.6にコンパイル)、MS Accessデータベース、企業ネットワーク上の
コード:
public int insertAddPeriod(String strProjectNumber, String strYear, String strPeriod){
System.out.println("Checking to see if record already exists: " + strProjectNumber + ", Year: " + strYear + ", Period: " + strPeriod);
String strSQLString = null;
try{
strSQLString = "SELECT Program_No, Year, Period FROM tblCost WHERE Program_No = ? AND Year = ? AND Period = ?";
//SETTING PREPARED STATEMENT
PreparedStatement preStatement = con.prepareStatement(strSQLString, ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
//SETTING FIRST CONDITION OF PREPARED STATEMENT IE ?
preStatement.setString(1, strProjectNumber);
preStatement.setString(2, strYear);
preStatement.setString(3, strPeriod);
ResultSet rs = preStatement.executeQuery();
if(rs.next()){
//CLOSES CONNECTIONS
rs.close();
preStatement.close();
System.out.println("Check Complete; Period Already Exists");
return 3;
}
else{
System.out.println("Check complete; No Previous Period");
System.out.println("Inserting record: " + strProjectNumber + ", Year: " + strYear + ", Period: " + strPeriod);
strSQLString = null;
try{
strSQLString = "INSERT INTO tblCost (Program_No, Year, Period) VALUES (?, ?, ?) ";
//SETTING PREPARED STATEMENT
PreparedStatement preStatement1 = con.prepareStatement(strSQLString, ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
//SETTING FIRST CONDITION OF PREPARED STATEMENT IE ?
preStatement1.setString(1, strProjectNumber);
preStatement1.setString(2, strYear);
preStatement1.setString(3, strPeriod);
//EXECUTE QUERY
preStatement1.executeUpdate();
//CLOSES CONNECTIONS
preStatement1.close();
System.out.println("Insert Complete");
return 1;
}catch(Exception ex){
strEXMessage=ex.getMessage();
System.out.println(strEXMessage);
return 2;
}
}
}catch(Exception ex){
strEXMessage=ex.getMessage();
System.out.println(strEXMessage);
System.out.println("Check error; Unable to check for previous period");
return 2;
}
}
private void AddPeriod(){
//Create Connection
Database db = new Database();
int r = 0;
try {
r = db.CreateConnection();
} catch (SQLException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
} catch (ClassNotFoundException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
//CONNECTION COMPLETE
if(r==1){
int q = 0;
q = db.insertAddPeriod((String)cbProjectNumber.getSelectedItem(),(String)cbCostYear.getSelectedItem(),(String)cbCostPeriod.getSelectedItem());
if(q==1){
System.out.println("Record");
JOptionPane.showMessageDialog(null,"Record added for the period: " + (String)cbCostPeriod.getSelectedItem(),"Complete",JOptionPane.WARNING_MESSAGE);
}
if(q==2){
System.out.println("Error");
JOptionPane.showMessageDialog(null,"There was an error processing the insert query","Error",JOptionPane.WARNING_MESSAGE);
}
if(q==3){
System.out.println("Missing");
JOptionPane.showMessageDialog(null,"Record already exists for the selected period","Error",JOptionPane.WARNING_MESSAGE);
}
}
//CONNECTION ERROR
if(r==2){
System.out.println("Error");
JOptionPane.showMessageDialog(null,"No connection made","Error",JOptionPane.WARNING_MESSAGE);
}
//CONNECTION RETURNS EMPTY
if(r==3){
System.out.println("No Records");
JOptionPane.showMessageDialog(null,"No records found in table","Missing Records",JOptionPane.WARNING_MESSAGE);
}
}
public int CreateConnection() throws SQLException, ClassNotFoundException{
try{
con = DriverManager.getConnection(strDBCon,strDBUser,strDBPass);
System.out.println("Connection Passed");
return 1;
}catch(SQLException ex){
strEXMessage=ex.getMessage();
System.out.println("Connection Failed: " + ex);
return 2;
}
}
public int CloseConnection(){
try{
con.close();
System.out.println("Connection Closed by User");
return 1;
}catch(SQLException ex){
strEXMessage=ex.getMessage();
return 2;
}
}
(つまり原因でない限り)、乱雑を無視し、それをクリーンアップしてください現時点ではWIPです。
どのように接続を取得し、解放していますか – Rahul
@Rahul krestanosソリューションは完全に私のために働いていましたが、参照用に接続コードとリリースコードで投稿を編集しました。 – ppw