Jump to content

Table creation: Difference between revisions

Added Go
(Added Go)
Line 173:
| 2 | Kelly | Saunders | 3608 Indian Island Promenade | Goober Hill | SK |
+----------+-----------+----------+------------------------------+-------------+----------+
</pre>
 
=={{header|Go}}==
{{libheader|Bolt}}
<br>
This uses a key/value store rather than a relational database to create the table.
<lang go>package main
 
import (
"encoding/binary"
"encoding/json"
"fmt"
"github.com/boltdb/bolt"
"log"
)
 
type StockTrans struct {
Id int // this will auto-incremented by db
Date string
Trans string
Symbol string
Quantity int
Price float32
Settled bool
}
 
// save stock transaction to bucket in db
func (st *StockTrans) save(db *bolt.DB, bucket string) error {
err := db.Update(func(tx *bolt.Tx) error {
b := tx.Bucket([]byte(bucket))
id, _ := b.NextSequence()
st.Id = int(id)
encoded, err := json.Marshal(st)
if err != nil {
return err
}
return b.Put(itob(st.Id), encoded)
})
return err
}
 
// itob returns an 8-byte big endian representation of i.
func itob(i int) []byte {
b := make([]byte, 8)
binary.BigEndian.PutUint64(b, uint64(i))
return b
}
 
func check(err error) {
if err != nil {
log.Fatal(err)
}
}
 
func main() {
// create database
db, err := bolt.Open("store.db", 0600, nil)
check(err)
defer db.Close()
 
// create bucket
err = db.Update(func(tx *bolt.Tx) error {
_, err := tx.CreateBucketIfNotExists([]byte("stocks"))
return err
})
check(err)
 
transactions := []*StockTrans{
{0, "2006-01-05", "BUY", "RHAT", 100, 35.14, true},
{0, "2006-03-28", "BUY", "IBM", 1000, 45, true},
{0, "2006-04-06", "SELL", "IBM", 500, 53, true},
{0, "2006-04-05", "BUY", "MSOFT", 1000, 72, false},
}
 
// save transactions to bucket
for _, trans := range transactions {
err := trans.save(db, "stocks")
check(err)
}
 
// print out contents of bucket
fmt.Println("Id Date Trans Sym Qty Price Settled")
fmt.Println("------------------------------------------------")
db.View(func(tx *bolt.Tx) error {
b := tx.Bucket([]byte("stocks"))
b.ForEach(func(k, v []byte) error {
st := new(StockTrans)
err := json.Unmarshal(v, st)
check(err)
fmt.Printf("%d %s %-4s %-5s %4d %2.2f %t\n",
st.Id, st.Date, st.Trans, st.Symbol, st.Quantity, st.Price, st.Settled)
return nil
})
return nil
})
}</lang>
 
{{out}}
<pre>
Id Date Trans Sym Qty Price Settled
------------------------------------------------
1 2006-01-05 BUY RHAT 100 35.14 true
2 2006-03-28 BUY IBM 1000 45.00 true
3 2006-04-06 SELL IBM 500 53.00 true
4 2006-04-05 BUY MSOFT 1000 72.00 false
</pre>
 
Line 244 ⟶ 349:
-----------------------------------------------------
</pre>
 
=={{header|M2000 Interpreter}}==
M2000 Environment use ADO to connect to databases. Default type is Mdb (Acess 2007).
9,485

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.