Class: DFC::Database

Inherits:
Object show all

Overview

SQLITE3 操作API (数据库是实时保存的)切记 切记 写操作数据库的时候 一定要加事务 防止多进程操作 产生脏数据

Instance Method Summary # collapse

Constructor Details

#initialize(db_path, pass = nil, empty_default = false) ⇒ DFC::Database

打开 或 新建一个数据库

Examples:

db = nil
begin
  db = DFC::Database.new "test.db"
  unless db.exist_table?("the_table")
    sql = %Q{
      create table the_table (
        a varchar2(30),
        b varchar2(30)
      );
    }
    db.execute sql
  end
  db.close
rescue => e
  db.close if db
  raise e
end

Parameters:

  • db_path (String)

    数据库文件路径

  • pass (String) (defaults to: nil)

    密码 默认为空

  • empty_default (True/False) (defaults to: false)

    密码为空时是否采用 DFC默认密码 采用后 只读打开文件(防止用户修改数据库文件)

Instance Method Details

#beginObject

事务开始操作

#closeObject

关闭数据库

Examples:

db = nil
begin
  db = DFC::Database.new "test.db"
  db.close
rescue => e
  db.close if db
  raise e
end

#closed?Boolean

判断数据库是否关闭

Examples:

db = nil
begin
  db = DFC::Database.new "test.db"
  db.close
  puts "#{db.closed?}"
rescue => e
  db.close if db
  raise e
end

Returns:

  • (Boolean)

#commitObject

事务提交操作

#execute(sql, bind_vars = [], result_is_hash = false) ⇒ Array

执行单条sql语句

Examples:

db = nil
begin
  db = DFC::Database.new "test.db"
  unless db.exist_table?("the_table")
    sql = %Q{
      create table the_table (
        a varchar2(30),
        b varchar2(30)
      );
    }
    db.execute sql
  end
  db.execute "insert into the_table (a,b) values('one','two')"
  db.execute "insert into the_table (a,b) values(?,?)",%w(three four)
  db.execute("select * from the_table").each do |row|
    puts row.to_s
  end
  db.execute("select * from the_table",nil,true).each do |row|
    puts row.to_s
  end
  db.close
rescue => e
  db.close if db
  raise e
end

Parameters:

  • sql (String)

    sql语句

  • bind_vars (Array) (defaults to: [])

    预处理参数 与 sql中问号数量相同

  • result_is_hash (True/False) (defaults to: false)

    查询到的信息是否带有列名 有列名 [[“col_name”=>“value”]] 无列名 [[“value”]]

Returns:

  • (Array)

#execute_batch(sql, bind_vars, result_is_hash = false) ⇒ Array

单条sql语句多次执行

Examples:

db = nil
begin
  db = DFC::Database.new "test.db"
  unless db.exist_table?("the_table")
    sql = %Q{
      create table the_table (
        a varchar2(30),
        b varchar2(30)
      );
    }
    db.execute sql
  end
  sql = "insert into the_table (a,b) values(?,?)"
  data = [%w( ),%w( ),%w( )]
  db.execute_batch sql,data
  db.execute_batch("select * from the_table",nil).each do |row|
    puts row.to_s
  end
  db.execute_batch("select * from the_table",nil,true).each do |row|
    puts row.to_s
  end
  db.close
rescue => e
  db.close if db
  raise e
end

Parameters:

  • sql (String)

    sql语句

  • bind_vars (Array)

    预处理参数 与 sql中问号数量相同

  • result_is_hash (True/False) (defaults to: false)

    查询到的信息是否带有列名 有列名 [[“col_name”=>“value”]] 无列名 [[“value”]]

Returns:

  • (Array)

#exist_table?(table_name) ⇒ True/False

判断表格是否存在

Parameters:

  • table_name (String)

    待查询表格名称

Returns:

  • (True/False)

    db = nil begin

    db = DFC::Database.new "test.db"
    puts "the_table => #{db.exist_table?("the_table")}"
    db.close
    

    rescue => e

    db.close if db
    raise e
    

    end

#get_table_column_info(table_name) ⇒ Array

获取表格列信息

Examples:

db = nil
begin
  db = DFC::Database.new "test.db"
  unless db.exist_table?("the_table")
    sql = %Q{
      create table the_table (
        a varchar2(30),
        b varchar2(30)
      );
    }
    db.execute sql
  end
  puts "the_table_column_info => #{db.get_table_column_info("the_table")}"
  db.close
rescue => e
  db.close if db
  raise e
end

Parameters:

  • table_name (String)

    待查询表格名称

Returns:

  • (Array)

#get_tablesArray

获取数据库中的所有表格名称

Examples:

db = nil
begin
  db = DFC::Database.new "test.db"
  puts "all_table => #{db.get_tables.to_s}"
  db.close
rescue => e
  db.close if db
  raise e
end

Returns:

  • (Array)

#rollbackObject

事务回滚操作