0

I downloaded sample Derby application source code. I added to my project all the jars associated with Derby. Unfortunately when I run the application I get enormous exceptions stack. What is the reason for it?

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSetMetaData;


public class Restaurants
{
    private static String dbURL = "jdbc:derby://localhost:1526/myDB;create=true;user=me;password=mine";
    private static String tableName = "restaurants";
    // jdbc Connection
    private static Connection conn = null;
    private static Statement stmt = null;

    public static void main(String[] args)
    {
        createConnection();
        insertRestaurants(5, "LaVals", "Berkeley");
        selectRestaurants();
        shutdown();
    }

    private static void createConnection()
    {
        try
        {
            Class.forName("org.apache.derby.jdbc.ClientDriver").newInstance();
            //Get a connection
            conn = DriverManager.getConnection(dbURL); 
        }
        catch (Exception except)
        {
            except.printStackTrace();
        }
    }

    private static void insertRestaurants(int id, String restName, String cityName)
    {
        try
        {
            stmt = conn.createStatement();
            stmt.execute("insert into " + tableName + " values (" +
                    id + ",'" + restName + "','" + cityName +"')");
            stmt.close();
        }
        catch (SQLException sqlExcept)
        {
            sqlExcept.printStackTrace();
        }
    }

    private static void selectRestaurants()
    {
        try
        {
            stmt = conn.createStatement();
            ResultSet results = stmt.executeQuery("select * from " + tableName);
            ResultSetMetaData rsmd = results.getMetaData();
            int numberCols = rsmd.getColumnCount();
            for (int i=1; i<=numberCols; i++)
            {
                //print Column Names
                System.out.print(rsmd.getColumnLabel(i)+"\t\t");  
            }

            System.out.println("\n-------------------------------------------------");

            while(results.next())
            {
                int id = results.getInt(1);
                String restName = results.getString(2);
                String cityName = results.getString(3);
                System.out.println(id + "\t\t" + restName + "\t\t" + cityName);
            }
            results.close();
            stmt.close();
        }
        catch (SQLException sqlExcept)
        {
            sqlExcept.printStackTrace();
        }
    }

    private static void shutdown()
    {
        try
        {
            if (stmt != null)
            {
                stmt.close();
            }
            if (conn != null)
            {
                DriverManager.getConnection(dbURL + ";shutdown=true");
                conn.close();
            }           
        }
        catch (SQLException sqlExcept)
        {

        }

    }
}

I get:

java.sql.SQLNonTransientConnectionException: java.net.ConnectException: Błąd podczas łączenia z serwerem localhost na porcie 1,526 z komunikatem Connection refused: connect.
    at org.apache.derby.client.am.SQLExceptionFactory.getSQLException(Unknown Source)
    at org.apache.derby.client.am.SqlException.getSQLException(Unknown Source)
    at org.apache.derby.jdbc.ClientDriver.connect(Unknown Source)
    at java.sql.DriverManager.getConnection(DriverManager.java:664)
    at java.sql.DriverManager.getConnection(DriverManager.java:270)
    at zad1.Restaurants.createConnection(Restaurants.java:33)
    at zad1.Restaurants.main(Restaurants.java:20)
Caused by: ERROR 08001: java.net.ConnectException: Błąd podczas łączenia z serwerem localhost na porcie 1,526 z komunikatem Connection refused: connect.
    at org.apache.derby.client.net.NetAgent.<init>(Unknown Source)
    at org.apache.derby.client.net.NetConnection.newAgent_(Unknown Source)
    at org.apache.derby.client.am.ClientConnection.<init>(Unknown Source)
    at org.apache.derby.client.net.NetConnection.<init>(Unknown Source)
    at org.apache.derby.client.net.ClientJDBCObjectFactoryImpl.newNetConnection(Unknown Source)
    ... 5 more
Caused by: java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.connect0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:345)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)
    at java.net.Socket.connect(Socket.java:538)
    at java.net.Socket.<init>(Socket.java:434)
    at java.net.Socket.<init>(Socket.java:211)
    at javax.net.DefaultSocketFactory.createSocket(SocketFactory.java:271)
    at org.apache.derby.client.net.OpenSocketAction.run(Unknown Source)
    at org.apache.derby.client.net.OpenSocketAction.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    ... 10 more
Exception in thread "main" java.lang.NullPointerException
    at zad1.Restaurants.insertRestaurants(Restaurants.java:45)
    at zad1.Restaurants.main(Restaurants.java:21)
Yoda
  • 17,363
  • 67
  • 204
  • 344
  • You're not running a Derby server. Connection is refused because there's nothing that would be accepting your connection. – Kayaman Jan 04 '16 at 20:41
  • @Kayaman I thought that `create=true` in `private static String dbURL = "jdbc:derby://localhost:1526/myDB;create=true;user=me;password=mine";` will create a server. How to create server by Java(not via cmd). – Yoda Jan 04 '16 at 20:45
  • @Kayaman How to start Derby server? I cannot install Eclipse plugin to do it, there is no link to it available. – Yoda Jan 04 '16 at 20:53
  • The `create=true` refers to a `database` being created. If there's no server, there's nobody who can create the database. You can't connect to an empty port and expect something to happen. – Kayaman Jan 04 '16 at 21:00
  • @Kayaman can I somehow start the server outside the cmd(tried it twice, according to the official tutorial, doesn't work). – Yoda Jan 04 '16 at 21:01
  • @Kayaman Here they don't show how to start a server on a specified socket http://db.apache.org/derby/papers/DerbyTut/ns_intro.html – Yoda Jan 04 '16 at 21:04
  • I recommend you look into `JavaDB`. It's essentially the same as derby (in fact it *is* derby), except it's included by default in the JDK and the documentation is probably better. – Kayaman Jan 04 '16 at 21:19
  • @Kayaman I am forced to use Derby and Java. I left Java in favour of C# and Entity Framework few years ago because of such problems as this one ; (. – Yoda Jan 04 '16 at 21:23
  • @Yoda that's an ancient tutorial link. Try this one: http://db.apache.org/derby/docs/10.12/getstart/ – Bryan Pendleton Jan 04 '16 at 23:15

0 Answers0