Monday, May 9, 2011

Published 5/09/2011 by with 1 comment

interface methods cannot have body

Java error "interface methods cannot have body" occurs when body of the method within an interface is defined.

See the code below:

public interface MyInterface
{
public void myMetod()
{
}
}

Here the method myMethod has body starting at the symbol { and ending at }. An interface can have abstract methods (method without any body). The class that implements the interface defines the body of the interface methods.

So to remove the error, the method signature/header will end by ; (semi colon) and there will be no body section for the method. Below is the correct code:



public interface MyInterface
{
public void myMetod();
}


Read More
    email this       edit
Published 5/09/2011 by with 0 comment

interface expected here

The code below leads to an error "interface expected here"

public interface MyInterface extends Thread
{
}

Here an interface is created (MyInterface) and it inherits(extends) the Thread class which is not possible at all. Why? Because an interface can inherit only another interface, not any class. As Thread is a class, it cannot be inherited by any interface.

The code below is correct as the interface inherits another interface Runnable



public interface MyInterface extends Runnable
{
}


A similar type of error is posted at  no interface expected here

Read More
    email this       edit
Published 5/09/2011 by with 0 comment

no interface expected here

Any Java code as below will lead an error "no interface expected here"

import java.io.Serializable;
public class Person extends Serializable
{
private String firstName;
private String lastName;
//...
}

See that, here Person is a class (public class Person) and it inherits an interface (extends Serializable). Note that a class can inherit another class only, not any interface. A class can implement one or more interface only. Serializable is an interface, not a class.

Actually the correct code of the above will be:


import java.io.Serializable;
public class Person implements Serializable
{
private String firstName;
private String lastName;
//...
}

Here it is notable that, only an interface can inherit another interface.

A similar type of error is posted at interface expected here
Read More
    email this       edit

Thursday, May 5, 2011

Published 5/05/2011 by with 2 comments

invalid method declaration; return type required

The Java error "invalid method declaration; return type required" can occur for any of the following reasons:

1. You are trying to define a constructor (of course without any return type; not even void)  but the constructor name is not given same as the class name.

See the wrong code below:

public class Employee
{
 private int id;
 private String name;
 public employee(int id,String name) // constructor name is not same as the class name.
 {
  this.id = id;
  this.name = name;
 }
}


So check the spelling of the constructor name and also note that Java is a case sensitive language.

2. If you are really defining a method (not a constructor) you have forgotten to declare the return type as the wrong code given below:


public class Test
{
public aMethod() // no return type given
{
System.out.println("This is a method");
}
}

The correct code is:


public class Test
{
public void aMethod() // return type void is given now
{
System.out.println("This is a method");
}
}


Read More
    email this       edit

Tuesday, May 3, 2011

Published 5/03/2011 by with 3 comments

recursive constructor invocation

If a constructor calls itself, then the error message "recursive constructor invocation" is shown. It may happen when we overload constructors and call the wrong constructor (itself) accidentally.

See the wrong code below:
public class Employee
{
  private int id;
  private String name;
  public Employee(int id,String name)
  {
    this.id = id;
    this.name = name;
  }
  public Employee(int id)
  {
    this(id); 
    /* this(id) calls the constructor having one parameter of int type. Thus this is calling itself.*/
  }
  public Employee()
  {
  }
}


In the above code, there are three constructors:
i) Employee(int id,String name)
ii) Employee(int id)
iii) Employee()

Within the second constructor, we have written this(id) which means it calls a constructor with one int parameter and see that it is the constructor itself. It means we have not invoked the right constructor. If we want to invoke the first constructor Employee(int id,String name) within the second constructor we should write this(id,null). We are providing null for the String name as no value is available for the name variable in the second constructor but now it calls the first constructor Employee(int id,String name) as we have provided  two parameters now.

See the corrected code below:

public class Employee
{
  private int id;
  private String name;
  public Employee(int id,String name)
  {
    this.id = id;
    this.name = name;
  }
  public Employee(int id)
  {
    this(id,null); // this(id,null) calls another constructor having two parameters
  }
  public Employee()
  {
  }
}

Summary:

If you see the error message "recursive constructor invocation", check that you have provided correct no and type of parameters while calling one constructor in another one.
Read More
    email this       edit

Friday, April 15, 2011

Published 4/15/2011 by with 0 comment

java.sql.SQLException: Access denied for user

The full error message may be :

java.sql.SQLException: Access denied for user 'root'@'localhost' (using password : YES)

or


java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: NO)

When we try to connect to a database through JDBC with wrong username or password - we see this error message.

See the sample code below:

Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/DatabaseName","root","mypassword");

In the above code, root is the username and mypassword is the password. If the username root or the password is not correct we see this error message "java.sql.SQLException: Access denied for user 'root'@'localhost' (using password : YES)".

If the password is not provided (blank password) as the code below but the user has password we see the error message "java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: NO)"

Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/DatabaseName","root","");
If you are using JPA with eclipselink/toplink or other, correct the username and password in the persistence.xml file of your project.

persistence.xml may look like below:


<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
  <persistence-unit name="MyPersistenceUnitPU" transaction-type="RESOURCE_LOCAL">
    <provider>oracle.toplink.essentials.PersistenceProvider</provider>
    <properties>
      <property name="toplink.jdbc.user" value="root"/>
      <property name="toplink.jdbc.password" value="mypassword"/>
      <property name="toplink.jdbc.url" value="jdbc:mysql://localhost:3306/DatabaseName"/>
      <property name="toplink.jdbc.driver" value="com.mysql.jdbc.Driver"/>
    </properties>
  </persistence-unit>
</persistence>

Read More
    email this       edit
Published 4/15/2011 by with 0 comment

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown database

Trying to connect to a MySQL server from Java? But seeing the error "Unknown database"?

The reason is that the database does not exist in the MySQL server. You might have accidentally misspelled the database name in the JDBC connection url.

See the code below:
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/sales","username","password");

Here sales is the database name. If you misspelled this or the database sales does not exist in the server, you see this error message.

Read More
    email this       edit
Published 4/15/2011 by with 0 comment

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure


This error message may include the following text also:

"The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server."


When we try to connect to a MySQL server "Communications link failure" error may occur for any of the following errors:

i) MySQL server is not running. Check for this and run the sever if it is stopped.

ii) Host name is wrong: If the server is running in the same computer, the correct host name is localhost otherwise it is a valid IP address or computer name.

iii) Wrong port no given : By default MySQL server runs in port 3306. If it is different, check that correct port no is given.


Sample code:

public static Connection getConnection()
{
Connection connection = null;
try
{
Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/database","username","password");
System.out.println("Connection successful");
}
catch(ClassNotFoundException cnfe)
{
System.err.println("MySQL driver not found");
cnfe.printStackTrace();
}
catch(SQLException sqle)
{
System.err.println("Database/Connection error");
sqle.printStackTrace();
}

return connection;
}



Read More
    email this       edit
Published 4/15/2011 by with 2 comments

ClassNotFoundException: com.mysql.jdbc.Driver

This error occurs when the required JDBC driver file is not in the CLASSPATH. Also, if the driver name is not correct ClassNotFoundException occurs. To solve this problem, at first check the driver name; if the driver name is correct, do one of the followings as per requirement.

i) Add an entry for the driver file (mysql-connector-java-5.1.10.jar, for example) in the CLASSPATH variable.

or

ii) If you are not familiar with the CLASSPATH variable, place the mysql-connector-java-5.1.10.jar file in \jre\lib\ext folder in the JDK install directory (for example C:\Program Files\Java\jdk1.6.0_20\jre\lib\ext)

or

iii) If you are doing this in NetBeans or other IDEs, add MySQL JDBC Driver Library in the project.
Read More
    email this       edit

Sunday, April 10, 2011

Published 4/10/2011 by with 1 comment

call to super must be first statement in constructor

The error message is very clear actually:

i) We can call super in the constructor of a subclass
ii) If we call super in the constructor of a subclass, it must be the first statement in that constructor; i.e, before writing any other statement we call to super must be made.

It is mentionable that, super(parameters) calls the constructor of the super class.

See the code below:

The super class...


public class Employee
{
private int id;
private String name;
public Employee()
{
}
public Employee(int id,String name)
{
this.id = id;
this.name = name;
}
}

The subclass...


public class SalariedEmployee extends Employee
{
private double salary;
public SalariedEmployee()
{
}
public SalariedEmployee(int id,String name,double salary)
{
this.salary = salary; //this is the first statement now
super(id,name); //error : call to super must be first statement in constructor
}
}

The correct subclass will be...


public class SalariedEmployee extends Employee
{
private double salary;
public SalariedEmployee()
{
}
public SalariedEmployee(int id,String name,double salary)
{
super(id,name); // now call to super is the first statement in the constructor
this.salary = salary; // it is now the second statement
}
}



Read More
    email this       edit