Following code gives an exception; a can't figure out how to get scrollable
cursor for metadata:
import static org.junit.Assert.*;
import java.sql.DriverManager;
import java.sql.SQLException;
import org.apache.derby.client.am.Cursor;
import org.apache.derby.client.am.ResultSet;
import org.apache.derby.iapi.sql.Statement;
import org.apache.derby.iapi.sql.execute.CursorResultSet;
import org.apache.derby.impl.jdbc.EmbedResultSet40;
import org.apache.derby.impl.jdbc.EmbedStatement40;
import org.apache.derbyTesting.functionTests.tests.lang.CursorTest;
import org.apache.derbyTesting.junit.Derby;
import org.hamcrest.core.Is;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
public class DatabaseMetaDataTest {
private static java.sql.Connection derby_conn;
/**
* @throws java.lang.Exception
*/
private static java.sql.DatabaseMetaData metadata;
@BeforeClass
public static void setUpBeforeClass() throws Exception {
derby_conn =
DriverManager.getConnection("jdbc:derby:repository;create=true");
}
/**
* @throws java.lang.Exception
*/
@AfterClass
public static void tearDownAfterClass() throws Exception {
derby_conn.close();
}
/**
* @throws java.lang.Exception
*/
@Before
public void setUp() throws Exception {
Statement stmt = (EmbedStatement40)
derby_conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
metadata = derby_conn.getMetaData();
}
/**
* @throws java.lang.Exception
*/
@After
public void tearDown() throws Exception {
}
/**
* Test method for {...@link
org.apache.derby.client.am.DatabaseMetaData#getSchemaTerm()}.
* @throws SQLException
*/
@Test
public final void testGetSchemaTerm() throws SQLException {
String schemaTerm = metadata.getSchemaTerm();
assertNotNull("...", schemaTerm);
assertTrue(schemaTerm.length() > 0);
}
/**
* Test method for {...@link
org.apache.derby.client.am.DatabaseMetaData#isCatalogAtStart()}.
* @throws SQLException
*/
@Test
public final void testIsCatalogAtStart() throws SQLException {
boolean isAtStart = metadata.isCatalogAtStart();
assertNotNull(isAtStart);
assertTrue(isAtStart);
}
/**
* Test method for {...@link
org.apache.derby.client.am.DatabaseMetaData#getMaxColumnNameLength()}.
* @throws SQLException
*/
@Test
public final void testGetMaxColumnNameLength() throws SQLException {
int length = metadata.getMaxColumnNameLength();
assertNotNull(length);
assertTrue("", length > 0);
assertTrue("", length > 10);
}
/**
* Test method for {...@link
org.apache.derby.client.am.DatabaseMetaData#getMaxColumnsInGroupBy()}.
*/
@Test
public final void testGetMaxColumnsInGroupBy() {
fail("Not yet implemented"); // TODO
}
/**
* Test method for {...@link
org.apache.derby.client.am.DatabaseMetaData#getMaxColumnsInIndex()}.
*/
@Test
public final void testGetMaxColumnsInIndex() {
fail("Not yet implemented"); // TODO
}
/**
* Test method for {...@link
org.apache.derby.client.am.DatabaseMetaData#getMaxColumnsInSelect()}.
*/
@Test
public final void testGetMaxColumnsInSelect() {
fail("Not yet implemented"); // TODO
}
/**
* Test method for {...@link
org.apache.derby.client.am.DatabaseMetaData#getMaxColumnsInTable()}.
*/
@Test
public final void testGetMaxColumnsInTable() {
fail("Not yet implemented"); // TODO
}
/**
* Test method for {...@link
org.apache.derby.client.am.DatabaseMetaData#getSchemas()}.
*/
@Test
public final void testGetSchemas() {
fail("Not yet implemented"); // TODO
}
/**
* Test method for {...@link
org.apache.derby.client.am.DatabaseMetaData#getCatalogs()}.
*/
@Test
public final void testGetCatalogs() {
fail("Not yet implemented"); // TODO
}
/**
* Test method for {...@link
org.apache.derby.client.am.DatabaseMetaData#getColumns(java.lang.String,
java.lang.String, java.lang.String, java.lang.String)}.
* @throws SQLException
*/
@Test
public final void testGetColumns() throws SQLException {
java.sql.ResultSet column_set = metadata.getColumns("APP", null,
"SERVER_SHUTDOWN_TYPE", null);
column_set.relative(2);
String column_name = column_set.getString("COLUMN_NAME");
assertNotNull(column_name);
assertTrue(column_name.length()>0);
//For scrollable result set:
//column_set.absolute(1);
//assertTrue(column_set.first());
//column_set.beforeFirst();
//assertTrue(column_set.next());
//assertTrue(column_set.isFirst());
//For updatable result set:
//column_set.moveToCurrentRow();
//assertTrue(column_set.next());
}
private static int getRowCount(java.sql.ResultSet columnSet) throws
SQLException
{
int rowCount;
int currentRow = columnSet.getRow(); // Get current row
rowCount = columnSet.last() ? columnSet.getRow() : 0; // Determine number
of rows
if (currentRow == 0) // If there was no current row
columnSet.beforeFirst(); // We want next() to go
to first row
else // If there WAS a current row
columnSet.absolute(currentRow); // Restore it
return rowCount;
}
/**
* Test method for {...@link
org.apache.derby.client.am.DatabaseMetaData#getBestRowIdentifier(java.lang.String,
java.lang.String, java.lang.String, int, boolean)}.
*/
@Test
public final void testGetBestRowIdentifier() {
fail("Not yet implemented"); // TODO
}
/**
* Test method for {...@link
org.apache.derby.client.am.DatabaseMetaData#getVersionColumns(java.lang.String,
java.lang.String, java.lang.String)}.
*/
@Test
public final void testGetVersionColumns() {
fail("Not yet implemented"); // TODO
}
/**
* Test method for {...@link
org.apache.derby.client.am.DatabaseMetaData#getPrimaryKeys(java.lang.String,
java.lang.String, java.lang.String)}.
* @throws SQLException
*/
@Test
public final void testGetPrimaryKeys() throws SQLException {
java.sql.ResultSet pk_set = metadata.getPrimaryKeys("APP", null,
"SERVER_SHUTDOWN_TYPE");
assertTrue(getRowCount(pk_set) > 0);
}
/**
* Test method for {...@link
org.apache.derby.client.am.DatabaseMetaData#getImportedKeys(java.lang.String,
java.lang.String, java.lang.String)}.
*/
@Test
public final void testGetImportedKeys() {
fail("Not yet implemented"); // TODO
}
/**
* Test method for {...@link
org.apache.derby.client.am.DatabaseMetaData#getExportedKeys(java.lang.String,
java.lang.String, java.lang.String)}.
*/
@Test
public final void testGetExportedKeys() {
fail("Not yet implemented"); // TODO
}
/**
* Test method for {...@link
org.apache.derby.client.am.DatabaseMetaData#getTypeInfo()}.
*/
@Test
public final void testGetTypeInfo() {
fail("Not yet implemented"); // TODO
}
}
And .next() throws an exception about undefined cursor state:
import static org.junit.Assert.*;
import java.sql.DriverManager;
import java.sql.SQLException;
import org.apache.derby.client.am.Cursor;
import org.apache.derby.client.am.ResultSet;
import org.apache.derby.iapi.sql.Statement;
import org.apache.derby.iapi.sql.execute.CursorResultSet;
import org.apache.derby.impl.jdbc.EmbedResultSet40;
import org.apache.derby.impl.jdbc.EmbedStatement40;
import org.apache.derby.jdbc.EmbeddedDriver;
import org.apache.derbyTesting.functionTests.tests.lang.CursorTest;
import org.apache.derbyTesting.junit.Derby;
import org.hamcrest.core.Is;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
public class DatabaseMetaDataTest {
private static EmbeddedDriver driver;
private static java.sql.Connection derby_conn;
/**
* @throws java.lang.Exception
*/
private static java.sql.DatabaseMetaData metadata;
@BeforeClass
public static void setUpBeforeClass() throws Exception {
driver = new org.apache.derby.jdbc.EmbeddedDriver();
derby_conn = driver.connect("jdbc:derby:repository;create=true", null);
}
/**
* @throws java.lang.Exception
*/
@AfterClass
public static void tearDownAfterClass() throws Exception {
derby_conn.close();
}
/**
* @throws java.lang.Exception
*/
@Before
public void setUp() throws Exception {
derby_conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
metadata = derby_conn.getMetaData();
}
/**
* @throws java.lang.Exception
*/
@After
public void tearDown() throws Exception {
}
/**
* Test method for {...@link
org.apache.derby.client.am.DatabaseMetaData#getSchemaTerm()}.
* @throws SQLException
*/
@Test
public final void testGetSchemaTerm() throws SQLException {
String schemaTerm = metadata.getSchemaTerm();
assertNotNull("...", schemaTerm);
assertTrue(schemaTerm.length() > 0);
}
/**
* Test method for {...@link
org.apache.derby.client.am.DatabaseMetaData#isCatalogAtStart()}.
* @throws SQLException
*/
@Test
public final void testIsCatalogAtStart() throws SQLException {
boolean isAtStart = metadata.isCatalogAtStart();
assertNotNull(isAtStart);
assertTrue(isAtStart);
}
/**
* Test method for {...@link
org.apache.derby.client.am.DatabaseMetaData#getMaxColumnNameLength()}.
* @throws SQLException
*/
@Test
public final void testGetMaxColumnNameLength() throws SQLException {
int length = metadata.getMaxColumnNameLength();
assertNotNull(length);
assertTrue("", length > 0);
assertTrue("", length > 10);
}
/**
* Test method for {...@link
org.apache.derby.client.am.DatabaseMetaData#getMaxColumnsInGroupBy()}.
*/
@Test
public final void testGetMaxColumnsInGroupBy() {
fail("Not yet implemented"); // TODO
}
/**
* Test method for {...@link
org.apache.derby.client.am.DatabaseMetaData#getMaxColumnsInIndex()}.
*/
@Test
public final void testGetMaxColumnsInIndex() {
fail("Not yet implemented"); // TODO
}
/**
* Test method for {...@link
org.apache.derby.client.am.DatabaseMetaData#getMaxColumnsInSelect()}.
*/
@Test
public final void testGetMaxColumnsInSelect() {
fail("Not yet implemented"); // TODO
}
/**
* Test method for {...@link
org.apache.derby.client.am.DatabaseMetaData#getMaxColumnsInTable()}.
*/
@Test
public final void testGetMaxColumnsInTable() {
fail("Not yet implemented"); // TODO
}
/**
* Test method for {...@link
org.apache.derby.client.am.DatabaseMetaData#getSchemas()}.
*/
@Test
public final void testGetSchemas() {
fail("Not yet implemented"); // TODO
}
/**
* Test method for {...@link
org.apache.derby.client.am.DatabaseMetaData#getCatalogs()}.
*/
@Test
public final void testGetCatalogs() {
fail("Not yet implemented"); // TODO
}
/**
* Test method for {...@link
org.apache.derby.client.am.DatabaseMetaData#getColumns(java.lang.String,
java.lang.String, java.lang.String, java.lang.String)}.
* @throws SQLException
*/
@Test
public final void testGetColumns() throws SQLException {
java.sql.ResultSet column_set = metadata.getColumns("APP", null,
"SERVER_SHUTDOWN_TYPE", null);
column_set.relative(2);
String column_name = column_set.getString("COLUMN_NAME");
assertNotNull(column_name);
assertTrue(column_name.length()>0);
//For scrollable result set:
//column_set.absolute(1);
//assertTrue(column_set.first());
//column_set.beforeFirst();
//assertTrue(column_set.next());
//assertTrue(column_set.isFirst());
//For updatable result set:
//column_set.moveToCurrentRow();
//assertTrue(column_set.next());
}
private static int getRowCount(java.sql.ResultSet columnSet) throws
SQLException
{
int rowCount;
int currentRow = columnSet.getRow(); // Get current row
rowCount = columnSet.last() ? columnSet.getRow() : 0; // Determine number
of rows
if (currentRow == 0) // If there was no current row
columnSet.beforeFirst(); // We want next() to go
to first row
else // If there WAS a current row
columnSet.absolute(currentRow); // Restore it
return rowCount;
}
/**
* Test method for {...@link
org.apache.derby.client.am.DatabaseMetaData#getBestRowIdentifier(java.lang.String,
java.lang.String, java.lang.String, int, boolean)}.
*/
@Test
public final void testGetBestRowIdentifier() {
fail("Not yet implemented"); // TODO
}
/**
* Test method for {...@link
org.apache.derby.client.am.DatabaseMetaData#getVersionColumns(java.lang.String,
java.lang.String, java.lang.String)}.
*/
@Test
public final void testGetVersionColumns() {
fail("Not yet implemented"); // TODO
}
/**
* Test method for {...@link
org.apache.derby.client.am.DatabaseMetaData#getPrimaryKeys(java.lang.String,
java.lang.String, java.lang.String)}.
* @throws SQLException
*/
@Test
public final void testGetPrimaryKeys() throws SQLException {
java.sql.ResultSet pk_set = metadata.getPrimaryKeys("APP", null,
"SERVER_SHUTDOWN_TYPE");
assertTrue(getRowCount(pk_set) > 0);
}
/**
* Test method for {...@link
org.apache.derby.client.am.DatabaseMetaData#getImportedKeys(java.lang.String,
java.lang.String, java.lang.String)}.
*/
@Test
public final void testGetImportedKeys() {
fail("Not yet implemented"); // TODO
}
/**
* Test method for {...@link
org.apache.derby.client.am.DatabaseMetaData#getExportedKeys(java.lang.String,
java.lang.String, java.lang.String)}.
*/
@Test
public final void testGetExportedKeys() {
fail("Not yet implemented"); // TODO
}
/**
* Test method for {...@link
org.apache.derby.client.am.DatabaseMetaData#getTypeInfo()}.
*/
@Test
public final void testGetTypeInfo() {
fail("Not yet implemented"); // TODO
}
}
In the mean time this code from Derby tests works fine:
DatabaseMetaDataTest.java:
public void testGetColumnsReadOnly() throws Exception
{
ResultSet[] rs = getColumns(null, null, null, null);
for ( int j =0 ; j<2 ; j++) {
checkColumnsShape(rs[j], j);
crossCheckGetColumnsAndResultSetMetaData(rs[j], false, j);
}
}
Please help anyone. John