Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Starting Derby Programmatically

Please have a look at the following code

DataBaseConnector.java

 import java.sql.*;
 import javax.swing.*;

    public class DataBaseConnector
    {
        private Connection con;

        public DataBaseConnector()
        {

        }

        private boolean createConnection()
        {
            try
            {
                Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
                con = DriverManager.getConnection("jdbc:derby://localhost:1527/contact;create=true","yohanrw","knight");
            }
            catch(Exception e)
            {      
                System.out.println("Error getConnection");
                e.printStackTrace();
                JOptionPane.showMessageDialog(null,e.getLocalizedMessage());
                return false;
            }
            return true;   
        }

        private void closeConnection()
        {
            try
            {
                con.close();
            }
            catch(Exception e)
            {
                JOptionPane.showMessageDialog(null,e.getLocalizedMessage());
            }
        }


        public void insertData(int id, String firstName, String lastName)
        {
            createConnection();
            try
            {
                PreparedStatement ps = con.prepareStatement("insert into APP.FRIENDS values(?,?,?)");
                ps.setInt(1, id);
                ps.setString(2, firstName);
                ps.setString(3, lastName);

                int result = ps.executeUpdate();

                if(result>0)
                {
                    JOptionPane.showMessageDialog(null,"Data Inserted");
                }
                else
                {
                    JOptionPane.showMessageDialog(null,"Something Happened");
                }
            }
            catch(Exception e)
            {
                e.printStackTrace();
                JOptionPane.showMessageDialog(null,e.getLocalizedMessage());
            }
            finally
            {
                closeConnection();
            }
        }

        public void viewData()
        {
            createConnection();

            try
            {
                Statement st = con.createStatement();
                ResultSet rs = st.executeQuery("select * from APP.FRIENDS");

                StringBuffer sb = new StringBuffer("");

                while(rs.next())
                {
                    sb.append(rs.getInt(1)+"\n");
                    sb.append(rs.getString(2)+"\n");
                    sb.append(rs.getString(3)+"\n");


                }

                JOptionPane.showMessageDialog(null,sb);
            }
            catch(Exception e)
            {



            }
        }


    }

DatabaseUI

import java.awt.event.*;
import javax.swing.*;
import java.awt.*;

public class DatabaseUI extends JFrame
{
    private JLabel firstName, id, lastName;
    private JTextField idTxt, firstNameTxt, lastNameTxt;
    private JButton ok, view;

    public DatabaseUI()
    {
     firstName = new JLabel("First Name: ");
     lastName = new JLabel("Last Name: ");
     id = new JLabel("ID: ");

     firstNameTxt = new JTextField(10);
     lastNameTxt = new JTextField(10);
     idTxt = new JTextField(10);

     ok = new JButton("ADD");
     ok.addActionListener(new OKAction());
     view = new JButton("View");
     view.addActionListener(new ViewAction());

     JPanel centerPanel = new JPanel();
     centerPanel.setLayout(new GridLayout(4,2));
     centerPanel.add(id);
     centerPanel.add(idTxt);
     centerPanel.add(firstName);
     centerPanel.add(firstNameTxt);
     centerPanel.add(lastName);
     centerPanel.add(lastNameTxt);
     centerPanel.add(view);
     centerPanel.add(ok);

     getContentPane().add(centerPanel,"Center");


     this.pack();
     this.setVisible(true);
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


    }

    private class OKAction implements ActionListener
    {
        public void actionPerformed(ActionEvent ae)
        {
            DataBaseConnector db = new DataBaseConnector();

            int id = Integer.parseInt(idTxt.getText());

            db.insertData(id, firstNameTxt.getText().trim(), lastNameTxt.getText().trim());
        }
    }

    private class ViewAction implements ActionListener
    {
        public void actionPerformed(ActionEvent ae)
        {
            DataBaseConnector db = new DataBaseConnector();

            db.viewData();
        }
    }



    public static void main(String[]args)
    {
        new DatabaseUI();
    }
}

In this case, I need to start the derby manually (I am using NetBeans) by right clicking clicking on database node > start server. This is an embedded database, which means I am taking this from one machine to another and willing to start just by double clicking on the jar file, and not configuring database in each and every machine and starting them manually. But, if I didn't start the database manually, I get an error

java.sql.SQLNonTransientConnectionException: java.net.ConnectException : Error connecting to server localhost on port 1527 with message Connection refused: connect.

No matter even inside NetBeans, if I didn't start it manually, the error comes. How I can start the Derby inside my program, without manually starting it? I have tried some ways like "create=true" parameter, NetworkServer.start(), but no good. However I am not sure whether I did it correctly.

like image 371
PeakGen Avatar asked Oct 01 '12 06:10

PeakGen


People also ask

Is Derby supported by JPA starter?

To include derby into the project, All you have to do is to add the Derby and JPA Starter dependencies from Spring Boot.

How do I start the Apache Derby?

Installation of DerbyDownload the latest Derby version from the Apache website http://db.apache.org/derby/. Choose the bin distribution and extract this zip to a directory of your choice. Also make the Derby tools available in your path: Set the environment variable DERBY_HOME to the Derby installation directory.

Does Derby use SQL?

Derby is a full-featured, open-source relational database management system (RDBMS) implemented in Java and as the name suggests it is developed by Apache Software Foundations. It is based on Java, JDBC and SQL standards. Derby is easy to install, deploy, and use.

How do I run a SQL file in Derby?

Right-click the restaurants. sql file in the Package Explorer view and select Apache Derby, Run SQL Script using 'ij'. The Console view shows the SQL commands contained in the file and executing in ij along with the output of the commands.


1 Answers

This is a embedded database, which means I am taking this from one machine to another and willing to start just by double clicking on the jar file,

In the case of derby, an embedded database means that the database runs in the JVM and writes to the file system. Which implies that you can move the jar file around like you want, but if you use an embedded database, then each machine that you run the program on will have its own separate database, and one and only one JVM can use that database at a time. Is that what you want?

If so, the problem is the URL that the program uses. "jdbc:derby://localhost:1527/contact;create=true" is a URL that tells DriverManager to connect to a remote database. It doesn't matter that program loads the embedded driver first.

An embedded URL in Derby looks something like this. jdbc:derby:bar;create=true which will use an embedded database in the bar directory off of the Derby system home or current working directory. For more information on embedded urls, see here connecting to a file-based derby database.

like image 181
Bill Avatar answered Sep 22 '22 06:09

Bill