📄 sqlquerytests.java
字号:
compile();
}
protected Object mapRow(ResultSet rs, int rownum)
throws SQLException {
Customer cust = new Customer();
cust.setId(rs.getInt(COLUMN_NAMES[0]));
cust.setForename(rs.getString(COLUMN_NAMES[1]));
return cust;
}
public Customer findCustomer(String id) {
return (Customer) findObject(id);
}
}
CustomerQuery query = new CustomerQuery(mockDataSource);
Customer cust = query.findCustomer("rod");
assertTrue("Customer id was assigned correctly", cust.getId() == 1);
assertTrue("Customer forename was assigned correctly", cust.getForename().equals("rod"));
}
public void testFindCustomerMixed() throws SQLException {
MockControl ctrlResultSet2;
ResultSet mockResultSet2;
MockControl ctrlPreparedStatement2;
PreparedStatement mockPreparedStatement2;
mockResultSet.next();
ctrlResultSet.setReturnValue(true);
mockResultSet.getInt("id");
ctrlResultSet.setReturnValue(1);
mockResultSet.getString("forename");
ctrlResultSet.setReturnValue("rod");
mockResultSet.next();
ctrlResultSet.setReturnValue(false);
mockResultSet.close();
ctrlResultSet.setVoidCallable();
mockPreparedStatement.setObject(1, new Integer(1), Types.INTEGER);
ctrlPreparedStatement.setVoidCallable();
mockPreparedStatement.setString(2, "rod");
ctrlPreparedStatement.setVoidCallable();
mockPreparedStatement.executeQuery();
ctrlPreparedStatement.setReturnValue(mockResultSet);
mockPreparedStatement.getWarnings();
ctrlPreparedStatement.setReturnValue(null);
mockPreparedStatement.close();
ctrlPreparedStatement.setVoidCallable();
ctrlResultSet2 = MockControl.createControl(ResultSet.class);
mockResultSet2 = (ResultSet) ctrlResultSet2.getMock();
mockResultSet2.next();
ctrlResultSet2.setReturnValue(false);
mockResultSet2.close();
ctrlResultSet2.setVoidCallable();
ctrlPreparedStatement2 = MockControl.createControl(PreparedStatement.class);
mockPreparedStatement2 = (PreparedStatement) ctrlPreparedStatement2.getMock();
mockPreparedStatement2.setObject(1, new Integer(1), Types.INTEGER);
ctrlPreparedStatement2.setVoidCallable();
mockPreparedStatement2.setString(2, "Roger");
ctrlPreparedStatement2.setVoidCallable();
mockPreparedStatement2.executeQuery();
ctrlPreparedStatement2.setReturnValue(mockResultSet2);
mockPreparedStatement2.getWarnings();
ctrlPreparedStatement2.setReturnValue(null);
mockPreparedStatement2.close();
ctrlPreparedStatement2.setVoidCallable();
mockConnection.prepareStatement(SELECT_ID_WHERE);
ctrlConnection.setReturnValue(mockPreparedStatement);
mockConnection.prepareStatement(SELECT_ID_WHERE);
ctrlConnection.setReturnValue(mockPreparedStatement2);
ctrlResultSet2.replay();
ctrlPreparedStatement2.replay();
replay();
class CustomerQuery extends MappingSqlQuery {
public CustomerQuery(DataSource ds) {
super(ds, SELECT_ID_WHERE);
declareParameter(
new SqlParameter(COLUMN_NAMES[0], COLUMN_TYPES[0]));
declareParameter(
new SqlParameter(COLUMN_NAMES[1], COLUMN_TYPES[1]));
compile();
}
protected Object mapRow(ResultSet rs, int rownum)
throws SQLException {
Customer cust = new Customer();
cust.setId(rs.getInt(COLUMN_NAMES[0]));
cust.setForename(rs.getString(COLUMN_NAMES[1]));
return cust;
}
public Customer findCustomer(int id, String name) {
return (Customer) findObject(
new Object[] { new Integer(id), name });
}
}
CustomerQuery query = new CustomerQuery(mockDataSource);
Customer cust1 = query.findCustomer(1, "rod");
assertTrue("Found customer", cust1 != null);
assertTrue("Customer id was assigned correctly", cust1.id == 1);
Customer cust2 = query.findCustomer(1, "Roger");
assertTrue("No customer found", cust2 == null);
}
public void testFindTooManyCustomers() throws SQLException {
mockResultSet.next();
ctrlResultSet.setReturnValue(true);
mockResultSet.getInt("id");
ctrlResultSet.setReturnValue(1);
mockResultSet.getString("forename");
ctrlResultSet.setReturnValue("rod");
mockResultSet.next();
ctrlResultSet.setReturnValue(true);
mockResultSet.getInt("id");
ctrlResultSet.setReturnValue(2);
mockResultSet.getString("forename");
ctrlResultSet.setReturnValue("rod");
mockResultSet.next();
ctrlResultSet.setReturnValue(false);
mockResultSet.close();
ctrlResultSet.setVoidCallable();
mockPreparedStatement.setString(1, "rod");
ctrlPreparedStatement.setVoidCallable();
mockPreparedStatement.executeQuery();
ctrlPreparedStatement.setReturnValue(mockResultSet);
mockPreparedStatement.getWarnings();
ctrlPreparedStatement.setReturnValue(null);
mockPreparedStatement.close();
ctrlPreparedStatement.setVoidCallable();
mockConnection.prepareStatement(SELECT_ID_FORENAME_WHERE);
ctrlConnection.setReturnValue(mockPreparedStatement);
replay();
class CustomerQuery extends MappingSqlQuery {
public CustomerQuery(DataSource ds) {
super(ds, SELECT_ID_FORENAME_WHERE);
declareParameter(new SqlParameter(Types.VARCHAR));
compile();
}
protected Object mapRow(ResultSet rs, int rownum)
throws SQLException {
Customer cust = new Customer();
cust.setId(rs.getInt(COLUMN_NAMES[0]));
cust.setForename(rs.getString(COLUMN_NAMES[1]));
return cust;
}
public Customer findCustomer(String id) {
return (Customer) findObject(id);
}
}
CustomerQuery query = new CustomerQuery(mockDataSource);
try {
Customer cust = query.findCustomer("rod");
fail("Should fail if more than one row found");
}
catch (IncorrectResultSizeDataAccessException ex) {
// OK
}
}
public void testListCustomersIntInt() throws SQLException {
mockResultSet.next();
ctrlResultSet.setReturnValue(true);
mockResultSet.getInt("id");
ctrlResultSet.setReturnValue(1);
mockResultSet.getString("forename");
ctrlResultSet.setReturnValue("rod");
mockResultSet.next();
ctrlResultSet.setReturnValue(true);
mockResultSet.getInt("id");
ctrlResultSet.setReturnValue(2);
mockResultSet.getString("forename");
ctrlResultSet.setReturnValue("dave");
mockResultSet.next();
ctrlResultSet.setReturnValue(false);
mockResultSet.close();
ctrlResultSet.setVoidCallable();
mockPreparedStatement.setObject(1, new Integer(1), Types.NUMERIC);
ctrlPreparedStatement.setVoidCallable();
mockPreparedStatement.setObject(2, new Integer(1), Types.NUMERIC);
ctrlPreparedStatement.setVoidCallable();
mockPreparedStatement.executeQuery();
ctrlPreparedStatement.setReturnValue(mockResultSet);
mockPreparedStatement.getWarnings();
ctrlPreparedStatement.setReturnValue(null);
mockPreparedStatement.close();
ctrlPreparedStatement.setVoidCallable();
mockConnection.prepareStatement(SELECT_ID_WHERE);
ctrlConnection.setReturnValue(mockPreparedStatement);
replay();
class CustomerQuery extends MappingSqlQuery {
public CustomerQuery(DataSource ds) {
super(ds, SELECT_ID_WHERE);
declareParameter(new SqlParameter(Types.NUMERIC));
declareParameter(new SqlParameter(Types.NUMERIC));
compile();
}
protected Object mapRow(ResultSet rs, int rownum)
throws SQLException {
Customer cust = new Customer();
cust.setId(rs.getInt(COLUMN_NAMES[0]));
cust.setForename(rs.getString(COLUMN_NAMES[1]));
return cust;
}
}
CustomerQuery query = new CustomerQuery(mockDataSource);
List list = query.execute(1, 1);
assertTrue("2 results in list", list.size() == 2);
for (Iterator itr = list.iterator(); itr.hasNext();) {
Customer cust = (Customer) itr.next();
}
}
public void testListCustomersString() throws SQLException {
mockResultSet.next();
ctrlResultSet.setReturnValue(true);
mockResultSet.getInt("id");
ctrlResultSet.setReturnValue(1);
mockResultSet.getString("forename");
ctrlResultSet.setReturnValue("rod");
mockResultSet.next();
ctrlResultSet.setReturnValue(true);
mockResultSet.getInt("id");
ctrlResultSet.setReturnValue(2);
mockResultSet.getString("forename");
ctrlResultSet.setReturnValue("dave");
mockResultSet.next();
ctrlResultSet.setReturnValue(false);
mockResultSet.close();
ctrlResultSet.setVoidCallable();
mockPreparedStatement.setString(1, "one");
ctrlPreparedStatement.setVoidCallable();
mockPreparedStatement.executeQuery();
ctrlPreparedStatement.setReturnValue(mockResultSet);
mockPreparedStatement.getWarnings();
ctrlPreparedStatement.setReturnValue(null);
mockPreparedStatement.close();
ctrlPreparedStatement.setVoidCallable();
mockConnection.prepareStatement(SELECT_ID_FORENAME_WHERE);
ctrlConnection.setReturnValue(mockPreparedStatement);
replay();
class CustomerQuery extends MappingSqlQuery {
public CustomerQuery(DataSource ds) {
super(ds, SELECT_ID_FORENAME_WHERE);
declareParameter(new SqlParameter(Types.VARCHAR));
compile();
}
protected Object mapRow(ResultSet rs, int rownum)
throws SQLException {
Customer cust = new Customer();
cust.setId(rs.getInt(COLUMN_NAMES[0]));
cust.setForename(rs.getString(COLUMN_NAMES[1]));
return cust;
}
}
CustomerQuery query = new CustomerQuery(mockDataSource);
List list = query.execute("one");
assertTrue("2 results in list", list.size() == 2);
for (Iterator itr = list.iterator(); itr.hasNext();) {
Customer cust = (Customer) itr.next();
}
}
public void testFancyCustomerQuery() throws SQLException {
mockResultSet.next();
ctrlResultSet.setReturnValue(true);
mockResultSet.getInt("id");
ctrlResultSet.setReturnValue(1);
mockResultSet.getString("forename");
ctrlResultSet.setReturnValue("rod");
mockResultSet.next();
ctrlResultSet.setReturnValue(false);
mockResultSet.close();
ctrlResultSet.setVoidCallable();
mockPreparedStatement.setObject(1, new Integer(1), Types.NUMERIC);
ctrlPreparedStatement.setVoidCallable();
mockPreparedStatement.executeQuery();
ctrlPreparedStatement.setReturnValue(mockResultSet);
mockPreparedStatement.getWarnings();
ctrlPreparedStatement.setReturnValue(null);
mockPreparedStatement.close();
ctrlPreparedStatement.setVoidCallable();
mockConnection.prepareStatement(
SELECT_ID_FORENAME_WHERE, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
ctrlConnection.setReturnValue(mockPreparedStatement);
replay();
class CustomerQuery extends MappingSqlQuery {
public CustomerQuery(DataSource ds) {
super(ds, SELECT_ID_FORENAME_WHERE);
setResultSetType(ResultSet.TYPE_SCROLL_SENSITIVE);
declareParameter(new SqlParameter(Types.NUMERIC));
compile();
}
protected Object mapRow(ResultSet rs, int rownum)
throws SQLException {
Customer cust = new Customer();
cust.setId(rs.getInt(COLUMN_NAMES[0]));
cust.setForename(rs.getString(COLUMN_NAMES[1]));
return cust;
}
public Customer findCustomer(int id) {
return (Customer) findObject(id);
}
}
CustomerQuery query = new CustomerQuery(mockDataSource);
Customer cust = query.findCustomer(1);
assertTrue("Customer id was assigned correctly", cust.getId() == 1);
assertTrue("Customer forename was assigned correctly", cust.getForename().equals("rod"));
}
public void testUpdateCustomers() throws SQLException {
mockResultSet.next();
ctrlResultSet.setReturnValue(true);
mockResultSet.getInt("id");
ctrlResultSet.setReturnValue(1);
mockResultSet.updateString(2, "Rod");
ctrlResultSet.setVoidCallable();
mockResultSet.updateRow();
ctrlResultSet.setVoidCallable();
mockResultSet.next();
ctrlResultSet.setReturnValue(true);
mockResultSet.getInt("id");
ctrlResultSet.setReturnValue(2);
mockResultSet.updateString(2, "Thomas");
ctrlResultSet.setVoidCallable();
mockResultSet.updateRow();
ctrlResultSet.setVoidCallable();
mockResultSet.next();
ctrlResultSet.setReturnValue(false);
mockResultSet.close();
ctrlResultSet.setVoidCallable();
mockPreparedStatement.setObject(1, new Integer(2), Types.NUMERIC);
ctrlPreparedStatement.setVoidCallable();
mockPreparedStatement.executeQuery();
ctrlPreparedStatement.setReturnValue(mockResultSet);
mockPreparedStatement.getWarnings();
ctrlPreparedStatement.setReturnValue(null);
mockPreparedStatement.close();
ctrlPreparedStatement.setVoidCallable();
mockConnection.prepareStatement(
SELECT_ID_FORENAME_WHERE_ID, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);
ctrlConnection.setReturnValue(mockPreparedStatement);
replay();
class CustomerUpdateQuery extends UpdatableSqlQuery {
public CustomerUpdateQuery(DataSource ds) {
super(ds, SELECT_ID_FORENAME_WHERE_ID);
declareParameter(new SqlParameter(Types.NUMERIC));
compile();
}
protected Object updateRow(ResultSet rs, int rownum, Map context)
throws SQLException {
rs.updateString(2, "" + context.get(new Integer(rs.getInt(COLUMN_NAMES[0]))));
return null;
}
}
CustomerUpdateQuery query = new CustomerUpdateQuery(mockDataSource);
Map values = new HashMap(2);
values.put(new Integer(1), "Rod");
values.put(new Integer(2), "Thomas");
List customers = query.execute(2, values);
}
private static class StringQuery extends MappingSqlQuery {
public StringQuery(DataSource ds, String sql) {
super(ds, sql);
compile();
}
protected Object mapRow(ResultSet rs, int rownum) throws SQLException {
return rs.getString(1);
}
public String[] run() {
List list = execute();
String[] results = (String[]) list.toArray(new String[list.size()]);
return results;
}
}
private static class Customer {
private int id;
private String forename;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getForename() {
return forename;
}
public void setForename(String forename) {
this.forename = forename;
}
public String toString() {
return "Customer: id=" + id + "; forename=" + forename;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -