Categories
discuss

How to use Java JDBC connection pool?

I want to use a JDBC connection pool. The most important factor is that it’s easy-to-use and bug-free. What is suitable for me?

Answer

Another fine alternative is the Apache Database Connection Pool.

Instead of getting a connection using DriverManager, you’ll use a JNDI naming service to get your connection out of the pool.

Be sure to close your resources – Connection, Statement, and ResultSet. If you don’t, your pool will be quickly exhausted.

Categories
discuss

Get all Images from WebPage Program | Java

Currently I need a program that given a URL, returns a list of all the images on the webpage.

ie:

logo.png
gallery1.jpg
test.gif

Is there any open source software available before I try and code something?

Language should be java. Thanks
Philip

Answer

HtmlUnit has HtmlPage.getElementsByTagName("img"), which will probably suit you.

(read the short Get started guide to see how to obtain the correct HtmlPage object)

Categories
discuss

Java reflection: Find fields of a subclass

I have a class hierarchy like so: (=> means “is a subclass of”)

anonymous instance class => abstract class => generic abstract class

or more succinctly:

C => B => A

When executing, “C” calls one of “A”‘s methods. Within that method in “A”, I want to use reflection to find protected fields of the object that are defined in class “B”. (So these are fields that “C” and “B” can see, but not “A”.)

How would I do this with Java reflection? And how can I future-proof it in case I add something between A & B or B & C?

Answer

You have to use getDeclaredFields() repeatedly on each class in the inheritance hierarchy of your object’s class (via getSuperclass()).

However, what you are planning sounds like a nasty violation of the concept of inheritance. The best way of future-proofing would be to avoid this kind of thing entirely. What are you trying to do that you think requires such reflection shenanigans?

Categories
discuss

Can’t run JUnit 4 test case in Eclipse Android project

I am new to Java and am trying to run a unit test on a class I am writing. Eclipse (3.5) created the unit test class for me and added Junit4 to my class path.

My Class:

public class DistanceUtil 
{

public static double metersToMiles( double meters ) 
{
    return 0;
}
public static double metersToKilometers( double meters ) 
{
    return 0;
}

}

My unit test:

public class DistanceUtilTest {

@Test
public final void testMetersToMiles() {
    fail("Not yet implemented"); // TODO
}

@Test
public final void testMetersToKilometers() {
    fail("Not yet implemented"); // TODO
}

}

When I right click on the unit test and select run as Junit Test I get the following:

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  Internal Error (classFileParser.cpp:3075), pid=5564, tid=4940
#  Error: ShouldNotReachHere()
#
# JRE version: 6.0_17-b04
# Java VM: Java HotSpot(TM) Client VM (14.3-b01 mixed mode windows-x86 )
# An error report file with more information is saved as:
# C:UsersGiles RoadnightworkspaceAndroidCycloidhs_err_pid5564.log
#
# If you would like to submit a bug report, please visit:
#   http://java.sun.com/webapps/bugreport/crash.jsp
#

Anyone got an idea how I can fix this?

Thanks

Answer

Having searched Google for an answer, this looks like it might have something to do with Android development tools.

Below are steps taken from this comment thread:

  1. Right click on the project -> run -> run configuration
  2. Select your Junit project
  3. Go to the classpath tab
  4. remove the Android framework entry
  5. select bootstrap entries
  6. click on advanced
  7. select Add Library
  8. Ok
  9. Chose “JRE System Library”
  10. Next
  11. finish
  12. You need to also add the JUnit library so follow the steps 5 to 11 and select the “Junit” instead of “JRE System Library”
  13. You can now run your project as Junit.
Categories
discuss

Determine whether or not there exist two elements in Set S whose sum is exactly x – correct solution?

Taken from Introduction to Algorithms

Describe a Θ(n lg n)-time algorithm that, given a set S of n integers and another integer x, determines whether or not there exist two elements in S whose sum is exactly x.

This is my best solution implemented in Java so far:

    public static boolean test(int[] a, int val) {
    mergeSort(a);

    for (int i = 0; i < a.length - 1; ++i) {
        int diff = (val >= a[i]) ? val - a[i] : a[i] - val;

        if (Arrays.binarySearch(a, i, a.length, diff) >= 0) {
            return true;
        }
    }

    return false;
}

Now my 1st question is: Is this a correct solution? From my understanding, mergeSort should perform the sort in O(n lg n), the loop should take O(n lg n) (n for the iteration multiplied by O(lg n) for the binary search, resulting in O(2n lg n), so it should be correct.

My 2nd question is: Are there any better solutions? Is sorting the array essential?

Answer

Your solution seems fine. Yes you need to sort because its a pre requisite for binary search. You can make a slight modification to your logic as follows:

public static boolean test(int[] a, int val) 
{
    Arrays.sort(a);

    int i = 0;            // index of first element.
    int j = a.length - 1; // index of last element. 

    while(i<j)
    {
        // check if the sum of elements at index i and j equals val, if yes we are done.
        if(a[i]+a[j] == val)
            return true;
        // else if sum if more than val, decrease the sum.
        else if(a[i]+a[j] > val)
            j--;
        // else if sum is less than val, increase the sum.
        else
            i++;
    }
    // failed to find any such pair..return false. 
    return false;
}
Source: stackoverflow
Text is available under the Creative Commons Attribution-ShareAlike License; additional terms may apply. By using this site, you agree to the Privacy Policy, and Copyright Policy. Content is available under CC BY-SA 3.0 unless otherwise noted. The answers/resolutions are collected from stackoverflow, are licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0 © No Copyrights, All Questions are retrived from public domain..