我是靠谱客的博主 激情背包,这篇文章主要介绍julia第三方包引入方法及JDBC操作,现在分享给大家,希望可以做个参考。

微信公众号(SZBigdata-Club):后续博客的文档都会转到微信公众号中。 
1、公众号会持续给大家推送技术文档、学习视频、技术书籍、数据集等。 
2、接受大家投稿支持。 
3、对于各公司hr招聘的,可以私下联系我,把招聘信息发给我我会在公众号中进行推送。 

è¿éåå¾çæè¿°
技术交流群:59701880 深圳广州hadoop好友会 

è¿éåå¾çæè¿°

第三方包引入

引入Pkg

复制代码
1
2
import Pkg

引入第三方包方法

兼容 v0.6 和 v0.7 (1.0的pre-release),请通过Julia自带的包管理器进行安装。
在 v0.6 中,请使用 Pkg 模块进行安装

复制代码
1
2
julia> Pkg.clone("https://github.com/Roger-luo/TutorialZH.jl.git")

在 v0.7 中,请使用REPL的 pkg mode 安装,按 ] 键

复制代码
1
2
(v0.7) pkg> dev https://github.com/Roger-luo/TutorialZH.jl.git#master

或者使用 Pkg 模块

复制代码
1
2
julia> using Pkg; Pkg.develop("https://github.com/Roger-luo/TutorialZH.jl.git#master")

具体操作如下:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
julia>import Pkg julia> Pkg.clone("https://github.com/JuliaDatabases/JDBC.jl.git") ┌ Warning: Pkg.clone is only kept for legacy CI script reasons, please use `add ` └ @ Pkg.API C:cygwinhomeAdministratorbuildbotworkerpackage_win64buildus rsharejuliastdlibv1.0PkgsrcAPI.jl:445    Cloning default registries into C:Usersdell.juliaregistries    Cloning registry General from "https://github.com/JuliaRegistries/General.git "   Updating registry at `C:Usersdell.juliaregistriesGeneral`   Updating git-repo `https://github.com/JuliaRegistries/General.git`    Cloning git-repo `https://github.com/JuliaDatabases/JDBC.jl.git`   Updating git-repo `https://github.com/JuliaDatabases/JDBC.jl.git`  Resolving package versions...    Cloning [ea10d353-3f73-51f8-a26c-33c1cb351aa5] WeakRefStrings from https://gi thub.com/JuliaData/WeakRefStrings.jl.git [ Info: Installed WeakRefStrings ─ v0.5.2    Cloning [1b915085-20d7-51cf-bf83-8f477d6f5128] WinReg from https://github.com /simonbyrne/WinReg.jl.git [ Info: Installed WinReg ───────── v0.3.1    Cloning [9a8bc11e-79be-5b39-94d7-1ccc349a1a85] DataStreams from https://githu b.com/JuliaData/DataStreams.jl.git [ Info: Installed DataStreams ──── v0.4.0    Cloning [864edb3b-99cc-5e75-8d2d-829cb0a9cfe8] DataStructures from https://gi thub.com/JuliaCollections/DataStructures.jl.git [ Info: Installed DataStructures ─ v0.11.1    Cloning [494afd89-becb-516b-aafa-70d2670c0337] JavaCall from https://github.c om/JuliaInterop/JavaCall.jl.git [ Info: Installed JavaCall ─────── v0.7.1    Cloning [e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28] Missings from https://github.c om/JuliaData/Missings.jl.git [ Info: Installed Missings ─────── v0.3.0   Updating `C:Usersdell.juliaenvironmentsv1.0Project.toml`   [6042db11] + JDBC v0.4.0+ [`C:Usersdell.juliadevJDBC`]   Updating `C:Usersdell.juliaenvironmentsv1.0Manifest.toml`   [9a8bc11e] + DataStreams v0.4.0   [864edb3b] + DataStructures v0.11.1   [6042db11] + JDBC v0.4.0+ [`C:Usersdell.juliadevJDBC`]   [494afd89] + JavaCall v0.7.1   [e1d29d7a] + Missings v0.3.0   [ea10d353] + WeakRefStrings v0.5.2   [1b915085] + WinReg v0.3.1   [2a0f44e3] + Base64   [ade2ca70] + Dates   [8ba89e20] + Distributed   [b77e0a4c] + InteractiveUtils   [76f85450] + LibGit2   [8f399da3] + Libdl   [37e2e46d] + LinearAlgebra   [56ddb016] + Logging   [d6f4376e] + Markdown   [44cfe95a] + Pkg   [de0858da] + Printf   [3fa0cd96] + REPL   [9a3f8284] + Random   [ea8e919c] + SHA   [9e88b42a] + Serialization   [6462fe0b] + Sockets   [2f01184e] + SparseArrays   [8dfed614] + Test   [cf7118a7] + UUIDs   [4ec0a83e] + Unicode

初始化以及销毁

加载数据库驱动包并初始化JVM

复制代码
1
2
3
4
5
julia> using JDBC [ Info: Precompiling JDBC [6042db11-3c3d-5e84-8dba-9cbf74c9ba48] julia> JDBC.usedriver("F:\mysql-connector-java-5.1.26.jar") julia> JDBC.init()

初始化之后,除非显式地销毁JVM,否则它将保留在内存中。我们可以通过以下代码来销毁释放内存

复制代码
1
2
JDBC.destroy() # or JavaCall.destroy()

API操作接口

这里提供了两种连接操作方式:java、julia。
接下来对这两种方式进行具体介绍

Java API

JDBC.jl提供的功能与我们平时使用的java jdbc驱动程序类似,可以使用和java类似的jdbc操作代码实现数据操作。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
julia> conn = DriverManager.getConnection("jdbc:mysql://192.168.2.34:3306/Test?user=root&password=root") JavaCall.JavaObject{Symbol("java.sql.Connection")}(Ptr{Nothing} @0x000000002e26e f80) julia> stmt = createStatement(conn) JavaCall.JavaObject{Symbol("java.sql.Statement")}(Ptr{Nothing} @0x000000002e26ef 90) julia> rs = executeQuery(stmt, "select * from T_Users") JavaCall.JavaObject{Symbol("java.sql.ResultSet")}(Ptr{Nothing} @0x000000002e26ef a8) julia> for r in rs            println(getInt(r,1),getString(r,"username"))        end 1 user1 2 user2 3 user3 4 user4 5 user5
  • getInt

  • getFloat

  • getString

  • getShort

  • getByte

  • getTime

  • getTimeStamp

  • getDate

  • getBoolean

  • getNString

  • getURL  

更新

PreparedStatement具有针对不同类型定义的SETER函数,与上述的getter函数对应

复制代码
1
2
3
4
5
ppstmt = prepareStatement(conn, "insert into firsttable values (?, ?)") setInt(ppstmt, 1,10) setString(ppstmt, 2,"TEN") executeUpdate(ppstmt)
复制代码
1
2
3
4
5
cstmt = JDBC.prepareCall(conn, "CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY(?, ?)") setString(cstmt, 1, "derby.locks.deadlockTimeout") setString(cstmt, 2, "10") execute(cstmt)

Metadata

通过executeQuery方法获取JResultSet对象,在通过getTableMetaData去获取(column_name, column_type)tuples列表.

复制代码
1
2
3
4
5
conn = DriverManager.getConnection("jdbc:mysql://192.168.2.34:3306/Test?user=root&password=root") stmt = createStatement(conn) rs = executeQuery(stmt, "select * from firsttable") metadata = getTableMetaData(rs)

Julian接口

julia接口方式的JDBC交互涉及2个对象:JDBC.CONTION和JDBC.CURSOR对象。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
julia> cnxn = JDBC.Connection("jdbc:mysql://192.168.2.34:3306/Test?user=root&password=root") JDBC.Connection(JavaCall.JavaObject{Symbol("java.sql.Connection")}(Ptr{Nothing} @0x000000002e26f020)) julia> csr = JDBC.Cursor(cnxn) JDBC.Cursor(JDBC.Connection(JavaCall.JavaObject{Symbol("java.sql.Connection")}(P tr{Nothing} @0x000000002e26f020)), JavaCall.JavaObject{Symbol("java.sql.Statemen t")}(Ptr{Nothing} @0x000000002e26f008), nothing) julia> execute!(csr,"insert into T_Users(username,password) values('u1','p1');") julia> execute!(csr,"select * from T_Users;") julia> for row ∈ rows(csr)            print(row)        end (1, "user1", "password1")(2, "user2", "password2")(3, "user3", "password3")(4, " user4", "password4")(5, "user5", "password5")(6, "u1", "p1") julia> close(csr)

'∈'? julia语言真的是涵盖了太多的内存,就如作者说的,他在julia里面做了很多千奇百怪的事情。

DataStreams接口以及创建DataStreams

JDBC对象包含了一个DataStreams接口,一个DataStreams source对象可以从JDBC.Cursor或者JDBCRowIterator创建,对象继承自DStream Data.Source接口,可以用于检索元数据

这对于将数据从数据库加载到实现DataStreams Data.Sink接口(如DataFrame)的对象中也很有用,更提供了方便的JDBC.Load函数。

举个例子:

复制代码
1
2
3
4
5
6
7
src = JDBC.Source(csr)  # create a Source from a JDBC.Cursor # here we load into a DataFrame, but can be any Data.Sink df = JDBC.load(DataFrame, src) # you can also load from the cursor directly df = JDBC.load(DataFrame, csr)

最快速的方法将数据加载到DataFrame

复制代码
1
2
3
4
cnxn_str = "jdbc:mysql://192.168.2.34:3306/Test?u ser=root&password=root"  # for example df = JDBC.load(DataFrame, cursor(cnxn_str), "select * from sometable")

注意,这不仅适用于DataFrame,也适用于任何Data.Sink。
更多的方法请参考methods(JDBC.load)

注意事项

  • 不支持BLOB

  • 虽然JDBC API的很大一部分已经包装好了,但并不是所有东西都包装好了。如果你发现你需要的东西少了,可以提交issue到该项目。不管怎样,直接使用JavaCall调用Java方法非常容易,具体可参考JDBC.jl实现。

  • julia的DateTime和java的java.sql.Date不存储任何时区信息。时区很容易出错,所以请再次检查您的应用程序是否依赖于准确的时间。

  • Java中有许多不同的JDBC驱动程序。这个包需要各种各样的测试。

参考链接:http://juliainterop.github.io/JavaCall.jl/faq.html

最后

以上就是激情背包最近收集整理的关于julia第三方包引入方法及JDBC操作的全部内容,更多相关julia第三方包引入方法及JDBC操作内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部