H2的主要特点:
高效,开源,支持JDBCAPI,支持Embedded,server和in-memory模式,基于浏览器的控制台程序,主文件是一个大约只有1MB的jar文件。特性:纯Java,支持事务隔离(Transaction
Isolation),支持基于代价的优化方式(Cost Based Optimizer),支持数据库加密(Encrypted
Database),支持ODBC驱动(ODBC Driver),支持全文本搜索(Fulltext Search),支持多版本并发控制(Multi Version
Concurrency)
H2的历史:
H2的发展开始于2004年五月,它的第一个公开发行版本是在2005年12月14日发布的。H2的主要作者是Thomas
Mueller,他一直是Hypersonic SQL的源码开发者。在2001年,他加入了PointBase Inc,在那里PointBase
Micro被创建。在那时候,他不得不停止Hypersonic SQL,但是这时HSQLDB团队还在为Hypersonic
SQL工作。这时一个被叫做H2的项目建立起来,其实H2又叫做Hypersonic 2。然而H2没有共享任何Hypersonic
SQL(HSQLDB)的代码。H2的建立是从零开始的。
----------------------------------------------------------------
H2的使用:
(一)H2文件结构:
————————————————————————————————
-h2
-bin
h2-1.1.116.jar
//H2主文件(驱动也在里面)
h2.bat //H2控制台启动程序带黑屏窗口(for
Windows)
h2.sh //H2控制台启动程序(for
Linux)
h2w.bat //H2控制台启动程序不带黑屏窗口(for
Windows)
+docs
//文档文件夹(内有手册)
+service
+src //开源的吗,带源代码
build.bat
build.sh
build.xml
————————————————————————————————
(二)Eclipse/MyEclipse中引入H2驱动
在指定项目中右键
-> Peoperties -> Java Build Path -> Libraries -> Add External JARs
->
引入h2-1.1.116.jar
(三)使用内存模式(关闭后内容全部消失,速度非常快):
1 import java.sql.Connection; 2 import java.sql.DriverManager; 3 import java.sql.ResultSet; 4 import java.sql.SQLException; 5 import java.sql.Statement; 6 public class MenTest{ 7 public void runInsertDelete(){ 8 try{ 9 String sourceURL="jdbc:h2:tcp://localhost/mem:testmemdb";//H2DB mem mode 10 String user="sa"; 11 String key=""; 12 try{ 13 Class.forName("org.h2.Driver");//HSQLDB Driver 14 }catch(Exception e){ 15 e.printStackTrace(); 16 } 17 Connection conn=DriverManager.getConnection(sourceURL,user,key);//把驱动放入连接 18 Statement stmt=conn.createStatement(); 19 //创建一个 Statement 对象来将 SQL 语句发送到数据库。 20 //stmt.executeUpdate("DELETE FROM mytable WHERE name=\‘NO.2\‘"); 21 //执行方法找到一个与 methodName 属性同名的方法,并在目标上调用该方法。 22 //stmt.execute("CREATE TABLE idtable(id INT,name VARCHAR(100));"); 23 stmt.execute("INSERT INTO idtable VALUES(1,\‘MuSoft\‘)"); 24 stmt.execute("INSERT INTO idtable VALUES(2,\‘StevenStander\‘)"); 25 stmt.close(); 26 conn.close(); 27 28 }catch(SQLException sqle){ 29 System.out.println("SQL ERROR!"); 30 } 31 32 } 33 public void query(String SQL){ 34 try{ 35 String sourceURL="jdbc:h2:tcp://localhost/mem:testmemdb"; 36 String user="sa"; 37 String key=""; 38 39 try{ 40 Class.forName("org.h2.Driver"); 41 }catch(Exception e){ 42 e.printStackTrace(); 43 } 44 Connection conn=DriverManager.getConnection(sourceURL,user,key);//把驱动放入连接 45 Statement stmt=conn.createStatement();// 46 ResultSet rset=stmt.executeQuery(SQL); 47 //执行方法找到一个与 methodName 属性同名的方法,并在目标上调用该方法。 48 while(rset.next()) 49 { 50 System.out.println(rset.getInt("id")+" "+rset.getString("name")); 51 } 52 rset.close(); 53 stmt.close(); 54 conn.close(); 55 }catch(SQLException sqle){ 56 System.err.println(sqle); 57 } 58 } 59 public static void main(String args[]){ 60 MenTest mt=new MenTest(); 61 mt.runInsertDelete(); 62 mt.query("SELECT * FROM idtable"); 63 } 64 }
(四)使用Embedded模式(Create,Insert,Delete...):
1 import java.sql.*; 2 3 public class UpdateTest { 4 public void runInsertDelete() { 5 try { 6 String sourceURL = "jdbc:h2:h2/bin/mydb";// H2 database 7 String user = "sa"; 8 String key = ""; 9 try { 10 Class.forName("org.h2.Driver");// H2 Driver 11 } catch (Exception e) { 12 e.printStackTrace(); 13 } 14 Connection conn = DriverManager.getConnection(sourceURL, user, key); 15 Statement stmt = conn.createStatement(); 16 stmt.execute("CREATE TABLE mytable(name VARCHAR(100),sex VARCHAR(10))"); 17 stmt.executeUpdate("INSERT INTO mytable VALUES(‘Steven Stander‘,‘male‘)"); 18 stmt.executeUpdate("INSERT INTO mytable VALUES(‘Elizabeth Eames‘,‘female‘)"); 19 stmt.executeUpdate("DELETE FROM mytable WHERE sex=\‘male\‘"); 20 stmt.close(); 21 conn.close(); 22 23 } catch (SQLException sqle) { 24 System.err.println(sqle); 25 } 26 } 27 28 public static void main(String args[]) { 29 new UpdateTest().runInsertDelete(); 30 } 31 } 32 (五)使用Embedded模式(Select): 33 view plaincopy to clipboardprint? 34 import java.sql.*; 35 36 public class SelectTest { 37 public void query(String SQL) { 38 try { 39 String sourceURL = "jdbc:h2:h2/bin/mydb"; 40 String user = "sa"; 41 String key = ""; 42 43 try { 44 Class.forName("org.h2.Driver"); 45 } catch (Exception e) { 46 e.printStackTrace(); 47 } 48 Connection conn = DriverManager.getConnection(sourceURL, user, key); 49 Statement stmt = conn.createStatement(); 50 ResultSet rset = stmt.executeQuery(SQL); 51 while (rset.next()) { 52 System.out.println(rset.getString("name")+ " "+rset.getString("sex")); 53 } 54 rset.close(); 55 stmt.close(); 56 conn.close(); 57 } catch (SQLException sqle) { 58 System.err.println(sqle); 59 } 60 } 61 62 public static void main(String args[]) { 63 Test tt = new Test(); 64 tt.query("select * from mytable"); 65 } 66 }
原文地址:http://blog.sina.com.cn/s/blog_4def2d3d0100exdc.html