H2db数据库介绍及基本使用

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

posted @ 2014-04-23 09:16  endy_zhu  阅读(1932)  评论(0编辑  收藏  举报