最近想好好了解一下数据库的原理,下载了h2database的源码,准备好好看看。此过程的一些想法,暂且记下来,权当做读码笔记吧!
为了调试准备的测试用例:
?
@Test
public void testExternalDb() throws Exception
{
Class.forName("org.h2.Driver");
Connection conn = DriverManager.getConnection("jdbc:h2:./testdb", "sa", "");
// add application code here
Statement stmt = conn.createStatement();
stmt.executeUpdate("DROP TABLE TEST IF EXISTS");
stmt.executeUpdate("CREATE TABLE TEST(ID INT PRIMARY KEY,NAME VARCHAR(255));");
stmt.executeUpdate("INSERT INTO TEST VALUES(100, 'Damn,World');");
stmt.executeUpdate("INSERT INTO TEST VALUES(200, 'Hello,H2');");
stmt.executeUpdate("INSERT INTO TEST VALUES(150, 'Hello,World');");
ResultSet rs = stmt.executeQuery("SELECT * FROM TEST where ID>120 and NAME like 'Hello%'");
while (rs.next())
{
System.out.println(rs.getInt("ID") + "," + rs.getString("NAME"));
}
conn.close();
}
?
?
h2说到底就是内存 数据库,其文件版本只是内存内容的持久化,持久化在conn.close()的时候发生;SQL语句会被h2解析成Prepared对象,然后再调用它的update()方法,其中:DDL会编译成DefineCommandDML会编译成Query, Update, Delete等对象作为例子,CreateTable是DefineCommand的一个派生类:vchGnftpqcIqJHOojZ8TQnmpr4nMY+JgvhUvltM0KHIICkyxGcxIOJ3486VO2OdXsWsZTwPt6PC3NZAWmVGC2i9E//v7P5ocPP045d3Nbgb0p8Ic//r754W9/3Vt+J7YCc1NgtovR3IRyPVbAClgBKzCdAr4d0HTamtkKWAErYAUqFVjlYnR9fd3c3Ny0EuDLFLmvllfqZJgVsAJWwApMqMAq36Y7Oztr8NPn9/f37f854X+Z8PBmBayAFbAC81RglVdoLESnp6et4viKuH5NfJ67wVVZAStgBQ5bgVUuRi8vLw0e3qyAFbACVmAZCqxyMVqG9K7SClgBK2AFqMAktwMiudvtFKj9T33imC3+ky/th9BSi6EalOKjn2No2zenxnLf9OVgHNrIRy7aOdaYMfrkV66pcmmOKfqcy1Lrn0KTnXG+/ZLEuv7i95Q+fPjQTgq/paS/j7S0mepv56RqT/lTtlTsWm3bzr8Un/KnbDX6xrg4ruEAJsbpGH0d13LW4FK8KVsN11wwS69/Ljr2rcNv0+1s2XciK1BWAM/I+ey8jO5G6DN79HXcHW WPFdifAl6M9qe9M1uBRSuARTO1yKVsi56oi9+JAqv9zGjzErH9Z1e2tWoOvWs4TkB9RqsnpNpZh/ppy7XKobHaR3zXBSLHzThiUpz0oaVfa1I/MSU/YyIu8mOsGPoZj1b9aq/tl+JL/to8Q3Axt85ffdonJmVjDfSV9CWOceTmuNR2xUe78sSa1Ie+1hB56KM9ctGvnMSqzf0dK9D3fb0l4PGZ0fv37183d1943fzS7Cs+N0K/9OBnS2wx19T7x9GGsdq6+l18OU0jd4lDc+d41RdjdKx9xqit1O/j7+JXDmD6jsnb1fbli/hUTV25or3EVfKTL4WjD22XH/bo07H2yUcbW9pTbQqjtlK/j5/5Y4yOgek7Jq/baRVY5Ssj3G3h5OSkvevCkDsvDPknWX22pf0xnlvU8uHZXS2WdaVi+nKQa0jLXLlnpsSk+FP1p3BdtlJ8yd/FO6Y9p80YeXL6gn/q/NvMgbXnaiQmlWcO+zdV1yHaVrkYbV4NNXd3d83Dw0ODPrauBQaLFX8I8Pb2trm4uGienp6a4+PjUY4HnAh6ouROjG0SLvmkirWrXttospbYqY6ZWn32nb9Up4+fkkLL8K9yMbq6umrOz8+bx8fH9t50mxeXnXtDFyP80iy2roWrkyTjiCdKBjrYtYscg4srBC659sLUVu/mE624WO1yn+4y1+p36J4nuMrF6PLyssFj6HZ0dDQ09JM4nrDq0JMXJxM2tSm21E+djGor8bM+za/xpfz79sf6OV/WxbHOjz60pfiSX7lS/VL+GFOjfQ0m8o45zuXP+casYSyubffvWHWYZ/MiAB9JrU0I/GwE33rrMze8Mhr6bTrmiRe91MmpNvSxxTjY6FN/tOkYOG7ko59j+mNLHOwRqz71qx0xHGufedTGPlpsjCM21aawtCkHuWGL/RQvbayhK6bLTzt50HbVpRj0S7HER1yKn1i0tX7lZUzJFvkxTsXAzk39sHXlIg5+9smhNvZTPMTHNoWlDVjmIzds6sfY27QKrHIxmlayfuw4yONBnbL1YzXaClgBK7AuBbwYdezPf/z9n80PH37s8NpsBazAmhX4wx9/3/zwt7+ueYqzm5sXo9ntEhdkBayAFTg8BXw7oMPb556xFbACVmB2CngxmmCXXF9fNzc3Ny0zvkyxwu+ITKCaKa2AFThkBfw23QR7/+zsrMFPn9/f37f/54T/ZRpyJ4gJSjOlFbACVmCWCviV0QS7BQvR6elpy4yvio/5T7QTlGtKK2AFrMDeFfBiNMEueHl5afDwZgWsgBWwAnUKeDGq08koK2AFrIAVmFCBVd4OaEK9Dor63bv/a+f7+vrb7LyJI6iEJ26NLbUYqkEpPvo5hpbb5tT9UcPF3DVY5R67zzqUd981aS19+pzL