1 21 22 package org.opensubsystems.core.persist.db.postgresql; 23 24 import java.sql.PreparedStatement ; 25 import java.sql.ResultSet ; 26 import java.sql.SQLException ; 27 import java.sql.Timestamp ; 28 29 import org.opensubsystems.core.data.BasicDataObject; 30 import org.opensubsystems.core.data.ModifiableDataObject; 31 import org.opensubsystems.core.error.OSSException; 32 import org.opensubsystems.core.error.OSSInconsistentDataException; 33 import org.opensubsystems.core.util.DatabaseUtils; 34 35 44 public final class PostgreSQLDataUtils 45 { 46 48 51 private PostgreSQLDataUtils( 52 ) 53 { 54 } 56 57 59 71 public static void insertAndFetchGeneratedValues( 72 PreparedStatement insertStatement, 73 BasicDataObject data 74 ) throws SQLException , 75 OSSException 76 { 77 ResultSet rsResults = null; 78 int iGeneratedKey = -1; 79 Timestamp tmTimestamp = null; 80 81 try 82 { 83 rsResults = insertStatement.executeQuery(); 84 85 if (rsResults.next()) 86 { 87 iGeneratedKey = rsResults.getInt(1); 88 tmTimestamp = rsResults.getTimestamp(2); 89 } 90 } 91 finally 92 { 93 DatabaseUtils.closeResultSet(rsResults); 94 } 95 96 data.setId(iGeneratedKey); 97 data.setCreationTimestamp(tmTimestamp); 98 if (data instanceof ModifiableDataObject) 99 { 100 ((ModifiableDataObject)data).setModificationTimestamp(tmTimestamp); 101 } 102 } 103 104 116 public static void updateAndFetchGeneratedValues( 117 PreparedStatement updateStatement, 118 ModifiableDataObject data 119 ) throws SQLException , 120 OSSException 121 { 122 ResultSet rsResults = null; 123 int iUpdateCount = 0; 124 Timestamp tmTimestamp = null; 125 126 try 127 { 128 rsResults = updateStatement.executeQuery(); 129 130 if (rsResults.next()) 131 { 132 iUpdateCount = rsResults.getInt(1); 133 tmTimestamp = rsResults.getTimestamp(2); 134 } 135 } 136 finally 137 { 138 DatabaseUtils.closeResultSet(rsResults); 139 } 140 141 if (iUpdateCount > 1) 142 { 143 throw new OSSInconsistentDataException( 144 "Inconsistent database contains multiple (" + iUpdateCount + 145 ") data with the same ID modified at the same time"); 146 } 147 if (iUpdateCount == 1) 148 { 149 data.setModificationTimestamp(tmTimestamp); 150 } 151 } 152 } 153 | Popular Tags |