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 }