H2db数据库介绍及基本使用

来源:互联网 发布:北京市大数据 编辑:程序博客网 时间:2024/05/07 12:33

H2db数据库介绍及基本使用

http://www.h2database.com/html/main.html

H2的主要特点:
高效,开源,支持JDBCAPI,支持Embedded,server和in-memory模式,基于浏览器的控制台程序,主文件是一个大约只有1MB的jar文件。特性:纯Java,支持事务隔离(TransactionIsolation),支持基于代价的优化方式(Cost Based Optimizer),支持数据库加密(EncryptedDatabase),支持ODBC驱动(ODBC Driver),支持全文本搜索(FulltextSearch),支持多版本并发控制(Multi Version Concurrency)
H2的历史:
H2的发展开始于2004年五月,它的第一个公开发行版本是在2005年12月14日发布的。H2的主要作者是ThomasMueller,他一直是Hypersonic SQL的源码开发者。在2001年,他加入了PointBaseInc,在那里PointBase Micro被创建。在那时候,他不得不停止HypersonicSQL,但是这时HSQLDB团队还在为HypersonicSQL工作。这时一个被叫做H2的项目建立起来,其实H2又叫做Hypersonic 2。然而H2没有共享任何HypersonicSQL(HSQLDB)的代码。H2的建立是从零开始的。

H2db数据库介绍及基本使用

控制台登陆窗口:

H2db数据库介绍及基本使用

---------------------------------------------------------------- 

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 -> JavaBuild Path -> Libraries -> AddExternal JARs -> 引入h2-1.1.116.jar

(三)使用内存模式(关闭后内容全部消失,速度非常快):
importjava.sql.Connection;  
importjava.sql.DriverManager;  
importjava.sql.ResultSet;  
importjava.sql.SQLException;  
importjava.sql.Statement;  
public class MenTest{  
public voidrunInsertDelete(){  
   try{  
       String sourceURL="jdbc:h2:tcp://localhost/mem:testmemdb";//H2DB memmode  
               Stringuser="sa";   
               String key="";  
       try{     
       Class.forName("org.h2.Driver");//HSQLDBDriver   
       }catch(Exceptione){     
       e.printStackTrace();     
          
       Connectionconn=DriverManager.getConnection(sourceURL,user,key);//把驱动放入连接  
       Statementstmt=conn.createStatement();  
               //创建一个 Statement 对象来将 SQL语句发送到数据库。  
       //stmt.executeUpdate("DELETE FROM mytable WHEREname=\'NO.2\'");  
               //执行方法找到一个与 methodName属性同名的方法,并在目标上调用该方法。  
       //stmt.execute("CREATE TABLE idtable(id INT,nameVARCHAR(100));");  
       stmt.execute("INSERT INTO idtableVALUES(1,\'MuSoft\')");  
       stmt.execute("INSERT INTO idtableVALUES(2,\'StevenStander\')");  
       stmt.close();  
       conn.close();  
                    
   }catch(SQLExceptionsqle){  
               System.out.println("SQLERROR!");     
    
 
     
public void query(StringSQL){  
   try{  
     StringsourceURL="jdbc:h2:tcp://localhost/mem:testmemdb";  
     String user="sa";  
     Stringkey="";       
          
     try{     
         Class.forName("org.h2.Driver");     
         }catch(Exceptione){     
          e.printStackTrace();     
         
     Connectionconn=DriverManager.getConnection(sourceURL,user,key);//把驱动放入连接  
     Statementstmt=conn.createStatement();//     

     ResultSet rset=stmt.executeQuery(SQL);

//执行方法找到一个与 methodName属性同名的方法,并在目标上调用该方法。  
     while(rset.next())  
               
           System.out.println(rset.getInt("id")+" "+rset.getString("name"));        
      
     rset.close();  
     stmt.close();  
     conn.close();  
   }catch(SQLExceptionsqle){  
         System.err.println(sqle);  
  
  
       public static void main(Stringargs[]){  
           MenTest mt=new MenTest();  
          mt.runInsertDelete();  
           mt.query("SELECT * FROMidtable");  
        

(四)使用Embedded模式(Create,Insert,Delete...):
import java.sql.*;  
 
public class UpdateTest {  
    public voidrunInsertDelete() {  
       try {  
           String sourceURL = "jdbc:h2:h2/bin/mydb";// H2database  
           String user = "sa";  
           String key = "";  
           try {  
               Class.forName("org.h2.Driver");// H2Driver  
           } catch (Exception e) {  
               e.printStackTrace();  
            
           Connection conn = DriverManager.getConnection(sourceURL, user,key);  
           Statement stmt =conn.createStatement();  
           stmt.execute("CREATE TABLE mytable(name VARCHAR(100),sexVARCHAR(10))");  
           stmt.executeUpdate("INSERT INTO mytable VALUES('StevenStander','male')");  
           stmt.executeUpdate("INSERT INTO mytable VALUES('ElizabethEames','female')");  
           stmt.executeUpdate("DELETE FROM mytable WHEREsex=\'male\'");  
           stmt.close();  
           conn.close();  
 
       } catch (SQLException sqle){  
           System.err.println(sqle);  
        
    
 
    publicstatic void main(String args[]){  
       newUpdateTest().runInsertDelete();  
    

(五)使用Embedded模式(Select):

view plaincopy to clipboardprint?
import java.sql.*; 

 
 
public class SelectTest {  
    public voidquery(String SQL) {  
       try {  
           String sourceURL ="jdbc:h2:h2/bin/mydb";  
           String user = "sa";  
           String key = "";  
 
           try {  
               Class.forName("org.h2.Driver");  
           } catch (Exception e) {  
               e.printStackTrace();  
            
           Connection conn = DriverManager.getConnection(sourceURL, user,key);  
           Statement stmt =conn.createStatement();  
           ResultSet rset =stmt.executeQuery(SQL);  
           while (rset.next()) {  
               System.out.println(rset.getString("name")+ " "+rset.getString("sex"));  
            
           rset.close();  
           stmt.close();  
           conn.close();  
       } catch (SQLException sqle){  
           System.err.println(sqle);  
        
    
 
    publicstatic void main(String args[]){  
       Test tt = new Test();  
       tt.query("select * frommytable");