github.com/gogf/gf@v1.16.9/.example/database/gdb/oracle/gdb.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"time"
     6  
     7  	//_ "github.com/mattn/go-oci8"
     8  	"github.com/gogf/gf/database/gdb"
     9  	"github.com/gogf/gf/frame/g"
    10  )
    11  
    12  // 本文件用于gf框架的mysql数据库操作示例,不作为单元测试使用
    13  
    14  var db gdb.DB
    15  
    16  // 初始化配置及创建数据库
    17  func init() {
    18  	gdb.AddDefaultConfigNode(gdb.ConfigNode{
    19  		Host: "192.168.146.0",
    20  		Port: "1521",
    21  		User: "test",
    22  		Pass: "test",
    23  		Name: "orcl",
    24  		Type: "oracle",
    25  		Role: "master",
    26  	})
    27  	db, _ = gdb.New()
    28  
    29  	//gins.Config().SetPath("/home/john/Workspace/Go/GOPATH/src/github.com/gogf/gf/.example/frame")
    30  	//db = g.Database()
    31  
    32  	//gdb.SetConfig(gdb.ConfigNode {
    33  	//    Host : "127.0.0.1",
    34  	//    Port : 3306,
    35  	//    User : "root",
    36  	//    Pass : "123456",
    37  	//    Name : "test",
    38  	//    Type : "mysql",
    39  	//})
    40  	//db, _ = gdb.Instance()
    41  
    42  	//gdb.SetConfig(gdb.Config {
    43  	//    "default" : gdb.ConfigGroup {
    44  	//        gdb.ConfigNode {
    45  	//            Host     : "127.0.0.1",
    46  	//            Port     : "3306",
    47  	//            User     : "root",
    48  	//            Pass     : "123456",
    49  	//            Name     : "test",
    50  	//            Type     : "mysql",
    51  	//            Role     : "master",
    52  	//            Weight : 100,
    53  	//        },
    54  	//        gdb.ConfigNode {
    55  	//            Host     : "127.0.0.2",
    56  	//            Port     : "3306",
    57  	//            User     : "root",
    58  	//            Pass     : "123456",
    59  	//            Name     : "test",
    60  	//            Type     : "mysql",
    61  	//            Role     : "master",
    62  	//            Weight : 100,
    63  	//        },
    64  	//        gdb.ConfigNode {
    65  	//            Host     : "127.0.0.3",
    66  	//            Port     : "3306",
    67  	//            User     : "root",
    68  	//            Pass     : "123456",
    69  	//            Name     : "test",
    70  	//            Type     : "mysql",
    71  	//            Role     : "master",
    72  	//            Weight : 100,
    73  	//        },
    74  	//        gdb.ConfigNode {
    75  	//            Host     : "127.0.0.4",
    76  	//            Port     : "3306",
    77  	//            User     : "root",
    78  	//            Pass     : "123456",
    79  	//            Name     : "test",
    80  	//            Type     : "mysql",
    81  	//            Role     : "master",
    82  	//            Weight : 100,
    83  	//        },
    84  	//    },
    85  	//})
    86  	//db, _ = gdb.Instance()
    87  }
    88  
    89  // 创建测试数据库
    90  func create() error {
    91  	fmt.Println("drop table aa_user:")
    92  	_, err := db.Exec("drop table aa_user")
    93  	if err != nil {
    94  		fmt.Println("drop table aa_user error.", err)
    95  	}
    96  
    97  	s := `
    98          CREATE TABLE aa_user (
    99              id  number(10) not null,
   100              name VARCHAR2(45),
   101              age  number(8),
   102              addr varchar2(60),
   103              amt  number(12,2),
   104              PRIMARY KEY (id)
   105          )
   106      `
   107  	fmt.Println("create table aa_user:")
   108  	_, err = db.Exec(s)
   109  	if err != nil {
   110  		fmt.Println("create table error.", err)
   111  		return err
   112  	}
   113  
   114  	_, err = db.Exec("drop sequence id_seq")
   115  	if err != nil {
   116  		fmt.Println("drop sequence id_seq", err)
   117  	}
   118  
   119  	/*fmt.Println("create sequence id_seq")
   120  	  _, err = db.Exec("create sequence id_seq increment by 1 start with 1 maxvalue 9999999999 cycle cache 10")
   121  	  if err != nil {
   122  	      fmt.Println("create sequence id_seq error.", err)
   123  	      return err
   124  	  }
   125  
   126  	  s = `
   127  	  CREATE TRIGGER id_trigger before insert on aa_user  for each row
   128  	  begin
   129  	  select id_seq.nextval into :new.id from dual;
   130  	  end;
   131  	  `
   132  	  _, err = db.Exec(s)
   133  	  if err != nil {
   134  	      fmt.Println("create trigger error.", err)
   135  	      return err
   136  	  }*/
   137  
   138  	_, err = db.Exec("drop table user_detail")
   139  	if err != nil {
   140  		fmt.Println("drop table user_detail", err)
   141  	}
   142  
   143  	s = `
   144          CREATE TABLE user_detail (
   145              id   number(10) not null,
   146              site  VARCHAR2(255),
   147              PRIMARY KEY (id)
   148          )
   149      `
   150  	fmt.Println("create table user_detail:")
   151  	_, err = db.Exec(s)
   152  	if err != nil {
   153  		fmt.Println("create table user_detail error.", err)
   154  		return err
   155  	}
   156  	fmt.Println("create table success.")
   157  	return nil
   158  }
   159  
   160  // 数据写入
   161  func insert(id int) {
   162  	fmt.Println("insert:")
   163  
   164  	r, err := db.Insert("aa_user", gdb.Map{
   165  		"id":   id,
   166  		"name": "john",
   167  		"age":  id,
   168  	})
   169  	fmt.Println(r.LastInsertId())
   170  	fmt.Println(r.RowsAffected())
   171  	if err == nil {
   172  		r, err = db.Insert("user_detail", gdb.Map{
   173  			"id":   id,
   174  			"site": "http://johng.cn",
   175  		})
   176  		if err == nil {
   177  			fmt.Printf("id: %d\n", id)
   178  		} else {
   179  			fmt.Println(err)
   180  		}
   181  
   182  	} else {
   183  		fmt.Println(err)
   184  	}
   185  	fmt.Println()
   186  }
   187  
   188  // 基本sql查询
   189  func query() {
   190  	fmt.Println("query:")
   191  	list, err := db.GetAll("select * from aa_user")
   192  	if err == nil {
   193  		fmt.Println(list)
   194  	} else {
   195  		fmt.Println(err)
   196  	}
   197  
   198  	list, err = db.Table("aa_user").OrderBy("id").Limit(0, 2).Select()
   199  	if err == nil {
   200  		fmt.Println(list)
   201  	} else {
   202  		fmt.Println(err)
   203  	}
   204  	fmt.Println()
   205  }
   206  
   207  // replace into
   208  func replace() {
   209  	fmt.Println("replace:")
   210  	r, err := db.Save("aa_user", gdb.Map{
   211  		"id":   1,
   212  		"name": "john",
   213  	})
   214  	if err == nil {
   215  		fmt.Println(r.LastInsertId())
   216  		fmt.Println(r.RowsAffected())
   217  	} else {
   218  		fmt.Println(err)
   219  	}
   220  	fmt.Println()
   221  }
   222  
   223  // 数据保存
   224  func save() {
   225  	fmt.Println("save:")
   226  	r, err := db.Save("aa_user", gdb.Map{
   227  		"id":   1,
   228  		"name": "john",
   229  	})
   230  	if err == nil {
   231  		fmt.Println(r.LastInsertId())
   232  		fmt.Println(r.RowsAffected())
   233  	} else {
   234  		fmt.Println(err)
   235  	}
   236  	fmt.Println()
   237  }
   238  
   239  // 批量写入
   240  func batchInsert() {
   241  	fmt.Println("batchInsert:")
   242  	_, err := db.BatchInsert("aa_user", gdb.List{
   243  		{"id": 11, "name": "batchInsert_john_1", "age": 11, "amt": 11.11},
   244  		{"id": 12, "name": "batchInsert_john_2", "age": 12, "amt": 12.12},
   245  		{"id": 13, "name": "batchInsert_john_3", "age": 13, "amt": 13.13},
   246  		{"id": 14, "name": "batchInsert_john_4", "age": 14, "amt": 14.14},
   247  	}, 10)
   248  	if err != nil {
   249  		fmt.Println(err)
   250  	}
   251  	fmt.Println()
   252  }
   253  
   254  // 数据更新
   255  func update1() {
   256  	fmt.Println("update1:")
   257  	r, err := db.Update("aa_user", gdb.Map{"name": "john1", "age": 1}, "id=?", 1)
   258  	if err == nil {
   259  		fmt.Println(r.LastInsertId())
   260  		fmt.Println(r.RowsAffected())
   261  	} else {
   262  		fmt.Println(err)
   263  	}
   264  	fmt.Println()
   265  }
   266  
   267  // 数据更新
   268  func update2() {
   269  	fmt.Println("update2:")
   270  	r, err := db.Update("aa_user", gdb.Map{"name": "john6", "age": 6}, "id=?", 2)
   271  	if err == nil {
   272  		fmt.Println(r.LastInsertId())
   273  		fmt.Println(r.RowsAffected())
   274  	} else {
   275  		fmt.Println(err)
   276  	}
   277  	fmt.Println()
   278  }
   279  
   280  // 数据更新
   281  func update3() {
   282  	fmt.Println("update3:")
   283  	r, err := db.Update("aa_user", "name=?", "id=?", "john2", 3)
   284  	if err == nil {
   285  		fmt.Println(r.LastInsertId())
   286  		fmt.Println(r.RowsAffected())
   287  	} else {
   288  		fmt.Println(err)
   289  	}
   290  	fmt.Println()
   291  }
   292  
   293  // 链式查询操作1
   294  func linkopSelect1() {
   295  	fmt.Println("linkopSelect1:")
   296  	r, err := db.Table("aa_user u").LeftJoin("user_detail ud", "u.id=ud.id").Fields("u.*, ud.site").Where("u.id > ?", 1).Limit(0, 2).Select()
   297  	if err == nil {
   298  		fmt.Println(r)
   299  	} else {
   300  		fmt.Println(err)
   301  	}
   302  	fmt.Println()
   303  }
   304  
   305  // 链式查询操作2
   306  func linkopSelect2() {
   307  	fmt.Println("linkopSelect2:")
   308  	r, err := db.Table("aa_user u").LeftJoin("user_detail ud", "u.id=ud.id").Fields("u.*,ud.site").Where("u.id=?", 1).One()
   309  	if err == nil {
   310  		fmt.Println(r)
   311  	} else {
   312  		fmt.Println(err)
   313  	}
   314  	fmt.Println()
   315  }
   316  
   317  // 链式查询操作3
   318  func linkopSelect3() {
   319  	fmt.Println("linkopSelect3:")
   320  	r, err := db.Table("aa_user u").LeftJoin("user_detail ud", "u.id=ud.id").Fields("ud.site").Where("u.id=?", 1).Value()
   321  	if err == nil {
   322  		fmt.Println(r.String())
   323  	} else {
   324  		fmt.Println(err)
   325  	}
   326  	fmt.Println()
   327  }
   328  
   329  // 链式查询数量1
   330  func linkopCount1() {
   331  	fmt.Println("linkopCount1:")
   332  	r, err := db.Table("aa_user u").LeftJoin("user_detail ud", "u.id=ud.id").Where("name like ?", "john").Count()
   333  	if err == nil {
   334  		fmt.Println(r)
   335  	} else {
   336  		fmt.Println(err)
   337  	}
   338  	fmt.Println()
   339  }
   340  
   341  // 错误操作
   342  func linkopUpdate1() {
   343  	fmt.Println("linkopUpdate1:")
   344  	r, err := db.Table("henghe_setting").Update()
   345  	if err == nil {
   346  		fmt.Println(r.RowsAffected())
   347  	} else {
   348  		fmt.Println("error", err)
   349  	}
   350  	fmt.Println()
   351  }
   352  
   353  // 通过Map指针方式传参方式
   354  func linkopUpdate2() {
   355  	fmt.Println("linkopUpdate2:")
   356  	r, err := db.Table("aa_user").Data(gdb.Map{"name": "john2"}).Where("name=?", "john").Update()
   357  	if err == nil {
   358  		fmt.Println(r.RowsAffected())
   359  	} else {
   360  		fmt.Println(err)
   361  	}
   362  	fmt.Println()
   363  }
   364  
   365  // 通过字符串方式传参
   366  func linkopUpdate3() {
   367  	fmt.Println("linkopUpdate3:")
   368  	r, err := db.Table("aa_user").Data("name='john3'").Where("name=?", "john2").Update()
   369  	if err == nil {
   370  		fmt.Println(r.RowsAffected())
   371  	} else {
   372  		fmt.Println(err)
   373  	}
   374  	fmt.Println()
   375  }
   376  
   377  // Where条件使用Map
   378  func linkopUpdate4() {
   379  	fmt.Println("linkopUpdate4:")
   380  	r, err := db.Table("aa_user").Data(gdb.Map{"name": "john11111"}).Where(g.Map{"id": 1}).Update()
   381  	if err == nil {
   382  		fmt.Println(r.RowsAffected())
   383  	} else {
   384  		fmt.Println(err)
   385  	}
   386  	fmt.Println()
   387  }
   388  
   389  // 链式批量写入
   390  func linkopBatchInsert1() {
   391  	fmt.Println("linkopBatchInsert1:")
   392  	r, err := db.Table("aa_user").Filter().Data(gdb.List{
   393  		{"id": 21, "name": "linkopBatchInsert1_john_1", "amt": 21.21, "tt": "haha"},
   394  		{"id": 22, "name": "linkopBatchInsert1_john_2", "amt": 22.22, "cc": "hahacc"},
   395  		{"id": 23, "name": "linkopBatchInsert1_john_3", "amt": 23.23, "bb": "hahabb"},
   396  		{"id": 24, "name": "linkopBatchInsert1_john_4", "amt": 24.24, "aa": "hahaaa"},
   397  	}).Insert()
   398  	if err == nil {
   399  		fmt.Println(r.RowsAffected())
   400  	} else {
   401  		fmt.Println(err)
   402  	}
   403  	fmt.Println()
   404  }
   405  
   406  // 链式批量写入,指定每批次写入的条数
   407  func linkopBatchInsert2() {
   408  	fmt.Println("linkopBatchInsert2:")
   409  	r, err := db.Table("aa_user").Data(gdb.List{
   410  		{"id": 25, "name": "linkopBatchInsert2john_1"},
   411  		{"id": 26, "name": "linkopBatchInsert2john_2"},
   412  		{"id": 27, "name": "linkopBatchInsert2john_3"},
   413  		{"id": 28, "name": "linkopBatchInsert2john_4"},
   414  	}).Batch(2).Insert()
   415  	if err == nil {
   416  		fmt.Println(r.RowsAffected())
   417  	} else {
   418  		fmt.Println(err)
   419  	}
   420  	fmt.Println()
   421  }
   422  
   423  // 链式批量保存
   424  func linkopBatchSave() {
   425  	fmt.Println("linkopBatchSave:")
   426  	r, err := db.Table("aa_user").Data(gdb.List{
   427  		{"id": 1, "name": "john_1"},
   428  		{"id": 2, "name": "john_2"},
   429  		{"id": 3, "name": "john_3"},
   430  		{"id": 4, "name": "john_4"},
   431  	}).Save()
   432  	if err == nil {
   433  		fmt.Println(r.RowsAffected())
   434  	} else {
   435  		fmt.Println(err)
   436  	}
   437  	fmt.Println()
   438  }
   439  
   440  // 事务操作示例1
   441  func transaction1() {
   442  	fmt.Println("transaction1:")
   443  	if tx, err := db.Begin(); err == nil {
   444  		r, err := tx.Insert("aa_user", gdb.Map{
   445  			"id":   30,
   446  			"name": "transaction1",
   447  		})
   448  		tx.Rollback()
   449  		fmt.Println(r, err)
   450  	}
   451  	fmt.Println()
   452  }
   453  
   454  // 事务操作示例2
   455  func transaction2() {
   456  	fmt.Println("transaction2:")
   457  	if tx, err := db.Begin(); err == nil {
   458  		r, err := tx.Table("user_detail").Data(gdb.Map{"id": 5, "site": "www.baidu.com哈哈哈*?~!@#$%^&*()"}).Insert()
   459  		tx.Commit()
   460  		fmt.Println(r, err)
   461  	}
   462  	fmt.Println()
   463  }
   464  
   465  // 主从io复用测试,在mysql中使用 show full processlist 查看链接信息
   466  func keepPing() {
   467  	fmt.Println("keepPing:")
   468  	for i := 0; i < 30; i++ {
   469  		fmt.Println("ping...", i)
   470  		err := db.PingMaster()
   471  		if err != nil {
   472  			fmt.Println(err)
   473  			return
   474  		}
   475  		err = db.PingSlave()
   476  		if err != nil {
   477  			fmt.Println(err)
   478  			return
   479  		}
   480  		time.Sleep(1 * time.Second)
   481  	}
   482  }
   483  
   484  // like语句查询
   485  func likeQuery() {
   486  	fmt.Println("likeQuery:")
   487  	if r, err := db.Table("aa_user").Where("name like ?", "%john%").Select(); err == nil {
   488  		fmt.Println(r)
   489  	} else {
   490  		fmt.Println(err)
   491  	}
   492  }
   493  
   494  // mapToStruct
   495  func mapToStruct() {
   496  	type User struct {
   497  		Id   int
   498  		Name string
   499  		Age  int
   500  		Addr string
   501  	}
   502  	fmt.Println("mapToStruct:")
   503  	if r, err := db.Table("aa_user").Where("id=?", 1).One(); err == nil {
   504  		u := User{}
   505  		if err := r.ToStruct(&u); err == nil {
   506  			fmt.Println(r)
   507  			fmt.Println(u)
   508  		} else {
   509  			fmt.Println(err)
   510  		}
   511  	} else {
   512  		fmt.Println(err)
   513  	}
   514  }
   515  
   516  func main() {
   517  
   518  	db.PingMaster()
   519  	db.SetDebug(true)
   520  	/*err := create()
   521  	  if err != nil {
   522  	      return
   523  	  }*/
   524  
   525  	//test1
   526  	/*for i := 1; i < 5; i++ {
   527  	      insert(i)
   528  	  }
   529  	  query()
   530  	*/
   531  
   532  	//batchInsert()
   533  	//query()
   534  
   535  	//replace()
   536  	//save()
   537  
   538  	//update1()
   539  	//update2()
   540  	//update3()
   541  
   542  	/*linkopSelect1()
   543  	  linkopSelect2()
   544  	  linkopSelect3()
   545  	  linkopCount1()
   546  	*/
   547  
   548  	/*linkopUpdate1()
   549  	  linkopUpdate2()
   550  	  linkopUpdate3()
   551  	  linkopUpdate4()
   552  	*/
   553  
   554  	linkopBatchInsert1()
   555  	query()
   556  	//linkopBatchInsert2()
   557  
   558  	//transaction1()
   559  	//transaction2()
   560  	//
   561  	//keepPing()
   562  	//likeQuery()
   563  	//mapToStruct()
   564  	//getQueriedSqls()
   565  }