随着Julia0.4版本的升级,SQLite库也有不小的变化。特别是引入了DataStreams,CSV等库在其中。在一些接口用法上有一些改变。
1、返回类型是Data.Table
julia> a =[1 2]
1x2 Array{Int64,2}:
1 2
julia> b =[1 2;3 4]
2x2 Array{Int64,2}:
1 2
3 4
julia> using DataStreams.Data
julia> Data.Table(a)
Data.Table:
1x2 Data.Schema:
Column1, Column2
Int64, Int64
NullableArrays.NullableArray{T,1}[NullableArrays.NullableArray{Int64,1}[1],Nulla
bleArrays.NullableArray{Int64,1}[2]]
julia> Data.Table(b)
Data.Table:
2x2 Data.Schema:
Column1, Column2
Int64, Int64
NullableArrays.NullableArray{T,1}[NullableArrays.NullableArray{Int64,1}[1,3],Nul
lableArrays.NullableArray{Int64,1}[2,4]]
2、SQLite 的一些基本操作
(1)建表
julia> using SQLite
julia> DBPath = "E:\\sqlite\\test.db"
"E:\\sqlite\\test.db"
julia> db = SQLite.DB(DBPath)
julia> strSQL1=" CREATE TABLE ";
julia> strSQL2=" (
Code CHAR NOT NULL,
TradeDay INT NOT NULL,
TradeTime INT NOT NULL,
Open Decimal NOT NULL,
High Decimal NOT NULL,
Low Decimal NOT NULL,
Close Decimal NOT NULL,
Volume Decimal NOT NULL,
Amount Decimal NOT NULL,
OpenInterest Decimal NOT NULL
) ";
julia> strSQL= string(strSQL1," SH600036 ",strSQL2);
julia> SQLite.query(db,strSQL);
(2)INSERT
这部分很奇怪的,和原来不一样。
julia> val =Any(["600036" ,20150606 ,0931 ,10.6, 11.6 ,11.2 ,12.6 ,123666.0 ,125 ,445.6, 124])
11-element Array{Any,1}:
"600036"
20150606
931
10.6
11.6
11.2
12.6
123666.0
125
445.6
124
julia> SQLite.query(db,"Insert into SH600036 Values (?1,?2,?3,?4,?5,?6,?7,?8,?9,
?10)",val);
注意1: 如果 val格式是 Array{Any,2},比如
val =Any(["600036" 20150606 0931 10.6 11.6 11.2 12.6 123666.0 125 445.6 124])
在INSERT时是会发生报错的
注意:
binddb = SQLite.DB()
SQLite.query(binddb, "CREATE TABLE temp2 (n NULL, i6 INT, f REAL, s TEXT)")
val1 =Any[SQLite.NULL, convert(Int64,6), 6.4, "some text"]
val2 =Any[SQLite.NULL, convert(Int64,8), 6.5, "hhhh text"]
val =[value1 value2]
可以INSERT val1 or val2, 因为是Array{Any,1}类型
SQLite.query(binddb, "INSERT INTO temp2 VALUES (?1, ?2, ?3, ?4)", val2)
但是不能INSERT val , 因为是Arry{Any ,2} 类型. 会报错!
SQLite.query(binddb, "INSERT INTO temp2 VALUES (?1, ?2, ?3, ?4)", val)
对于Array{Any,2}的INSERT ,除一条条INSERT外,或只有变通了。目前正在寻找更好的办法。