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 }