Moritz Schmidt 9 years ago
parent
commit
57b362d235
1 changed files with 65 additions and 24 deletions
  1. 65 24
      databaseutils.go

+ 65 - 24
databaseutils.go

@@ -18,15 +18,14 @@ type DBUtils struct {
 
 func (dbUtil *DBUtils) Connect() {
   var err error
-  dbUtil.Handle, err = sql.Open("mysql", dbUtil.User + ":" + dbUtil.Password + "@tcp(" + dbUtil.Host + ")/" + dbUtil.Database)
+  dbUtil.Handle, err = sql.Open("mysql", dbUtil.User + ":" + dbUtil.Password + "@tcp(" + dbUtil.Host + ")/" + dbUtil.Database) // open handle
   if err != nil {
-    panic(err.Error()) // Just for example purpose. You should use proper error handling instead of panic
+    panic(err.Error()) // TODO
   }
 
-  // Open doesn't open a connection. Validate DSN data:
-  err = dbUtil.Handle.Ping()
+  err = dbUtil.Handle.Ping() // try to connect
   if err != nil {
-    panic(err.Error()) // proper error handling instead of panic in your app
+    panic(err.Error()) // TODO
   }
 }
 
@@ -37,7 +36,7 @@ func (dbUtil DBUtils) Close() {
 func (dbUtil DBUtils) GetString(what string, from string, where string, wherevalue string) string {
   var username string
 
-  rows, err := dbUtil.Handle.Query("SELECT " + what + " FROM " + from + " WHERE " + where + " = " + wherevalue)
+  rows, err := dbUtil.Handle.Query("SELECT " + what + " FROM " + from + " WHERE " + where + " = " + wherevalue) // TODO Parse?
   if err != nil {
   	fmt.Println(err)
   }
@@ -56,32 +55,74 @@ func (dbUtil DBUtils) GetString(what string, from string, where string, whereval
 
   return username
 
+}
 
+// GetRow(what, from, where, wherevalue)
+func (dbUtil DBUtils) GetRow(options ...string) []string {
+  var err error
 
+  //if len(options) > 3 { // with or without where
+    //rows, err := dbUtil.Handle.Query("SELECT " + options[0] + " FROM " + options[1] + " WHERE " + options[2] + " = " + options[3]) // TODO Parse?
+  //} else {
+    rows, err := dbUtil.Handle.Query("SELECT " + options[0] + " FROM " + options[1]) // TODO Parse?
+  //}
 
+  if err != nil {
+    fmt.Println(err)
+  }
 
-
-
-
-
-
-
-
-
-
+  cols, err := rows.Columns()
+   if err != nil {
+     fmt.Println("Failed to get columns", err)
+     var x []string;
+     x[0] = "";
+     return x
+   }
+
+   // Result is your slice string.
+   rawResult := make([][]byte, len(cols))
+   result := make([]string, len(cols))
+
+   dest := make([]interface{}, len(cols)) // A temporary interface{} slice
+   for i, _ := range rawResult {
+     dest[i] = &rawResult[i] // Put pointers to each string in the interface slice
+   }
+
+   for rows.Next() {
+     err = rows.Scan(dest...)
+     if err != nil {
+         fmt.Println("Failed to scan row", err)
+         var x []string;
+         x[0] = "";
+         return x
+     }
+
+     for i, raw := range rawResult {
+         if raw == nil {
+             result[i] = "\\N"
+         } else {
+             result[i] = string(raw)
+         }
+     }
+   }
 
 /*
-
-  stmtOut, err := dbUtil.Handle.Prepare("SELECT " + what + " FROM " + from + " WHERE " + where + " = " + wherevalue)
   if err != nil {
-      panic(err.Error()) // proper error handling instead of panic in your app
+  	fmt.Println(err)
   }
+  defer rows.Close()
+  for rows.Next() {
+  	err := rows.Scan(&username)
+  	if err != nil {
+  		fmt.Println(err)
+  	}
+  	fmt.Println(username)
+  }
+  err = rows.Err()
+  if err != nil {
+  	fmt.Println(err)
+  }*/
 
-  fmt.Printf("%v", stmtOut)
-
-  err = stmtOut.QueryRow(0).Scan(&username)
-
-  fmt.Printf("%v", username)
+  return result
 
-  return username*/
 }