github.com/mattn/go-adodb@v0.0.1/_example/mdb.go (about)

     1  package main
     2  
     3  import (
     4  	"database/sql"
     5  	"fmt"
     6  	"os"
     7  	"time"
     8  
     9  	"github.com/go-ole/go-ole"
    10  	"github.com/go-ole/go-ole/oleutil"
    11  	_ "github.com/mattn/go-adodb"
    12  )
    13  
    14  var provider string
    15  
    16  func createMdb(f string) error {
    17  	unk, err := oleutil.CreateObject("ADOX.Catalog")
    18  	if err != nil {
    19  		return err
    20  	}
    21  	defer unk.Release()
    22  	cat, err := unk.QueryInterface(ole.IID_IDispatch)
    23  	if err != nil {
    24  		return err
    25  	}
    26  	defer cat.Release()
    27  	provider = "Microsoft.Jet.OLEDB.4.0"
    28  	r, err := oleutil.CallMethod(cat, "Create", "Provider="+provider+";Data Source="+f+";")
    29  	if err != nil {
    30  		provider = "Microsoft.ACE.OLEDB.12.0"
    31  		r, err = oleutil.CallMethod(cat, "Create", "Provider="+provider+";Data Source="+f+";")
    32  		if err != nil {
    33  			return err
    34  		}
    35  	}
    36  	r.Clear()
    37  	return nil
    38  }
    39  
    40  func main() {
    41  	ole.CoInitialize(0)
    42  	defer ole.CoUninitialize()
    43  
    44  	f := "./example.mdb"
    45  
    46  	os.Remove(f)
    47  
    48  	err := createMdb(f)
    49  	if err != nil {
    50  		fmt.Println("create mdb", err)
    51  		return
    52  	}
    53  
    54  	db, err := sql.Open("adodb", "Provider="+provider+";Data Source="+f+";")
    55  	if err != nil {
    56  		fmt.Println("open", err)
    57  		return
    58  	}
    59  	defer db.Close()
    60  
    61  	_, err = db.Exec("create table foo (id int not null primary key, name text not null, created datetime not null)")
    62  	if err != nil {
    63  		fmt.Println("create table", err)
    64  		return
    65  	}
    66  
    67  	tx, err := db.Begin()
    68  	if err != nil {
    69  		fmt.Println(err)
    70  		return
    71  	}
    72  	stmt, err := tx.Prepare("insert into foo(id, name, created) values(?, ?, ?)")
    73  	if err != nil {
    74  		fmt.Println("insert", err)
    75  		return
    76  	}
    77  	defer stmt.Close()
    78  
    79  	for i := 0; i < 1000; i++ {
    80  		_, err = stmt.Exec(i, fmt.Sprintf("こんにちわ世界%03d", i), time.Now())
    81  		if err != nil {
    82  			fmt.Println("exec", err)
    83  			return
    84  		}
    85  	}
    86  	tx.Commit()
    87  
    88  	rows, err := db.Query("select id, name, created from foo")
    89  	if err != nil {
    90  		fmt.Println("select", err)
    91  		return
    92  	}
    93  	defer rows.Close()
    94  
    95  	for rows.Next() {
    96  		var id int
    97  		var name string
    98  		var created time.Time
    99  		err = rows.Scan(&id, &name, &created)
   100  		if err != nil {
   101  			fmt.Println("scan", err)
   102  			return
   103  		}
   104  		fmt.Println(id, name, created)
   105  	}
   106  }