📄 testmvcc1.java
字号:
s1.execute("INSERT INTO TEST VALUES(1, 'Hello'), (2, 'World')");
test(s2, "SELECT COUNT(*) FROM TEST", "0");
c1.commit();
test(s2, "SELECT COUNT(*) FROM TEST", "2");
s1.execute("INSERT INTO TEST VALUES(3, '!')");
c1.rollback();
test(s2, "SELECT COUNT(*) FROM TEST", "2");
s1.execute("DROP TABLE TEST");
c1.commit();
s1.execute("CREATE TABLE TEST(ID INT PRIMARY KEY, NAME VARCHAR)");
s1.execute("INSERT INTO TEST VALUES(1, 'Hello')");
s1.execute("DELETE FROM TEST");
test(s2, "SELECT COUNT(*) FROM TEST", "0");
c1.commit();
test(s2, "SELECT COUNT(*) FROM TEST", "0");
s1.execute("DROP TABLE TEST");
c1.commit();
s1.execute("CREATE TABLE TEST(ID INT IDENTITY, NAME VARCHAR)");
s1.execute("INSERT INTO TEST(NAME) VALUES('Ruebezahl')");
test(s2, "SELECT COUNT(*) FROM TEST", "0");
test(s1, "SELECT COUNT(*) FROM TEST", "1");
s1.execute("DROP TABLE TEST");
c1.commit();
s1.execute("CREATE TABLE TEST(ID INT IDENTITY, NAME VARCHAR)");
s1.execute("INSERT INTO TEST(NAME) VALUES('Ruebezahl')");
s1.execute("INSERT INTO TEST(NAME) VALUES('Ruebezahl')");
s1.execute("DROP TABLE TEST");
c1.commit();
s1.execute("CREATE TABLE TEST(ID INT PRIMARY KEY, NAME VARCHAR)");
s1.execute("INSERT INTO TEST VALUES(1, 'Hello')");
c1.commit();
s1.execute("DELETE FROM TEST WHERE ID=1");
c1.rollback();
s1.execute("DROP TABLE TEST");
c1.commit();
Random random = new Random(1);
s1.execute("CREATE TABLE TEST(ID INT IDENTITY, NAME VARCHAR)");
Statement s;
Connection c;
for (int i = 0; i < 1000; i++) {
if (random.nextBoolean()) {
s = s1;
c = c1;
} else {
s = s2;
c = c2;
}
switch (random.nextInt(5)) {
case 0:
s.execute("INSERT INTO TEST(NAME) VALUES('Hello')");
break;
case 1:
s.execute("UPDATE TEST SET NAME=" + i + " WHERE ID=" + random.nextInt(i));
break;
case 2:
s.execute("DELETE FROM TEST WHERE ID=" + random.nextInt(i));
break;
case 3:
c.commit();
break;
case 4:
c.rollback();
break;
default:
}
s1.execute("SELECT * FROM TEST ORDER BY ID");
s2.execute("SELECT * FROM TEST ORDER BY ID");
}
c2.rollback();
s1.execute("DROP TABLE TEST");
c1.commit();
c2.commit();
random = new Random(1);
s1.execute("CREATE TABLE TEST(ID INT PRIMARY KEY, NAME VARCHAR)");
for (int i = 0; i < 1000; i++) {
if (random.nextBoolean()) {
s = s1;
c = c1;
} else {
s = s2;
c = c2;
}
switch (random.nextInt(5)) {
case 0:
s.execute("INSERT INTO TEST VALUES(" + i + ", 'Hello')");
break;
case 1:
try {
s.execute("UPDATE TEST SET NAME=" + i + " WHERE ID=" + random.nextInt(i));
} catch (SQLException e) {
check(e.getErrorCode(), ErrorCode.CONCURRENT_UPDATE_1);
}
break;
case 2:
s.execute("DELETE FROM TEST WHERE ID=" + random.nextInt(i));
break;
case 3:
c.commit();
break;
case 4:
c.rollback();
break;
default:
}
s1.execute("SELECT * FROM TEST ORDER BY ID");
s2.execute("SELECT * FROM TEST ORDER BY ID");
}
c2.rollback();
s1.execute("DROP TABLE TEST");
c1.commit();
c2.commit();
s1.execute("CREATE TABLE TEST(ID INT, NAME VARCHAR)");
s1.execute("INSERT INTO TEST VALUES(1, 'Hello')");
test(s2, "SELECT COUNT(*) FROM TEST WHERE NAME!='X'", "0");
test(s1, "SELECT COUNT(*) FROM TEST WHERE NAME!='X'", "1");
c1.commit();
test(s2, "SELECT COUNT(*) FROM TEST WHERE NAME!='X'", "1");
test(s2, "SELECT COUNT(*) FROM TEST WHERE NAME!='X'", "1");
s1.execute("DROP TABLE TEST");
c1.commit();
c2.commit();
s1.execute("CREATE TABLE TEST(ID INT PRIMARY KEY, NAME VARCHAR)");
s1.execute("INSERT INTO TEST VALUES(1, 'Hello')");
test(s2, "SELECT COUNT(*) FROM TEST WHERE ID<100", "0");
test(s1, "SELECT COUNT(*) FROM TEST WHERE ID<100", "1");
c1.commit();
test(s2, "SELECT COUNT(*) FROM TEST WHERE ID<100", "1");
test(s2, "SELECT COUNT(*) FROM TEST WHERE ID<100", "1");
s1.execute("DROP TABLE TEST");
c1.commit();
c2.commit();
s1.execute("CREATE TABLE TEST(ID INT, NAME VARCHAR, PRIMARY KEY(ID, NAME))");
s1.execute("INSERT INTO TEST VALUES(1, 'Hello')");
c1.commit();
test(s2, "SELECT NAME FROM TEST WHERE ID=1", "Hello");
s1.execute("UPDATE TEST SET NAME = 'Hallo' WHERE ID=1");
test(s2, "SELECT NAME FROM TEST WHERE ID=1", "Hello");
test(s1, "SELECT NAME FROM TEST WHERE ID=1", "Hallo");
s1.execute("DROP TABLE TEST");
c1.commit();
c2.commit();
s1.execute("create table test(id int primary key, name varchar(255))");
s1.execute("insert into test values(1, 'Hello'), (2, 'World')");
c1.commit();
try {
s1.execute("update test set id=2 where id=1");
error();
} catch (SQLException e) {
checkNotGeneralException(e);
}
ResultSet rs = s1.executeQuery("select * from test order by id");
check(rs.next());
check(rs.getInt(1), 1);
check(rs.getString(2), "Hello");
check(rs.next());
check(rs.getInt(1), 2);
check(rs.getString(2), "World");
checkFalse(rs.next());
rs = s2.executeQuery("select * from test order by id");
check(rs.next());
check(rs.getInt(1), 1);
check(rs.getString(2), "Hello");
check(rs.next());
check(rs.getInt(1), 2);
check(rs.getString(2), "World");
checkFalse(rs.next());
s1.execute("drop table test");
c1.commit();
c2.commit();
c1.close();
c2.close();
}
private void test(Statement stat, String sql, String expected) throws Exception {
ResultSet rs = stat.executeQuery(sql);
if (rs.next()) {
String s = rs.getString(1);
if (expected == null) {
throw new Error("expected: no rows, got: " + s);
} else if (!expected.equals(s)) {
throw new Error("expected: " + expected + ", got: " + s);
}
} else {
if (expected != null) {
throw new Error("expected: " + expected + ", got: no rows");
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -