H2database源码编译及运行
2017-07-07 17:49
507 查看
H2database源码编译及运行
标签: H2database在工作中需要做大数据缓存方案,浏览到内存数据库想对数据库实现进行了解,故选择H2做为样本进行源码阅读,环境如下:
操作系统:win7 64位系
H2database源码版本:1.4.196-SNAPSHOT
Eclipse版本:Neon.3 Release (4.6.3)
JDK版本:1.8
H2database源码下载地址
此份源码已经过修改,如需查看原版代码请在github上查找下面阐述运行源码做的修改H2源码编译
1. 修改pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>1.4.196-SNAPSHOT</version> <packaging>jar</packaging> <name>H2 Database Engine</name> <url>http://www.h2database.com</url> <description>H2 Database Engine</description> <licenses> <license> <name>MPL 2.0 or EPL 1.0</name> <url>http://h2database.com/html/license.html</url> <distribution>repo</distribution> </license> </licenses> <scm> <connection>scm:git:https://github.com/h2database/h2database</connection> <url>https://github.com/h2database/h2database</url> </scm> <developers> <developer> <id>thomas.tom.mueller</id> <name>Thomas Mueller</name> <email>thomas.tom.mueller at gmail dot com</email> </developer> </developers> <properties> <maven.compiler.source>1.7</maven.compiler.source> <maven.compiler.target>1.7</maven.compiler.target> <derby.version>10.10.1.1</derby.version> <osgi.version>4.2.0</osgi.version> <slf4j.version>1.6.0</slf4j.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <!-- START COMPILE DEPENDENCIES !--> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> </dependency> <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-core</artifactId> <version>3.6.2</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>org.osgi</groupId> <artifactId>org.osgi.core</artifactId> <version>${osgi.version}</version> </dependency> <dependency> <groupId>org.osgi</groupId> <artifactId>org.osgi.enterprise</artifactId> <version>${osgi.version}</version> </dependency> <dependency> <groupId>com.vividsolutions</groupId> <artifactId>jts-core</artifactId> <version>1.14.0</version> </dependency> <!-- END COMPILE DEPENDENCIES !--> <!-- START TEST DEPENDENCIES !--> <!-- 去除测试需要的jar,保留Junit <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>${slf4j.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.hsqldb</groupId> <artifactId>hsqldb</artifactId> <version>2.3.2</version> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.derby</groupId> <artifactId>derby</artifactId> <version>${derby.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.derby</groupId> <artifactId>derbyclient</artifactId> <version>${derby.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.derby</groupId> <artifactId>derbynet</artifactId> <version>${derby.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>9.4.1209.jre6</version> <scope>test</scope> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> <scope>test</scope> </dependency> --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!-- END TEST DEPENDENCIES !--> <!-- JDK dependencies --> <!-- JDK依赖 --> <!-- <dependency> --> <!-- <groupId>com.sun</groupId> --> <!-- <artifactId>tools</artifactId> --> <!-- <version>1.8</version> --> <!-- <scope>system</scope> --> <!-- <systemPath>${tools.jar}</systemPath> --> <!-- </dependency> --> </dependencies> <!-- The test code creates proxy files using javac or tools.jar. Through maven we need to tell it where to possibly find tools.jar and annoyingly its called classes.jar on OSX --> <profiles> <profile> <id>default-tools.jar</id> <activation> <file> <exists>${java.home}/../lib/tools.jar</exists> </file> </activation> <properties> <tools.jar>${java.home}/../lib/tools.jar</tools.jar> </properties> </profile> <profile> <id>default-tools.jar-mac</id> <activation> <file> <exists>${java.home}/../Classes/classes.jar</exists> </file> </activation> <properties> <tools.jar>${java.home}/../Classes/classes.jar</tools.jar> </properties> </profile> </profiles> <build> <sourceDirectory>src/main</sourceDirectory> <testSourceDirectory>src/test</testSourceDirectory> <!-- Resources do not follow maven project layout. We need to manually copy them --> <resources> <resource> <directory>src/main</directory> <includes> <include>**/*.prop</include> <include>**/*.png</include> <include>**/*.jsp</include> <include>**/*.ico</include> <include>**/*.gif</include> <include>**/*.css</include> <include>org/h2/res/help.csv</include> <include>org/h2/res/javadoc.properties</include> <include>org/h2/server/pg/pg_catalog.sql</include> </includes> </resource> </resources> <testResources> <testResource> <directory>src/test</directory> <includes> <include>org/h2/test/testSimple.in.txt</include> <include>org/h2/test/testScript.sql</include> <include>org/h2/samples/newsfeed.sql</include> <include>org/h2/samples/optimizations.sql</include> </includes> </testResource> </testResources> <plugins> <!-- Add tools folder to test sources but consider moving them to src/test --> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>build-helper-maven-plugin</artifactId> <!-- 使用3.0.0插件 --> <!--<version>1.10</version> --> <version>3.0.0</version> <executions> <execution> <phase>generate-test-sources</phase> <goals><goal>add-test-source</goal></goals> <configuration> <sources> <source>src/tools</source> </sources> </configuration> </execution> </executions> </plugin> <!-- Maven requires at least JRE 1.7 but we want to build with JDK 1.6 --> <plugin> e3a2 <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-toolchains-plugin</artifactId> <version>1.1</version> <!-- 此插件有jdk的依赖,注释如下配置,使用jdk1.8 --> <!-- <executions> --> <!-- <execution> --> <!-- <goals> --> <!-- <goal>toolchain</goal> --> <!-- </goals> --> <!-- </execution> --> <!-- </executions> --> <configuration> <toolchains> <jdk> <version>1.8</version> </jdk> </toolchains> </configuration> </plugin> <!-- Make sure we are not using anything outside JDK 1.6 --> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>animal-sniffer-maven-plugin</artifactId> <version>1.15</version> <executions> <execution> <id>check-java-api</id> <phase>test</phase> <goals> <goal>check</goal> </goals> </execution> </executions> <!-- dk的依赖,使用jdk1.8 --> <!-- <configuration> --> <!-- <signature> --> <!-- <groupId>org.codehaus.mojo.signature</groupId> --> <!-- <artifactId>java16</artifactId> --> <!-- <version>1.1</version> --> <!-- </signature> --> <!-- </configuration> --> </plugin> <!-- Disable surefire since we don't use Junit --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.19.1</version> <configuration> <includes> <include>TestAllJunit.java</include> </includes> </configuration> </plugin> </plugins> </build> </project>
注意:修改集中在中文注释上
H2运行测试
测试代码:@Test public void test_h2_mem() throws SQLException { JdbcConnectionPool ds = JdbcConnectionPool.create("jdbc:h2:mem:test2", "sa", ""); // JdbcConnectionPool ds = JdbcConnectionPool.create("jdbc:h2:E:/test2", "sa", ""); ds.setMaxConnections(1000); Connection conn = ds.getConnection() ; Statement stat = conn.createStatement(); // insert data (ddl) String createTableSql = ""; createTableSql += "create table userInfo( "; createTableSql += " id int(4) not null primary key auto_increment, "; createTableSql += " name char(20) not null, "; createTableSql += " sex int(4) not null default '0', "; createTableSql += " degree double "; createTableSql += "); "; stat.execute( createTableSql ); // stat.execute("CREATE TABLE TEST_TABLE(NAME VARCHAR)"); stat.execute("CREATE INDEX IDXNAME ON userInfo(NAME)"); stat.execute("INSERT INTO userInfo(name,sex,degree) VALUES('Hello World_0','0',23)"); stat.execute("INSERT INTO userInfo(name,sex,degree) VALUES('Hello World_1','1',23)"); stat.execute("INSERT INTO userInfo(name,sex,degree) VALUES('Hello World_2','2',23)"); stat.execute("INSERT INTO userInfo(name,sex,degree) VALUES('Hello World_3','3',23)"); // use data System.err.println(" select begin "); ResultSet result = stat.executeQuery("select id,name,sex,degree from userInfo where name like '%Hello World%'"); System.err.println(" select end "); while (result.next()) { System.out.println( result.getInt("id")+"|" + result.getString("name")+"|" + result.getInt("sex")+ "|" + result.getDouble("degree")); } result.close(); stat.close(); conn.close(); }
运行结果:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. select begin 测试增加 测试增加 测试增加 测试增加 测试增加 select end 1|Hello World_0|0|23.0 2|Hello World_1|1|23.0 3|Hello World_2|2|23.0 4|Hello World_3|3|23.0
相关文章推荐
- linux-0.11 GCC4.3下可编译运行的源码
- Android源码编译可执行文件 | 运行 | C层检测系统API版本号
- JSP 编译和运行过程与JSP源码简单分析
- Android中如何编译运行系统自带桌面Launcher2源码
- Android 4.0 framework源码修改编译,模拟器运行不起来——解决
- openfire源码编译部署,运行
- 编译运行xmind3.2源码
- Android4.0.1 源码下载,模拟器编译和运行
- Android 关于图片文件夹后缀错误,使应用在源码下编译通过却无法运行的错误
- Android源码开发(2)---- 编译Android源码并用模拟器加载运行
- ANDROID源码编译3 - 编译和运行
- Android 4.0.1 源码下载,编译和运行
- Android4.0.1 源码下载,模拟器编译和运行
- 编译google官方源码android2.3.7并刷到nexus s(i9020)完美运行
- Android4.0.1 源码下载,模拟器编译和运行 .
- linux-0.11 GCC4.3下可编译运行的源码
- 将系统自带的Launcher2源码导入eclipse中编译运行
- Android 4.0.1 源码下载,编译和运行
- android 4.0.1源码编译成功后运行emulator提示No command 'emulator' found
- JSP 编译和运行过程与JSP源码简单分析