@Override public boolean rowDeleted() throws SQLException { try { return _res.rowDeleted(); } catch (SQLException e) { handleException(e); return false; } }
@Override public DbPathEntry rsToPathEntry(ResultSet rs, String prefix) throws SQLException, InterruptedException { if (rs == null) { return null; } try { if (rs.rowDeleted()) { return null; } } catch (SQLFeatureNotSupportedException e) { } long newpathid = rs.getLong(prefix + "pathid"); long newparentid = rs.getLong(prefix + "parentid"); long newrootid = rs.getLong(prefix + "rootid"); if (rs.wasNull()) { newrootid = newpathid; } String newpath = rs.getString(prefix + "path"); if (rs.wasNull()) { return null; } int newtype = rs.getInt(prefix + "type"); DbPathEntry result = new DbPathEntry(newpath, newtype, newpathid, newparentid, newrootid); String t = rs.getString(prefix + "datelastmodified"); if (t == null) { result.setDateLastModified(0); } else { Date d; try { d = sdf.parse(t); result.setDateLastModified(d.getTime()); } catch (ParseException e) { result.setDateLastModified(0); } } result.setSize(rs.getLong(prefix + "size")); result.setCompressedSize(rs.getLong(prefix + "compressedsize")); int newcsum = rs.getInt(prefix + "csum"); if (!rs.wasNull()) { result.setCsum(newcsum); } result.setStatus(rs.getInt(prefix + "status")); return result; }
/** * General test of scrollable cursor functionality. * * <p>When running on SQL Server this test will exercise MSCursorResultSet. When running on Sybase * this test will exercise CachedResultSet. */ public void testCachedCursor() throws Exception { try { dropTable("jTDS_CachedCursorTest"); Statement stmt = con.createStatement(); stmt.execute( "CREATE TABLE jTDS_CachedCursorTest " + "(key1 int NOT NULL, key2 char(4) NOT NULL," + "data varchar(255))\r\n" + "ALTER TABLE jTDS_CachedCursorTest " + "ADD CONSTRAINT PK_jTDS_CachedCursorTest PRIMARY KEY CLUSTERED" + "( key1, key2)"); for (int i = 1; i <= 16; i++) { assertEquals( 1, stmt.executeUpdate( "INSERT INTO jTDS_CachedCursorTest VALUES(" + i + ", 'XXXX','LINE " + i + "')")); } stmt.close(); stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); ResultSet rs = stmt.executeQuery("SELECT * FROM jTDS_CachedCursorTest ORDER BY key1"); assertNotNull(rs); assertEquals(null, stmt.getWarnings()); assertTrue(rs.isBeforeFirst()); assertTrue(rs.first()); assertEquals(1, rs.getInt(1)); assertTrue(rs.isFirst()); assertTrue(rs.last()); assertEquals(16, rs.getInt(1)); assertTrue(rs.isLast()); assertFalse(rs.next()); assertTrue(rs.isAfterLast()); rs.beforeFirst(); assertTrue(rs.next()); assertEquals(1, rs.getInt(1)); rs.afterLast(); assertTrue(rs.previous()); assertEquals(16, rs.getInt(1)); assertTrue(rs.absolute(8)); assertEquals(8, rs.getInt(1)); assertTrue(rs.relative(-1)); assertEquals(7, rs.getInt(1)); rs.updateString(3, "New line 7"); rs.updateRow(); // assertTrue(rs.rowUpdated()); // MS API cursors appear not to support this rs.moveToInsertRow(); rs.updateInt(1, 17); rs.updateString(2, "XXXX"); rs.updateString(3, "LINE 17"); rs.insertRow(); rs.moveToCurrentRow(); rs.last(); // assertTrue(rs.rowInserted()); // MS API cursors appear not to support this Statement stmt2 = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); ResultSet rs2 = stmt2.executeQuery("SELECT * FROM jTDS_CachedCursorTest ORDER BY key1"); rs.updateString(3, "NEW LINE 17"); rs.updateRow(); assertTrue(rs2.last()); assertEquals(17, rs2.getInt(1)); assertEquals("NEW LINE 17", rs2.getString(3)); rs.deleteRow(); rs2.refreshRow(); assertTrue(rs2.rowDeleted()); rs2.close(); stmt2.close(); rs.close(); stmt.close(); } finally { dropTable("jTDS_CachedCursorTest"); } }
public boolean rowDeleted() throws SQLException { return rs.rowDeleted(); }
private void testUpdateDeleteInsert() throws SQLException { Connection c1 = getConnection(); Connection c2 = getConnection(); Statement stat = c1.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE); stat.execute("DROP TABLE IF EXISTS TEST"); stat.execute("CREATE TABLE TEST(ID INT PRIMARY KEY, NAME VARCHAR(255))"); int max = 8; for (int i = 0; i < max; i++) { stat.execute("INSERT INTO TEST VALUES(" + i + ", 'Hello" + i + "')"); } ResultSet rs; rs = stat.executeQuery("SELECT * FROM TEST ORDER BY ID"); rs.next(); assertEquals(0, rs.getInt(1)); rs.moveToInsertRow(); rs.updateInt(1, 100); rs.moveToCurrentRow(); assertEquals(0, rs.getInt(1)); rs = stat.executeQuery("SELECT * FROM TEST"); int j = max; while (rs.next()) { int id = rs.getInt(1); if (id % 2 == 0) { Statement s2 = c2.createStatement(); s2.execute("UPDATE TEST SET NAME = NAME || '+' WHERE ID = " + rs.getInt(1)); if (id % 4 == 0) { rs.refreshRow(); } rs.updateString(2, "Updated " + rs.getString(2)); rs.updateRow(); } else { rs.deleteRow(); } // the driver does not detect it in any case assertFalse(rs.rowUpdated()); assertFalse(rs.rowInserted()); assertFalse(rs.rowDeleted()); rs.moveToInsertRow(); rs.updateString(2, "Inserted " + j); rs.updateInt(1, j); j += 2; rs.insertRow(); // the driver does not detect it in any case assertFalse(rs.rowUpdated()); assertFalse(rs.rowInserted()); assertFalse(rs.rowDeleted()); } rs = stat.executeQuery("SELECT * FROM TEST ORDER BY ID"); while (rs.next()) { int id = rs.getInt(1); String name = rs.getString(2); assertEquals(0, id % 2); if (id >= max) { assertEquals("Inserted " + id, rs.getString(2)); } else { if (id % 4 == 0) { assertEquals("Updated Hello" + id + "+", rs.getString(2)); } else { assertEquals("Updated Hello" + id, rs.getString(2)); } } trace("id=" + id + " name=" + name); } c2.close(); c1.close(); // test scrollable result sets Connection conn = getConnection(); for (int i = 0; i < 5; i++) { testScrollable(conn, i); } conn.close(); }