dbforummessage.java
来自「Jive 是一个系统工程」· Java 代码 · 共 555 行 · 第 1/2 页
JAVA
555 行
finally { try { pstmt.close(); } catch (Exception e) { e.printStackTrace(); } try { con.close(); } catch (Exception e) { e.printStackTrace(); } } //If the forumID for the message is less than 1, we have problems. //Print a warning and return null if (forumID < 1) { System.err.println("WARNING: forumID of " + forumID + " found for message " + id + " in DbForumMessage.getForumThread()." + " You may wish to delete the message from your database." ); return null; } Forum forum = null; ForumThread thread = null; try { forum = factory.getForum(forumID); //Now, get the thread thread = forum.getThread(threadID); } catch (Exception e) { e.printStackTrace(); return null; } this.thread = thread; return thread; } } public boolean hasPermission(int type) { return true; } //FROM CACHEABLE INTERFACE// public int getSize() { //Approximate the size of the object in bytes by calculating the size //of each field. int size = 0; size += CacheSizes.sizeOfObject(); //overhead of object size += CacheSizes.sizeOfInt(); //id size += CacheSizes.sizeOfString(subject); //subject size += CacheSizes.sizeOfString(body); //body size += CacheSizes.sizeOfDate(); //creation date size += CacheSizes.sizeOfDate(); //modified date size += CacheSizes.sizeOfInt(); //userID size += CacheSizes.sizeOfInt(); //threadID size += CacheSizes.sizeOfMap(properties); //map object size += CacheSizes.sizeOfObject(); //property lock size += CacheSizes.sizeOfObject(); //ref to factory return size; } //OTHER METHODS// /** * Returns a String representation of the message object using the subject. * * @return a String representation of the ForumMessage object. */ public String toString() { return subject; } public int hashCode() { return id; } public boolean equals(Object object) { if (this == object) { return true; } if (object != null && object instanceof DbForumMessage) { return id == ((DbForumMessage)object).getID(); } else { return false; } } /** * Loads message properties from the database. */ private void loadProperties() { synchronized(propertyLock) { Properties newProps = new Properties(); Connection con = null; PreparedStatement pstmt = null; try { con = DbConnectionManager.getConnection(); pstmt = con.prepareStatement(LOAD_PROPERTIES); pstmt.setInt(1, id); ResultSet rs = pstmt.executeQuery(); while(rs.next()) { String name = rs.getString("name"); String value = rs.getString("propValue"); newProps.put(name, value); } } catch( SQLException sqle ) { System.err.println("Error in DbForumMessage:loadProperties():" + sqle); sqle.printStackTrace(); } finally { try { pstmt.close(); } catch (Exception e) { e.printStackTrace(); } try { con.close(); } catch (Exception e) { e.printStackTrace(); } } this.properties = newProps; } } /** * Saves message properties to the database. */ private void saveProperties() { synchronized(propertyLock) { Connection con = null; PreparedStatement pstmt = null; try { con = DbConnectionManager.getConnection(); //Delete all old values. pstmt = con.prepareStatement(DELETE_PROPERTIES); pstmt.setInt(1, id); pstmt.execute(); pstmt.close(); //Now insert new values. pstmt = con.prepareStatement(INSERT_PROPERTY); Iterator iter = properties.keySet().iterator(); while (iter.hasNext()) { String name = (String)iter.next(); String value = (String)properties.get(name); pstmt.setInt(1, id); pstmt.setString(2, name); pstmt.setString(3, value); pstmt.executeUpdate(); } } catch( SQLException sqle ) { System.err.println(sqle); } finally { try { pstmt.close(); } catch (Exception e) { e.printStackTrace(); } try { con.close(); } catch (Exception e) { e.printStackTrace(); } } } } /** * Loads message and user data from the database. */ private void loadFromDb() throws ForumMessageNotFoundException { // Based on the id in the object, get the message data from the database. Connection con = null; PreparedStatement pstmt = null; try { con = DbConnectionManager.getConnection(); pstmt = con.prepareStatement(LOAD_MESSAGE); pstmt.setInt(1, id); ResultSet rs = pstmt.executeQuery(); if( !rs.next() ) { throw new ForumMessageNotFoundException("Message " + id + " could not be loaded from the database."); } //Get the query results. We use int indexes into the ResultSet //because it is slightly faster. Care should be taken so that the //SQL query is not modified without modifying these indexes. this.userID = rs.getInt(1); //We trim() the dates before trying to parse them because some //databases pad with extra characters when returning the data. this.creationDate = new java.util.Date(Long.parseLong(rs.getString(2).trim())); this.modifiedDate = new java.util.Date(Long.parseLong(rs.getString(3).trim())); this.subject = rs.getString(4); this.body = rs.getString(5); this.threadID = rs.getInt(6); } catch( SQLException sqle ) { throw new ForumMessageNotFoundException( "Message of id " + id + " was not found in the database." ); } catch (NumberFormatException nfe) { System.err.println("WARNING: In DbForumMessage.loadFromDb() -- there " + "was an error parsing the dates returned from the database. Ensure " + "that they're being stored correctly."); } finally { try { pstmt.close(); } catch (Exception e) { e.printStackTrace(); } try { con.close(); } catch (Exception e) { e.printStackTrace(); } } } /** * Inserts a new message into the database. A connection object must * be passed in. The connection must be open when passed in, and will * remain open when passed back. This method allows us to make insertions * be transactional. * * @param con an open Connection used to insert the thread to the db. * @param thread the ForumThread the message is being added to. */ public void insertIntoDb(Connection con, ForumThread thread) { //Set the message threadID to the thread that the message is being //added to. this.threadID = thread.getID(); PreparedStatement pstmt = null; try { pstmt = con.prepareStatement(INSERT_MESSAGE); pstmt.setInt(1, id); pstmt.setInt(2, threadID); pstmt.setString(3, Long.toString(creationDate.getTime())); pstmt.setString(4, Long.toString(modifiedDate.getTime())); pstmt.setInt(5, userID); pstmt.setString(6, subject); pstmt.setString(7, body); pstmt.executeUpdate(); pstmt.close(); //We're done inserting the message, so now save any extended //properties to the database. saveProperties(); } catch( SQLException sqle ) { System.err.println("Error in DbForumMessage:insertIntoDb()-" + sqle); sqle.printStackTrace(); } finally { try { pstmt.close(); } catch (Exception e) { e.printStackTrace(); } } //since we're done inserting the object to the database, it is ready //for future insertions. isReadyToSave = true; } /** * Saves message data to the database. */ private synchronized void saveToDb() { Connection con = null; PreparedStatement pstmt = null; try { con = DbConnectionManager.getConnection(); pstmt = con.prepareStatement(SAVE_MESSAGE); pstmt.setInt(1, userID); pstmt.setString(2, subject); pstmt.setString(3, body); pstmt.setString(4, Long.toString(creationDate.getTime())); pstmt.setString(5, Long.toString(modifiedDate.getTime())); pstmt.setInt(6, id); pstmt.executeUpdate(); } catch( SQLException sqle ) { System.err.println( "SQLException in DbForumMessage:saveToDb()- " + sqle ); sqle.printStackTrace(); } finally { try { pstmt.close(); } catch (Exception e) { e.printStackTrace(); } try { con.close(); } catch (Exception e) { e.printStackTrace(); } } }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?