dbmet.getColumns() will it return a new resultset with default attributes?

i have an applicaiton and my problem is this,

i am creating a resultset (rs) with type_scroll_sentive and concur_updatable attributes and executing it to list the contents of a table.

then

dbmeta = conn.getMetaData();

rs = dbmeta.getColumns(" "," "," ", "%");

this rs is the same resultset which is used before. now, what i want to know is that, whether the reusultset returned by getColumns() will be a new resutlset with default attributes(like type_forward_only, etc) or the properties mentioned above will work with this rs.(resultset returned by getColumns()).......

please reply ASAP.

[636 byte] By [vinney_143a] at [2007-11-27 6:34:53]
# 1

The resultset returned by getColumns() will be a new resutlset with default attributes.

If you would like to use the first resultSet (with type_scroll_sentive and concur_updatable attributes), then you have just to use : ResultSetMetaData rsmd = yourResultSet.getMeatData();

See http://java.sun.com/j2se/1.4.2/docs/api/java/sql/ResultSet.html#getMetaData() and http://java.sun.com/j2se/1.4.2/docs/api/java/sql/ResultSetMetaData.html.

You can then use the ResultSetMetaData object to get all information about your db table columns.

java_2006a at 2007-7-12 18:01:33 > top of Java-index,Database Connectivity,Java Database Connectivity (JDBC)...
# 2

.....

......

....

dbmeta = conn.getMetaData();

rs = dbmeta.getColumns("", "", "", "%");

ResultSetMetaData rsMD = rs.getMetaData();

System.out.println("Fetching rows...");

rowNo = 0;

boolean ii = rs.next();

System.out.println("\n RS state: "+ii);

rs.first();

while (rs.next())

{

rowNo++;

System.out.println("");

System.out.println("Printing Row " + rowNo + " using getString(), getObject()");

for (int j=1; j <= rsMD.getColumnCount(); j++)

{

System.out.println("Column " + j + " - " + rs.getString(j) + "," + rs.getObject(j));

}

}

System.out.println("");

System.out.println("Printing ResultSetMetaData ...");

System.out.println("No. of Columns " + rsMD.getColumnCount());

for (int j = 1; j <= rsMD.getColumnCount(); j++)

{

System.out.println("Column " + j + " Data Type: " + rsMD.getColumnTypeName(j) + " Name: " + rsMD.getColumnName(j));

}

System.out.println("");

System.out.println("End of Data");

rs.close();

stmt.close();

conn.close();

}

catch(Exception e3)

{

e3.printStackTrace();

}

}

}

here.... i have user resultsetmetadata as you said with my old resultset object....... but still i am getting an exception like........

java.sql.SQLException: ResultSet type is TYPE_FORWARD_ONLY............

why is that so? i haven't included full program here.!

Thanks very much for the reply.........!

Message was edited by:

vinney_143

vinney_143a at 2007-7-12 18:01:33 > top of Java-index,Database Connectivity,Java Database Connectivity (JDBC)...
# 3

>dbmeta = conn.getMetaData();

>rs = dbmeta.getColumns("", "", "", "%");

>ResultSetMetaData rsMD = rs.getMetaData();

Don't use the result set with your this code:rs = dbmeta.getColumns("", "", "", "%");

Use yourCustomResultSet.getMetaData();

where yourCustomResultSet is the scrollable one (that you already have..)

java_2006a at 2007-7-12 18:01:33 > top of Java-index,Database Connectivity,Java Database Connectivity (JDBC)...
# 4

import java.sql.*;

public class test

{

public static void main(String args[])

{

Connection conn=null;

Statement stmt=null,stmt1=null;

ResultSet rs=null;

DatabaseMetaData dbmeta=null;

int rowNo;

try

{

Class.forName("");

conn = DriverManager.getConnection("");

stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);

try

{

stmt.executeUpdate("drop table test");

System.out.println("\n Table Dropped...");

}

catch(Exception e1)

{

e1.printStackTrace();

}

stmt.executeUpdate("create table test(c1 int, c2 varchar(20), c3 double precision)");

System.out.println("\n Table Created...");

stmt.executeUpdate("insert into test values(1, 'hi', 123.45)");

stmt.executeUpdate("insert into test values(2, 'bi', 345.27)");

stmt.executeUpdate("insert into test values(3, 'fi', 678.28)");

System.out.println("\n Table Populated...");

rs = stmt.executeQuery("select * from test");

while(rs.next())

{

System.out.println(rs.getInt(1)+""+rs.getString(2)+""+rs.getFloat(3));

}

dbmeta = conn.getMetaData();

rs = dbmeta.getColumns("super", "super", "test", "%");

ResultSetMetaData rsMD = rs.getMetaData();

System.out.println("Fetching rows...");

rowNo = 0;

boolean ii = rs.next();

System.out.println("\n RS state: "+ii);

rs.first();

while (rs.next())

{

rowNo++;

System.out.println("");

System.out.println("Printing Row " + rowNo + " using getString(), getObject()");

for (int j=1; j <= rsMD.getColumnCount(); j++)

{

System.out.println("Column " + j + " - " + rs.getString(j) + "," + rs.getObject(j));

}

}

System.out.println("");

System.out.println("Printing ResultSetMetaData ...");

System.out.println("No. of Columns " + rsMD.getColumnCount());

for (int j = 1; j <= rsMD.getColumnCount(); j++)

{

System.out.println("Column " + j + " Data Type: " + rsMD.getColumnTypeName(j) + " Name: " + rsMD.getColumnName(j));

}

System.out.println("");

System.out.println("End of Data");

rs.close();

stmt.close();

conn.close();

}

catch(Exception e3)

{

e3.printStackTrace();

}

}

}

i have used my old resultset only........ you check out this program and as you could see, i have used what you suggested! still the exception comes from rs.first().........?

thanks in advance..............!

vinney_143a at 2007-7-12 18:01:33 > top of Java-index,Database Connectivity,Java Database Connectivity (JDBC)...