Hello,

The connection url in the database procedure looks suspicious. Normally, database procedures use the special server-side connection url: "jdbc:default:connection". This ensures that the procedure's work happens inside the same transaction as the calling code. This topic is discussed in the Derby Developer's Guide: http://db.apache.org/derby/docs/10.4/devguide/devguide-single.html#cdevspecial29620

The procedure below opens a new connection to the database. Is there some reason that the procedure does its work in a separate connection/transaction as coded below?

Thanks,
-Rick

sivagururaja wrote:
Hi All,

I am creating the stored procedure in Derby DB. Here it is,

CREATE PROCEDURE insertStud(IN RollNo Integer, in FirstName varchar(10))
PARAMETER STYLE JAVA MODIFIES SQL DATA LANGUAGE JAVA
EXTERNAL NAME 'javadbsp.DBClass.insertStud'

And the method is,

public class DBClass
{
    public static void insertStud(int rollno, String name)
    {
        try
        {
            Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); //or
ClientDriver
            Connection conn =
DriverManager.getConnection("jdbc:derby://localhost:1527/Test", "uname",
"passwd");
            PreparedStatement ps1 = conn.prepareStatement("insert into
SAM.STUD values(?,?)");
            ps1.setInt(1, rollno);
            ps1.setString(2, name);
            ps1.executeUpdate();
            conn.close();
        }
        catch (Exception ex)
        {
            System.out.println("Error: "+ex.getMessage());
        }
} }

My table structure is,

create table "SAM".STUD
(
        ROLLNO INTEGER,
        FIRSTNAME VARCHAR(10)
)

My class is,

public class MyClass1
{
.......
..........
public void insert()
{
try
        {
            Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); // or
ClientDriver
            Connection Con1 =
DriverManager.getConnection("jdbc:derby://localhost:1527/Test", "uname",
"passwd");
            CallableStatement cst = Con1.prepareCall("call
insertStud(?,?)");
            cst.setInt(1, Integer.valueOf(jTextField1.getText().trim()));
            cst.setString(2, jTextField2.getText().trim());
            int i=cst.executeUpdate();
            System.out.println("Rows Updated: "+i);
        }
        catch (Exception ex)
        {
            System.out.println("Error: "+ex.getMessage());
        }
}
......
}

And i install the JAR files as per the document,
http://wiki.apache.org/db-derby/DerbySQLroutines
http://wiki.apache.org/db-derby/DerbySQLroutines
I can able to run the application successful.
But nothing can be inserted.

Please let me know what could be the problem.

Reply via email to