Any suggestions for my code.

Hi,
I wrote this little piece of code to reduce some of the work I need to do when doing database access. I intend to use if with mySQL and mostly web based applications. It'll probably use it quite a bit, and since it's my first try at writing something like this I figured I'd post the code to see if anyone can find any problems. I've already tested it and it works, so I'm mostly interested in any feedback about performance issues.
I'd really like to know if there's any way I can get the number of rows in a result set before I start going through it. That way I could return the data in an Object[][] array (I'd assume it'd be a little faster to add values to than the ArrayList).
Here's the code...
* SQLGruntBean.java
* Created on November 22, 2002, 12:37 PM
package com.vacode.beans.sql;
import java.sql.*;
import java.util.*;
/** This bean is a generic class that can be used to access any type of SQL
*  database.  To use it with an application that accesses an SQL database
*  do the following:
*  <p>1. Create a new instance of SQLGruntBean.</p>
*  <p>2. Set the SQL connection source by calling setConnection(Connection).</p>
*  <p>3. Set the SQL query you wish to perform by calling setSqlQuery(String).
*  <br><b>Note:</b> You may replace all values with question mark place holders
*  as long as you also perform step 4.</p>
*  <p>4. (OPTIONAL) Set the values that are represented by question mark place
*  holders by calling setSqlValues.  This method requires an Object array as
*  input.</p>
*  <p>5. (OPTIONAL) Set the maximum number of results to be retrieved by calling
*  setMaxRows.  If left unset it will default to 100.  This method should not
*  be used as a replacement for the LIMIT parameter in an SQL query.  It is
*  merely a backup in case an excessive number of results are returned
*  erroneously.</p>
*  <p>6. Once all the necessary variables are set you may call either
*  executeQuery or executeUpdate to perform the intended task.</p>
*  <p>     <b><i><u>EXAMPLE</u></i></b></p>
*  <p>
*  <code>
*  <br>SQLGruntBean sgb = new SQLGruntBean();
*  <br>Object[] values = new Object[1];
*  <br>ArrayList data = null;
*  <br><br>
*  <br>sgb.setConnection(dataSource.getConnection);
*  <br>sgb.setSqlQuery("SELECT * FROM USERS WHERE firstName = ?");
*  <br>values[0] = "John";
*  <br>sgb.setSqlValues(values);
*  <br>data = sgb.executeQuery();
*  </code>
*  </p>
*  <p>The necessary try / catch blocks and error handling have been left out of
*  this example, but will need to be implemented for production code.</p>
* @author  Vacode Web Systems
* @version 1.0
public class SQLGruntBean
    // Define global variables
    private Connection dbConnection = null;
    private String sqlQuery = null;
    private int maxRows = 100;  // Default to 100 in case it is not set
    private Object[] sqlValues = null;
    // End global variables
    /** A write only method for defining the connection to an SQL
     *  database
    public void setConnection(Connection sqlConnectionObject)
     this.dbConnection = sqlConnectionObject;
    /** A write only method for defining the SQL query that is to be
     *  executed.*/
    public void setSqlQuery(String sqlQuery)
     this.sqlQuery = sqlQuery;
    /** Defines the maximum number of rows that are to be retrieved from the
     *  result set.  This is more of a back up than anything as the sql query
     *  should contain a limit parameter if the query is going to return an
     *  excessive number of results. */
    public void setMaxRows(int maximumRows)
     this.maxRows = maximumRows;
    /** A write only method for defining the dynamic values that are
     *  to replace the question mark placeholders in the sql query.*/
    public void setSqlValues(Object[] values)
     this.sqlValues = values;
    /** Used to execute an sql query.  The executed query is defined by calling
     *  setSqlQuery prior to this method.  The database connection to be used
     *  is defined by calling setConnection prior to this method. */
    public ArrayList executeQuery() throws SQLException
     // Define the local variables that will be used within this method
     ArrayList data = null;
     // End local variables
     if(this.sqlValues!=null && this.sqlValues.length>0)
         /* A prepared statement needs to be executed because the
          * sqlQuery is going to contain ? placeholders rather than
          * actual values.  It is necessary to replace these place
          * holders with their corresponding values.*/
         data = executePreparedQuery();
     else
         // A regular sql query needs to be executed.
         data = executeRegularQuery();
     return(data);
    /** Used to execute an sql update.  The executed update is defined by calling
     *  setSqlQuery prior to this method.  The database connection to be used
     *  is defined by calling setConnection prior to this method. */
    public int executeUpdate() throws SQLException
     // Define the local variables that will be used in this method
     int rowsAffected = -1;
     // Done local variables
     if(this.sqlValues!=null && this.sqlValues.length>0)
         /* A prepared update needs to be executed because the
          * sqlQuery is going to contain ? placeholders rather than
          * actual values.  It is necessary to replace these place
          * holders with their corresponding values.*/
         rowsAffected = executePreparedUpdate();
     else
         // We just need to execute a regular sql query
         rowsAffected = executeRegularUpdate();
     return(rowsAffected);
    /** If a prepared statement is needed this method will be called by the
     *  executeQuery method.*/
    private ArrayList executePreparedQuery() throws SQLException
     // Define the local variables that will be used within this method
     ResultSet rs = null;
     PreparedStatement pstmt = null;
     ArrayList data = null;
     // End local variables
     try
         pstmt = this.dbConnection.prepareStatement(this.sqlQuery);
         setSqlValues(pstmt, this.sqlValues);
         rs = pstmt.executeQuery();
         /* Closing the PreparedStatement is going to cause the
          * ResultSet to be inaccessible.  Therefore it is necessary to
          * move the data that has just been aquired into an alternate
          * data storage object.*/
         data = processResult(rs);
         // Clean up all of the db resources we have opened
         rs.close();
         rs = null;
         pstmt.close();
         pstmt = null;
         this.dbConnection.close();
         this.dbConnection = null;
         /* No exceptions are caught.  They should be dealt with by the
          * calling class. */
     finally
          /* If an exception was thrown during the execution of the
           * sql query there will still be open db resources.  They need
           * to be closed. */
         if(rs!=null)
          try
          { rs.close(); } catch(SQLException sqle)
          { } // EXCEPTION IGNORED
          rs = null;
         if(pstmt!=null)
          try
          { pstmt.close(); } catch(SQLException sqle)
          { } // EXCEPTION IGNORED
          pstmt = null;
         if(this.dbConnection!=null)
          try
          { this.dbConnection.close(); } catch(SQLException sqle)
          { } // EXCEPTION IGNORED
          this.dbConnection = null;
         /* Regardless of what happens we need to return an array of Objects.
          * If the returning value is null it should be handled by the
          * calling class. */
     return(data);
    /** If a regular sql statement is required this method will be called
     *  by the executeQuery method. */
    private ArrayList executeRegularQuery() throws SQLException
     // Define the local variables that will be used within this method
     ResultSet rs = null;
     Statement stmt = null;
     ArrayList data = null;
     // End local variables
     try
         stmt = this.dbConnection.createStatement();
         rs = stmt.executeQuery(this.sqlQuery);
         /* Closing the Statement is going to cause the ResultSet to be
          * inaccessible.  Therefore it is necessary to move the data
          * that has just been aquired into an alternate data storage
          * object.*/
         data = processResult(rs);
         // Clean up all of the db resources we have opened
         rs.close();
         rs = null;
         stmt.close();
         stmt = null;
         this.dbConnection.close();
         this.dbConnection = null;
         /* No exceptions are caught.  They should be dealt with by the
          * calling class. */
     finally
          /* If an exception was thrown during the execution of the
           * sql query there will still be open db resources.  They need
           * to be closed. */
         if(rs!=null)
          try
          { rs.close(); } catch(SQLException sqle)
          { } // EXCEPTION IGNORED
          rs = null;
         if(stmt!=null)
          try
          { stmt.close(); } catch(SQLException sqle)
          { } // EXCEPTION IGNORED
          stmt = null;
         if(this.dbConnection!=null)
          try
          { this.dbConnection.close(); } catch(SQLException sqle)
          { } // EXCEPTION IGNORED
          this.dbConnection = null;
     return(data);
    /** If a prepared update is needed this method will be called by the
     *  executeUpdate method.*/
    private int executePreparedUpdate() throws SQLException
     // Define the local variables that will be used within this method
     PreparedStatement pstmt = null;
     int rowsAffected = -1;
     // End local variables
     try
         pstmt = this.dbConnection.prepareStatement(this.sqlQuery);
         setSqlValues(pstmt, this.sqlValues);
         rowsAffected = pstmt.executeUpdate();
         pstmt.close();
         pstmt = null;
         this.dbConnection.close();
         this.dbConnection = null;
         /* No exceptions are caught.  They should be dealt with by the
          * calling class. */
     finally
          /* If an exception was thrown during the execution of the
           * sql update there will still be open db resources.  They need
           * to be closed. */
         if(pstmt!=null)
          try
          { pstmt.close(); } catch(SQLException sqle)
          { } // EXCEPTION IGNORED
          pstmt = null;
         if(this.dbConnection!=null)
          try
          { this.dbConnection.close(); } catch(SQLException sqle)
          { } // EXCEPTION IGNORED
          this.dbConnection = null;
         /* Regardless of what happens we need to return an array of Objects.
          * If the returning value is -1 it should be handled by the
          * calling class. */
     return(rowsAffected);
    /** If a regular sql statement is required this method will be called
     *  by the executeQuery method. */
    private int executeRegularUpdate() throws SQLException
     // Define the local variables that will be used within this method
     ResultSet rs = null;
     Statement stmt = null;
     int rowsAffected = -1;
     // End local variables
     try
         stmt = this.dbConnection.createStatement();
         rowsAffected = stmt.executeUpdate(this.sqlQuery);
         // Clean up all of the db resources we have opened
         stmt.close();
         stmt = null;
         this.dbConnection.close();
         this.dbConnection = null;
         /* No exceptions are caught.  They should be dealt with by the
          * calling class. */
     finally
          /* If an exception was thrown during the execution of the
           * sql update there will still be open db resources.  They need
           * to be closed. */
         if(stmt!=null)
          try
          { stmt.close(); } catch(SQLException sqle)
          { } // EXCEPTION IGNORED
          stmt = null;
         if(this.dbConnection!=null)
          try
          { this.dbConnection.close(); } catch(SQLException sqle)
          { } // EXCEPTION IGNORED
          this.dbConnection = null;
     return(rowsAffected);
    /** used to iterate through the sql values and add them to the
     *  prepared statement object. */
    private void setSqlValues(PreparedStatement ps, Object[] values) throws SQLException
     for(int i=0;i<this.sqlValues.length;i++)
         Object o = this.sqlValues;
     /* SQL starts counting at 1 not 0, so this loop needs to be
     * incremented by 1 for the setObject method to interpret it
     * correctly. */
     ps.setObject(i+1, values[i]);
/** Used to copy a result set into a persistent object so that it can
* be used even once the connection to the database has been closed. */
private ArrayList processResult(ResultSet rs) throws SQLException
     ArrayList data = new ArrayList();
     ResultSetMetaData rsmd = rs.getMetaData();
     int colCount = rsmd.getColumnCount();
     while(rs.next())
     Object[] currentRow = new Object[colCount];
     for(int i=0;i<colCount;i++)
          currentRow[i] = rs.getObject(i+1); //SQL starts at 1 not 0
     data.add(currentRow);
     return(data);
Thanks for the input,
Ryan

I think I have an idea of what you mean. I just want to make sure before I write everything though. I could implement your idea by doing the following right?
I haven't tried any of this, so if there's minor (syntax) errors just ignore them. I'll fix them later.
1. Create the following Interface.
package com.vacode.beans.sql;
public interface GruntBeanProccessingModule
    public Object get(Object[] properties);
}2. Force the subclasses to implement the above interface
public class EmployeeProcessor implements GruntBeanProcessingModule
    public Object get(Object[] properties)
     //make sure the input array is the right length (+ other validation, etc.)
     //create a new EmployeeBean
     //set all the EmployeeBean properties based on the input Object[]
     //return the EmployeeBean
}3. Make the following additions to my SQLGruntBean class
private requestedClassType = null;
public void setRequestedClassType(Object o) // o must be an instance of the requested class
    this.requestedClassType = o;
//if requestedClassType isn't null then create the ArrayList like this
while(rs.next())
         Object[] currentRow = new Object[colCount];
         for(int i=0;i<colCount;i++)
          currentRow[i] = rs.getObject(i+1); //SQL starts at 1 not 0
         Class requestedClass = Class.forName(requestedClassType.getClass().getName());
         GruntBeanProcessingModule gbpm = requestedClass.newInstance();
         Object convertedData = gbpm.get(currentRow);
         data.add(convertedData);
     }Of course I'll have to handle any possible exceptions (requestedClassType isn't an instance of GruntBeanProcessingModule, etc.). I also notice the forum replaced some of my [] with <> (I've seen it before though, so you probably already know about it).
Did I get it right or am I out to lunch :-)
Thank you very much for the feedback,
Ryan

Similar Messages

  • Any Suggestions for CGI Script for Web Slide Slow?

    Do you have any suggestions for creating a slideshow for my web site, 6 same-size jpgs that rotate automatically?
    I think I prefer a cgi script. However, I've tried two that don't work on Firefox or Safari. One developer tells me that he can see the rotating photos.
    I'm also open to software to create this. However, I'd prefer to use html code.
    Of course, it must work cross platform.
    Any suggestions?
    G5 Quad; Mini Mac; PowerBook G3; iPods   Mac OS X (10.4.8)   Using Dreamweaver 8

    Oh, what a beautiful baby! Is he/she yours?
    She is mine. At least that's what the Mrs. tells me!
    When you say gif, I am assuming that you mean the
    format really must be gif and not jpg. Is that
    correct?
    Yes, the file is a GIF file. It's actually an animated GIF file, meaning that the images that you see are all frames of animation in a single GIF file. There are a lot of apps out there that can create animated GIFs. I happen to use Adobe ImageReady because that is what is on the hard drive.
    Can you give me a hint about the dithering issue? Do
    I dither or not dither, that is the question.
    This is the major downside of the GIF format. It is a really old format...from back in the CompuServe bulletin board days...maybe older. Anyways, it is my understanding that GIFs can only hold information for 256 colors....any 256 colors, but no more and no less. So now in the days of "millions of colors" jpegs, you can imagine that a 256 color palette is limiting. But if the colors of your images are sufficiently close, its possible that 256 colors makes for perfectly acceptable images across all images. This is the one variable of converting images to GIF that can make it or break it for you. If your image has a pretty broad tonal range...like fleshtones or any other gradient...then 256 colors is going to represent things poorly. Then you will get dithering artifacts which is like averaging errors...colors are close...as close as possible...but not close enough to make a smooth gradation. Anyways, that's my layperson's understanding.
    But for some images, it looks just fine.

  • Does anyone have any suggestions for password protecting e-mail on the i pad?

    Does anyone have any suggestions for password protecting e-mail on the i pad?  Other people sometimes want to use my i pad but I don't want them to have access to my e-mail (which is on AOL)
    Presently you can password protect the whole i pad by having to put in a 4 digit code to open it, but once it's open whoever is using it has access to everything you have on it.

    Skydiver...that did it!!  I shut the mail app from automatically opening and now I can sign onto my AOL acct. through Safari!!  I had called Apple Care and had asked  different peope in Apple stores about this and no one but you had any suggestions!  YAY!!  Thanks!!!

  • Does anyone have any suggestions for Ad blocking? I'm getting a lot of pop up ads while using Facebook from Safari.

           I'm getting a lot of pop up ads. mostly while using  Facebook. I'm running Safari on a Macbook Pro running Yosemite. Does anyone have any suggestions for an Ad blocker. I don't see anything in the App store.
          I can't swear to it but I don't recall this being a problem pre-Yosemite. I could be wrong. I haven't been real active on Facebook until recently. I see some third party apps out there but am alway wary of non approved software.
         Thanks
         Ron

    You may have installed the "VSearch" trojan. Remove it as follows.
    Malware is always changing to get around the defenses against it. These instructions are valid as of now, as far as I know. They won't necessarily be valid in the future. Anyone finding this comment a few days or more after it was posted should look for more recent discussions or start a new one.
    Back up all data before proceeding.
    Step 1
    From the Safari menu bar, select
              Safari ▹ Preferences... ▹ Extensions
    Uninstall any extensions you don't know you need, including any that have the word "Spigot," "Trovi," or "Conduit" in the description. If in doubt, uninstall all extensions. Do the equivalent for the Firefox and Chrome browsers, if you use either of those.
    Reset the home page and default search engine in all the browsers, if it was changed.
    Step 2
    Triple-click anywhere in the line below on this page to select it:
    /Library/LaunchAgents/com.vsearch.agent.plist
    Right-click or control-click the line and select
              Services ▹ Reveal in Finder (or just Reveal)
    from the contextual menu.* A folder should open with an item named "com.vsearch.agent.plist" selected. Drag the selected item to the Trash. You may be prompted for your administrator login password.
    Repeat with each of these lines:
    /Library/LaunchDaemons/com.vsearch.daemon.plist
    /Library/LaunchDaemons/com.vsearch.helper.plist
    Restart the computer and empty the Trash. Then delete the following items in the same way:
    /Library/Application Support/VSearch
    /System/Library/Frameworks/VSearch.framework
    ~/Library/Internet Plug-Ins/ConduitNPAPIPlugin.plugin
    Some of these items may be absent, in which case you'll get a message that the file can't be found. Skip that item and go on to the next one.
    The problem may have started when you downloaded and ran an application called "MPlayerX." That's the name of a legitimate free movie player, but the name is also used fraudulently to distribute VSearch. If there is an item with that name in the Applications folder, delete it, and if you wish, replace it with the genuine article from mplayerx.org.
    This trojan is often found on illegal websites that traffic in pirated content such as movies. If you, or anyone else who uses the computer, visit such sites and follow prompts to install software, you can expect more of the same, and worse, to follow.
    You may be wondering why you didn't get a warning from Gatekeeper about installing software from an unknown developer, as you should have. The reason is that the Internet criminal behind VSearch has a codesigning certificate issued by Apple, which causes Gatekeeper to give the installer a pass. Apple could revoke the certificate, but as of this writing has not done so, even though it's aware of the problem. This failure of oversight has compromised both Gatekeeper and the Developer ID program. You can't rely on Gatekeeper alone to protect you from harmful software.
    *If you don't see the contextual menu item, copy the selected text to the Clipboard by pressing the key combination  command-C. In the Finder, select
              Go ▹ Go to Folder...
    from the menu bar and paste into the box that opens by pressing command-V. You won't see what you pasted because a line break is included. Press return.

  • I just received a new macbook pro. I am looking for a usb3 external storage 500 GB drive.  Some manufacturers of drives aren't for sure their drive will work with the new lion system. Does anybody have any suggestions for drives that will workw

    I just received a new macbook pro. I am looking for a usb3 external storage 500 GB drive.  Some manufacturers of drives aren't for sure their drive will work with the new  system. Does anybody have any suggestions for drives that will workw

    There seems to be a problem, just now, with the USB 3 ports on the new MBP's supporting eternal USB 3 drives. Some people have no luck at all - can't even recognize the drive - and some are reporting USB 2 speeds (those who drives are recognized). I'd call a dealer such as LaCie or OWC to see if they have USB 3 drives that actually work with MBP's with USB 3 ports. You may have to wait for a software/firmware update.
    Clinton

  • I continue to receive message that "We could not complete your iTunes Store request. An unknown error occurred (4002). Please try again later." This has been happening every time iTunes Match runs in background. Any suggestions for a cure?

    I continue to receive message that "We could not complete your iTunes Store request. An unknown error occurred (4002). Please try again later." This has been happening every time iTunes Match runs in background. Any suggestions for a cure?

    Found a potential solution here:
    https://discussions.apple.com/thread/4332757
    Gsleeroy
    Re: error 4002 in itunes match do you have a solution? 
    Sep 23, 2012 10:08 AM (in response to matracaelcan)
    Hi All,
    I had this problem today myself, and was frustrated repeatedly by the '4002' error.
    I have literally just fixed the issue by doing the following steps:
    1: Go to the 'Store' tab and select 'Turn Off iTunes Match'
    2: Return to the 'Store' tab and select 'Update Genius'
    3: Wait for this to complete succesfully, the return to the 'Store' tab once more and select 'Turn On iTunes Match'.
    4: iTunes Match will now go through the motions and should succeed!
    I hope this helps

  • Any suggestion for a damaged logic board rather than buy a new computer

    Any suggestions for a damaged logic board rather than buying a new computer

    The most frequent RAM vendor recommendations are Crucial.com and MacSales.com (OWC).
    With respect the logic board, you could ask Apple about a "Fixed Price Repair" which will generally repair everything that is wrong with a Mac.
    Message was edited by: BobHarris

  • Cannot display the screen of the macbook on TV. OS is Lion 10.7.2. Connection to the TV is over HDMI cable.  TV shows only the backgroud picture of Lion. Do you have any suggestions for help ?

    Cannot display the screen of my macbook on TV. OS is Lion 10.7.2. The Macbook is connected to the TV is over HDMI cable.  TV shows only the backgroud picture of the Lion OS and reacts even to mission control. Do you have any suggestions for help ?

    You have the display set in Extended Desktop mode. In System Preferences>Display on the MacBook screen there should be an Arrangement tab when you have the MacBook hooked up to the TV and both screens working. When you click the Arrangement tab do you see two monitors side by side? One of them will have a Menu Bar at the top. Just click on the Menu Bar and drag it to the second monitor. That will make the second monitor your main screen. You can now use your MacBook in Clamshell Mode with a wired or Bluetooth keyboard and mouse.  http://support.apple.com/kb/HT3131 When you disconnect from the TV your Menu Bar will automatically change back to the MacBook.
    Or if you want to work on the MacBook screen while showing it on a TV you can check the Mirror Display box on the lower left hand side of the Arrangement tab under the two monitors box.

  • HT201272 I have deleted a song from my library and want to re-download it.  When I access my purchased items in the iTunes store, the song has the 'purchased' button next to it and won't let me re-download. Any suggestions for things to try?

    I have deleted a song from my library and want to re-download it.  When I access my purchased items in the iTunes store, the song has the 'purchased' button next to it and won't let me re-download. Any suggestions for things to try?

    While you can redownload most past purchases without charge, you can't redownload movies without paying again.  See Downloading past purchases from the App Store, iBookstore, and iTunes Store: http://support.apple.com/kb/HT2519

  • Any suggestions for programs that can convert mpeg1 to a format that can be edited in iMovie Version 8.0.6 (821) and/or iMovie HD Version 6.0.3 (267.2) Thanks

    Any suggestions for programs that can convert mpeg1 to a format that can be edited in iMovie Version 8.0.6 (821) and/or iMovie HD Version 6.0.3 (267.2) Thanks

    Hi Mark
    Was just looking for the answer to this exact question and I just found something that worked for me so don't know if it might be of use to you or you might have already solved your problem!  Basically when I was in iMovie and I clicked to import movies from the computer into iMovie and I found the clip I wanted to import, there are a few options.  I think it asked which Event I wanted to add it to but most importantly it asked me what file size I wanted...I had originally been clicking Large because it advised me to because it reduces the file size...but just on a chance there I selected 'Full - Original' for size and it imported perfectly into iMovie in it's original vertical form!
    Hope this helps!
    Bianca

  • I recently purchased a refurbed iMac with a 3.06 GHz Intel Core 2 Duo.  It came with iMovie ver. 9.0.5 installed.  I do allot with iMovie and iDVD and would like to get a camcorder to add movie clips.  Does anyone have any suggestions for a reasonably pri

    I recently purchased a refurbed iMac with a 3.06 GHz Intel Core 2 Duo.  It came with iMovie ver. 9.0.5 installed.  I do allot with iMovie and iDVD and would like to get a camcorder to add movie clips.  Does anyone have any suggestions for a reasonably price camcorder that would work with my setup?
    Thanks in advance for any suggestions.

    I recently purchased a refurbed iMac with a 3.06 GHz Intel Core 2 Duo.  It came with iMovie ver. 9.0.5 installed.  I do allot with iMovie and iDVD and would like to get a camcorder to add movie clips.  Does anyone have any suggestions for a reasonably price camcorder that would work with my setup?
    Thanks in advance for any suggestions.

  • Any suggestions for building a home network (in a modest...

    Any suggestions for building a home network (in a modest 1600 sq. ft. home) with the following requirements...
    1) Laptop(s) and PC share broadband (cable) internet connection
    2) Access files on PC from laptop(s) and vice versa
    3) PC and laptop(s) share printer (Canon Pixma 610)
    4) Send media on PC to TV
    5) Send music to wireless speakers (not purchased yet)
    Note hardware specs:
    A) One laptop runs on Windows XP and has an Intel PRO wireless 2915ABG network connection
    B) PC runs Windows XP Media Center
    I was thinking about the wireless N broadband router 300.  From the experiences of the community, will I be able to achieve my goal?  Beside a PC adapter, is there any other hardware I will need?
    A couple other questions.
    The router will likely be sitting right next to my PC.  Does the PC need to have a wireless adapter or can it be wired from the router to the PC?
    When will the media extender be available?  Will it work with Windows XP?
    Thank you.
    Chris

    I personally might not buy Wireless-N, but the idea of being on the bleeding edge is nice.
    Anyway, whichever router you choose, you should be able to accomplish almost everything you need.
    You'll be able to share your internet amongst all of the computers, and share files between them all. Local firewalls and permission settings on individual computers could potentially pose a problem.
    Sending media to your TV may or may not be possible, depending on what other hardware you have. A router itself would not be able to do that, as a TV doesn't usually have any form of WiFi, but if you had a box connected to it for displaying content on the TV, you could do something like that...
    Wireless speakers are generally a separate wireless system. As far as I know, there is a wireless transmitter that sits next to the amp (or other sound source), and broadcasts the music wirelessly to the speakers. You'd have to make sure the speakers and wireless router are on different channels as to not cause interference.
    Don't know much about the media extender, but highly likely will be compatible with XP.

  • HT4061 My mail will not update and stay current. Its always searching but doesn't do anthing. Any suggestions for ipad3?

    My mail will not update and stay current. Its always searching but doesn't do anthing. Any suggestions for ipad3?

    Please read this whole message before doing anything.
    This procedure is a diagnostic test. It’s unlikely to solve your problem. Don’t be disappointed when you find that nothing has changed after you complete it.
    The purpose of this exercise is to determine whether the problem is caused by third-party system modifications that load automatically at startup or login. Disconnect all wired peripherals except those needed for the test, and remove all aftermarket expansion cards. Boot in safe mode and log in to the account with the problem. The instructions provided by Apple are as follows:
    Be sure your Mac is shut down.
    Press the power button.
    Immediately after you hear the startup tone, hold the Shift key. The Shift key should be held as soon as possible after the startup tone, but not before the tone.
    Release the Shift key when you see the gray Apple icon and the progress indicator (looks like a spinning gear).
    Safe mode is much slower to boot and run than normal, and some things won’t work at all, including wireless networking on some Macs.
    The login screen appears even if you usually log in automatically. You must know your login password in order to log in. If you’ve forgotten the password, you will need to reset it before you begin.
    Test while in safe mode. Same problem(s)?
    After testing, reboot as usual (i.e., not in safe mode.)

  • HT1338 My Mac book Pro is running very slow and the rainbow ball is appearing all the time. Any suggestions for clean up??

    My Mac book Pro is running very slow and the rainbow ball is appearing all the time. Any suggestions for clean up?? I have the OS X Lion system.

    As well as what a brody asked :
    - do you need more RAM? (run Activity Monitor and see how much free RAM - green - is available)
    - do you Restart fairly regularly, e.g. at least once a week, to clear out any swap or temporary files?
    - do  you need to do maintenance, e.g. clearing out caches and unused logs, etc?

  • Any suggestions for backing up a macbook?  I think it's a Mac OX X v10.6?

    Do you have any suggestions for backing up. I do not currently have a way to back up my laptop. I read many bad reviews for time machine. Is their a cheaper way to back up laptop (I assume it wouldn't be wireless like time machine)?

    Time Machine works. It's free (except for the external disk you need to store the backup on!).
    You may be confusing Time Machine (the backup program builtin to Leopard and Snow Leopard) with the Time Capsule, an Apple wifi router with a hard drive built in.
    Either way, remember that people only come here when they have problems - so you'll see people complaining about Time Machine not working, because they don't post when things just work.
    I use Time Machine for all my Macs. Works really, really well.
    Additionally, I also use Carbon Copy Cloner (donationware) to make occasional copies of my boot disks.

Maybe you are looking for

  • Cleaning a schmotz off the iBook screen... and HD and Optical drivequestion

    FIRST: I was hoping to find this info in a FAQ somewhere, but couldn't come up with it. I have an iBook G4 (14-inch Late 2004)/1.33GHz/768 MB RAM/ATA 40GB HD/Slot-loading combo -- NOT Super -- drive) that I bought second-hand from some leased-compute

  • ITunes fro Mac is not copying to my iPod

    My Mac OS X 10.7.5 iTunes will not copy to my iPod classic.  My iTunes is up to date.  It gives me an -61 error and tells me I do not have privileges! Help!

  • Standard smart forms

    hi All, Pls give me the details that how to use system defined smart forms and how to copy and change standard smart forms in SAP 4.7EE Thanks, Nitin

  • How does push on the iphone work?

    I am not sure how the push option is suppose to work. I have an yahoo email account as well that gives me te option to enable push. gmail seems only to have a fetch option. (why not push as well?) Or does push only work with a mobile me account?

  • Creating suport packages for SAP MI

    Following instructions placed in this PDF I try to prepare package: https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/2c005913-0a01-0010-a2ba-be71d3de3b28 I but can't find <b>makecab.bat</b> file. I have no idea where to find this f