navicat premium 11.1.13 注册码 破解补丁全产品注册机下载_资源分享_房贷计算器(fangdaijisuanqi)

mikel阅读(1553)

来源: navicat premium 11.1.13 注册码 破解补丁全产品注册机下载_资源分享_房贷计算器(fangdaijisuanqi)

Navicat 11.1全产品注册机下载,支持Navicat 11全部软件,亲测可用。完美支持Navicat11破解,支持的软件如下:Navicat Premium、Navicat for MySQL、Navicat for MariaDB、Navicat for SQL Server、Navicat for oracle、Navicat for SQLite、Navicat for PostgreSQL、Navicat Data Modeler、Navicat Report Viewer、Navicat Essentials。 Navicat 11.1注册机使用教程: 直接运行,然后提示”Patch successfully”就代表破解成功了! PatchNavicat.rar

腾讯X5浏览器内核接入 - m0_37987029的博客 - CSDN博客

mikel阅读(1255)

来源: 腾讯X5浏览器内核接入 – m0_37987029的博客 – CSDN博客

内核接入,需要先下载SDK:

官方接入文档:http://x5.tencent.com/tbs/guide/sdkInit.html

这个文档写的相对是很全的了,其实基本上参考这个就可以了。可以完善的地方就是,少了开发者后台的介绍,另外还有一些内容是目前不需要的, 如视频接入及TBSDemo的介绍

 

下面以实际开发应用为主线,介绍下X5接入

一、注册开发者后台,并写入项目配置文件

腾讯浏览服务官网http://x5.tencent.com/ 进入开发者后台,添加一个应用,输入应用名和包名,保存后即可看到生成的AppKey。

关于应用名和包名,其实也没有绝对限制死,用父目录包名也是可行的。

AndroidManifest.xml文件中,在Application标签中加入下面的内容:

  <meta-data  android:name="QBSDKAppKey"  android:value="b09eElbqkGvswnLlToeCKGvM" />

name必须是 “QBSDKAppKey”,value即为开发者后台生成的AppKey

 

二、下载SDK,并引入到Android项目中

下载地址:http://x5.tencent.com/tbs/sdk.html

看到新出了Android Studio版本的sdk,真是一把鼻涕一把泪,想当时为了解决Android Studio中so文件冲突的问题,花了不少时间

 

引入如下图

 

三、添加权限

其实X5并不需要什么特殊的权限,所有的权限都是原项目本身就需要的

在AndroidManifest.xml文件中加入下面几个权限

<uses-permission android:name=”android.permission.WRITE_EXTERNAL_STORAGE” />

<uses-permission android:name=”android.permission.ACCESS_NETWORK_STATE” />

<uses-permission android:name=”android.permission.ACCESS_WIFI_STATE” />

<uses-permission android:name=”android.permission.INTERNET” />

<uses-permission android:name=”android.permission.READ_PHONE_STATE” />

 

四、引入X5 WebView编码

1、在layout中编码

次要属性请忽略

<com.tencent.smtt.sdk.WebView
    android:id="@+id/mainWebview"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:overScrollMode="never"
    android:scrollbars="none"
    android:textColor="#373636"
    android:textSize="14sp">
</com.tencent.smtt.sdk.WebView>

 

2、Activity引入

其实就是正常的创建一个webview,只不过使用的是X5的WebView,其中有很多非核心代码,如设置标题,缓存设置等,可不关注。

import com.tencent.smtt.export.external.interfaces.GeolocationPermissionsCallback;
import com.tencent.smtt.export.external.interfaces.SslError;
import com.tencent.smtt.export.external.interfaces.SslErrorHandler;
import com.tencent.smtt.sdk.WebChromeClient;
import com.tencent.smtt.sdk.WebSettings;
import com.tencent.smtt.sdk.WebView;
import com.tencent.smtt.sdk.WebViewClient;

mWebView = (WebView) findViewById(R.id.mainWebview);

WebSettings settings = mWebView.getSettings();
settings.setLoadWithOverviewMode(true);
settings.setBuiltInZoomControls(true);
settings.setJavaScriptEnabled(true);
settings.setUseWideViewPort(true);
settings.setSupportZoom(true);
settings.setJavaScriptCanOpenWindowsAutomatically(true);
settings.setCacheMode(WebSettings.LOAD_DEFAULT);

settings.setGeolocationEnabled(true);
settings.setDomStorageEnabled(true);
settings.setDatabaseEnabled(true);
settings.setGeolocationDatabasePath(cacheDirPath);

//设置数据库缓存路径
settings.setDatabasePath(cacheDirPath);
//设置  Application Caches 缓存目录
settings.setAppCachePath(cacheDirPath);
//开启 Application Caches 功能
settings.setAppCacheEnabled(true);

mWebView.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
super.onReceivedError(view, errorCode, description, failingUrl);
ToastManager.showWarn(“网络请求超时”);
view.stopLoading();
}

@Override
public void onReceivedSslError(WebView webView, SslErrorHandler sslErrorHandler, SslError sslError) {
//super.onReceivedSslError(webView, sslErrorHandler, sslError);
sslErrorHandler.proceed();
}

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return super.shouldOverrideUrlLoading(view, url);
}

@Override
public void doUpdateVisitedHistory(WebView view, String url, boolean isReload) {
super.doUpdateVisitedHistory(view, url, isReload);
if (needClearHistory) {
needClearHistory = false;
mWebView.clearHistory();//清除历史记录
}
}
});

mWebView.setWebChromeClient(new WebChromeClient() {
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
TopTitleManager.showTitle(XHZWebActivity.this, title);
}

@Override
public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissionsCallback callback) {
callback.invoke(origin, true, false);
super.onGeolocationPermissionsShowPrompt(origin, callback);
}
});

mWebView.loadUrl(url);

 

五、测试X5引入情况

如图 双水滴样式。

X5内核是可以共享使用的,由于微信、QQ、腾讯视频等腾讯系产品都使用了X5内核,所以一般情况下你手机上已经有了X5内核可以直接使用。

如果真没有,首次进入APP时,请求到腾讯浏览服务时,会执行内核下载操作(后台执行,量小,用户感知不到),退出当前请求,再次请求腾讯浏览服务(加载Webview)就可以生效了。

 

至此,如果还是觉得有疑问,可小窗,我保证不。。你

Golang连接Oracle数据库 - 蝈蝈俊 - 博客园

mikel阅读(1131)

来源: Golang连接Oracle数据库 – 蝈蝈俊 – 博客园

Golang连接Oracle的库有很多,比较常见的如下:

不过,oralce 只提供了 oci8 的接口,必须通过它来调用,所以下面方案都逃不过相关设置。

1、go-db-oracle

地址: https://code.google.com/p/go-db-oracle/

官方介绍:

Oracle Driver using cgo to call OCI libraries from Oracle Instant Client 11. Developed with Linux Status initial: connects, authenticates, basic SELECTs, missing error control, not deallocating memory

关键点:

  • 使用CGO开发的;
  • 基于Oracle 11
  • 基于Linux环境下

2、go-oci8

地址:https://github.com/wendal/go-oci8

它是 https://github.com/mattn/go-oci8 的分支, 增加了windows下中文的安装说明及相关文件

安装步骤,注意它的安装方式跟之前方式不一样了:之前是 http://wendal.net/459.html 这里提供的步骤, 跟github上安装步骤不一样。以github的为准。

 

2.1、安装最新版的git,并设置可以从命令行直接调用git命令。

安装方式请看下面这篇文章:

https://github.com/wohugb/git-reference/blob/master/Getting-Started/Installing-Git.rst

比如我安装的是 Git-1.8.4-preview20130916 这个 版本。

 

2.2、下载OCI最新版,

存放于C:\instantclient_12_1

OCI是指ORACLE调用接口(Oracle Call Interface),它提供了一组可对ORACLE数据库进行存取的接口子例程(函数),通过在代程序设计语言(如C语言)中进行调用可达到存取ORACLE数据库的目的。

OCI是集成在 Oracle Database Instant Client 的Basic 版本中的。下载地址如下:
http://www.oracle.com/technetwork/database/features/instant-client/index.html

注意,后面你装的MinGW是64位版本,就需要OCI也是64位版本, 如果MinGW是32位版本,则需要OCI是32位版本。

 

2.3、下载OCI SDK最新版,

存放于C:\instantclient_11_2\sdk

下载地址仍然是上面地址。

注意,后面你装的MinGW是64位版本,就需要OCI也是64位版本, 如果MinGW是32位版本,则需要OCI是32位版本。

 

2.4、下载MinGW最新版,

下载地址:http://sourceforge.net/projects/mingw/files/Installer/mingw-get-inst/  下载后安装在C:\mingw。

MinGW全称Minimalist GNU For Windows,是个精简的Windows平台C/C++、ADA及Fortran编译器,相比Cygwin而言,体积要小很多,使用较为方便。MinGW提供了一套完整的开源编译工具集,以适合Windows平台应用开发,且不依赖任何第三方C运行时库。(http://www.mingw.org/wiki/Getting_Started

参考:http://www.cnblogs.com/ghj1976/p/3175591.html

 

如果你安装的是MinGW 64 位版本,请参看下面这篇文章:

http://www.cnblogs.com/ghj1976/p/3540257.html

 

如果 MinGW是64位, oci 是32 会,编译时会报错:

ld.exe: skipping incompatible C:/instantclient_12_1/oci.dll when searching for -loci

2.5、下载pkg-config.exe和oci8.pc

(已经存放在windows文件夹下,)
将pkg-config.exe复制到C:\mingw\bin\下
将oci8.pc复制到C:\mingw\lib\pkg-config\下

注意,oci8.pc 需要根据你下载的 oci进行修改。下面是我根据我下载的oci版本做的修改。

# Package Information for pkg-config

prefix=C:/instantclient_12_1
exec_prefix=C:/instantclient_12_1
libdir=${exec_prefix}
includedir=${prefix}/sdk/include/

Name: OCI
Description: Oracle database engine
Version: 12.1
Libs: -L${libdir} -loci
Libs.private:
Cflags: -I${includedir}

2.6、修改系统环境变量,

添加
PATH=原有PATH;C:\instantclient_12_1;C:\MinGW\bin;
PKG_CONFIG_PATH=C:\MinGW\lib\pkg-config

2.7、下载相关源码。

执行 go get github.com/wendal/go-oci8

 

 

2.8、测试一下:

cd %GOPATH%/src/github.com/wendal/go-oci8/example
go run oracle.go

2.9、配置Oracle连接字符串

在一个目录下新建一个 tnsnames.ora 文件,用于配置连接字符串别名。

这个文件内容类似如下,参考 http://hi.baidu.com/sunxden/item/f5e1423a9bfc298df4e4ad4b

ORA10 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ora10)
)
)

比如我是把这个文件放在 C:\instantclient_12_1\tns 目录下了。

修改全局配置文件,增加一个 TNS_ADMIN 设置 ,指向这个目录。

set TNS_ADMIN=C:\instantclient_12_1\tns

这杨我们连接字符串就可以写成  用户名/密码@实例名

 

这个包网上看到下面一些问题:

https://groups.google.com/forum/#!topic/golang-china/4OmCsvqRcKA

 

3、goci

https://github.com/hlife/goci  它是修改自 https://github.com/egravert/goci

作者提供的编译注意事项:
在相关程序中我加了 cgo 编译时需加的头文件和连接库
#cgo CFLAGS: -I/home/oracle/app/oracle/product/11.2.0/client_1/rdbms/public
#cgo LDFLAGS: -lclntsh -L/home/oracle/app/oracle/product/11.2.0/client_1/lib
您在使用时,请将 /home/oracle/app/oracle/product/11.2.0/client_1 修改为你的
系统中 $ORACLE_HOME 的字串值

如果你使用简易的安装包,请在

http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html
下载:
oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64.rpm
oracle-instantclient11.2-devel-11.2.0.3.0-1.x86_64.rpm
并安装和设置oracle环境变量。
同时需设置
export TNS_ADMIN=/home/oracle/app/oracle/product/11.2.0/client_1/network/admin
### ORACLE_HOME 以您系统实际情况进行修改。

 

参考资料:

 

 

参看资料:

golang 和 oracle 数据库编程类库介绍
http://bbs.mygolang.com/thread-202-1-1.html

golang 在 redhat linux 下如何连接 oracle?
http://www.oschina.net/question/110132_91394

微博上一些相关讨论
http://s.weibo.com/weibo/golang%2520oracle&b=1&page=1

golang程序在windows上,注册为服务 - CSDN博客

mikel阅读(1083)

来源: golang程序在windows上,注册为服务 – CSDN博客


package main

import (
“log”
“net/http”
“os”

“github.com/jander/golog/logger”
“github.com/kardianos/service”
)

type program struct{}

func (p *program) Start(s service.Service) error {
go p.run()
return nil
}

func (p *program) run() {
// 代码写在这儿
}

func (p *program) Stop(s service.Service) error {
return nil
}

/**
* MAIN函数,程序入口
*/
func main() {
svcConfig := &service.Config{
Name: “”, //服务显示名称
DisplayName: “”, //服务名称
Description: “”, //服务描述
}

prg := &program{}
s, err := service.New(prg, svcConfig)
if err != nil {
logger.Fatal(err)
}

if err != nil {
logger.Fatal(err)
}

if len(os.Args) > 1 {
if os.Args[1] == “install” {
s.Install()
logger.Println(“服务安装成功”)
return
}

if os.Args[1] == “remove” {
s.Uninstall()
logger.Println(“服务卸载成功”)
return
}
}

err = s.Run()
if err != nil {
logger.Error(err)
}
}

注册服务步骤

1. 运行demo/main.go 得到demo.exe文件

2. 打开cmd 切换到Demo项目目录

3. 运行输入 demo.exe install 注册服务成功

4. 注册服务成功

【已解决】go语言用go get去安装第三方包出错:exec: "hg": executable file not found in %PATH% – 在路上

mikel阅读(937)

来源: 【已解决】go语言用go get去安装第三方包出错:exec: “hg”: executable file not found in %PATH% – 在路上

【问题】

折腾:

【记录】go语言中安装第三方包package(库)

期间,去用:

1
go get code.google.com/p/log4go

结果出错:

1
2
3
E:\Dev_Root\go\src\EmulateLoginBaidu>go get code.google.com/p/log4go
go: missing Mercurial command. See http://golang.org/s/gogetcmd
package code.google.com/p/log4go: exec: "hg": executable file not found in %PATH%

如图:

exec hg executable file not found in PATH

即:

exec: “hg”: executable file not found in %PATH%

【解决过程】

1.很明显,是在windows的cmd中,找不到hg。

而对于hg,如果是cygwin等环境,那肯定没问题,但是此处是cmd,所以没法用hg。

2.参考:

package code.google.com/p/go.example/hello: exec: “hg”: executable file not found in %PATH%. How to get remote golang packages?

也是让去安装hg。

3.所以就需要去另外在windows中安装hg:

【记录】windows下安装Mercurial的hg

4.安装完毕,就可以继续去试试了:

1
2
3
E:\Dev_Root\go\src\EmulateLoginBaidu>go get code.google.com/p/log4go
E:\Dev_Root\go\src\EmulateLoginBaidu>

结果就是:

没有消息,就是最好的消息

即:安装成功了,无任何错误信息。

5.那就去确认一下:

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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
E:\Dev_Root\go\src\EmulateLoginBaidu>go get code.google.com/p/log4go
E:\Dev_Root\go\src\EmulateLoginBaidu>ls
EmulateLoginBaidu.go  EmulateLoginBaidu.go.bak  EmulateLoginBaidu.log  EmulateLoginBaidu.log.bak
E:\Dev_Root\go\src\EmulateLoginBaidu>ls ../../src
EmulateLoginBaidu  EmulateLoginBaidu_2013-09-18_office_tryHandleCookie.7z  code.google.com  common_func_test  hello
E:\Dev_Root\go\src\EmulateLoginBaidu>cd
E:\Dev_Root\go\src\EmulateLoginBaidu
E:\Dev_Root\go\src\EmulateLoginBaidu>ls
EmulateLoginBaidu.go  EmulateLoginBaidu.go.bak  EmulateLoginBaidu.log  EmulateLoginBaidu.log.bak
E:\Dev_Root\go\src\EmulateLoginBaidu>cd ..
E:\Dev_Root\go\src>ls
EmulateLoginBaidu  EmulateLoginBaidu_2013-09-18_office_tryHandleCookie.7z  code.google.com  common_func_test  hello
E:\Dev_Root\go\src>cd code.google.com
E:\Dev_Root\go\src\code.google.com>ls
p
E:\Dev_Root\go\src\code.google.com>cd p
E:\Dev_Root\go\src\code.google.com\p>ls
log4go
E:\Dev_Root\go\src\code.google.com\p>cd log4go
E:\Dev_Root\go\src\code.google.com\p\log4go>ls
LICENSE  README  config.go  examples  filelog.go  log4go.go  log4go_test.go  pattlog.go  socklog.go  termlog.go  wrapper.go
E:\Dev_Root\go\src\code.google.com\p\log4go>ls -lha
total 94K
drwx------+ 1 Administrators None    0 Sep 20 17:05 .
drwx------+ 1 Administrators None    0 Sep 20 17:04 ..
drwx------+ 1 Administrators None    0 Sep 20 17:05 .hg
-rwx------+ 1 Administrators None  248 Sep 20 17:05 .hgtags
-rwx------+ 1 Administrators None 1.3K Sep 20 17:05 LICENSE
-rwx------+ 1 Administrators None  274 Sep 20 17:05 README
-rwx------+ 1 Administrators None 7.7K Sep 20 17:05 config.go
drwx------+ 1 Administrators None    0 Sep 20 17:05 examples
-rwx------+ 1 Administrators None 6.3K Sep 20 17:05 filelog.go
-rwx------+ 1 Administrators None  14K Sep 20 17:05 log4go.go
-rwx------+ 1 Administrators None  17K Sep 20 17:05 log4go_test.go
-rwx------+ 1 Administrators None 3.1K Sep 20 17:05 pattlog.go
-rwx------+ 1 Administrators None 1.1K Sep 20 17:05 socklog.go
-rwx------+ 1 Administrators None 1.2K Sep 20 17:05 termlog.go
-rwx------+ 1 Administrators None 8.3K Sep 20 17:05 wrapper.go
E:\Dev_Root\go\src\code.google.com\p\log4go>cd ../../bin
系统找不到指定的路径。
E:\Dev_Root\go\src\code.google.com\p\log4go>cd ..
E:\Dev_Root\go\src\code.google.com\p>cd ../
E:\Dev_Root\go\src\code.google.com>cd ..
E:\Dev_Root\go\src>cd ../bin
E:\Dev_Root\go\bin>ls
E:\Dev_Root\go\bin>cd ..
E:\Dev_Root\go>cd pkg
E:\Dev_Root\go\pkg>ls
windows_amd64
E:\Dev_Root\go\pkg>cd windows_amd64
E:\Dev_Root\go\pkg\windows_amd64>ls
code.google.com
E:\Dev_Root\go\pkg\windows_amd64>cd code.google.com
E:\Dev_Root\go\pkg\windows_amd64\code.google.com>ls
p
E:\Dev_Root\go\pkg\windows_amd64\code.google.com>cd p
E:\Dev_Root\go\pkg\windows_amd64\code.google.com\p>ls
log4go.a
E:\Dev_Root\go\pkg\windows_amd64\code.google.com\p>ls -lha
total 448K
drwx------+ 1 Administrators None    0 Sep 20 17:05 .
drwx------+ 1 Administrators None    0 Sep 20 17:05 ..
-rwx------+ 1 Administrators None 448K Sep 20 17:05 log4go.a
E:\Dev_Root\go\pkg\windows_amd64\code.google.com\p>

的确是在pkg下有log4go.a的

在src下,是有对应目录结构的:

installed log4go src and pkg

 

 

【总结】

此处通过go get安装包,出现:

exec: “hg”: executable file not found in %PATH%

的错误,

原因是:

windows下没有安装Mercurial的hg(类似于cvs,svn,git的版本管理工具)

解决办法是:

去hg官网主页下载和安装即可:

【记录】windows下安装Mercurial的hg

我第1个可用的golang小程序 - Go语言中文网 - Golang中文社区

mikel阅读(901)

来源: 我第1个可用的golang小程序 – Go语言中文网 – Golang中文社区

  1. 为什么要写这个程序
  2. 寻找时间同步Api
  3. 编写同步程序
  4. 封装成windows service

 

  1. 为什么要写这个程序        一直在关注golang, 从2011年4月配置环境写了个hello world!(http://weibo.com/1409046677/wr4n3vdYFV), 后来没再动手写golang代码了, 只是关注golang方面的信息/资讯。去年到今年稍认真的看了一些golang的基础语法,然后前几天家里的台式电脑又开机用了一下,可能是bios电池没电的原因吧, 总是开机后需要重新设置时间。于是就想不如用golang写个windows服务自动更新系统时间,就这样才有了今天这个golang小程序。

    另外可能有人会说使用windows时间同步功能就行了,没必要麻烦。这里我的主要目的是突然兴趣所使想用golang练手,其次是windows自带的时间同步功能可能由于墙的原因不好使,反正我手动同步都没有成功过,如图:

  2. 寻找时间同步Api        搜索资料时了解到Network Time Protocol(NTP)(http://baike.baidu.com/view/60648.htm)能很精准的同步时间,我不要那么高要求,只是获取最新时间,更新时间就行,所以得在网上找个可用的能获取最新时间API,开始担心墙,想找国内的,百度有一个http://open.baidu.com/special/time/,但是个页面,不是我想要的,最后确定使用国外的http://www.earthtools.org/timezone-1.1/35.86166/104.195397
  3. 编写同步程序        挺简单的一个小程序,思路就是获取API数据,取到时间,然后设置到系统时间,由于还不熟悉golang的api,不知道怎样使用golang来更新系统时间,后来就使用golang调用dos命令来更新。

    在编写代码时,明明知道在golang中,大小写分别表示public和private,但在定义Timezone结构体,里面的变量使用小写,导致总是取不到正确的数据,折腾了不少时间。另外为了ISO-8859-1编码花了点时间找资料。

  4. 封装成windows service        关于编写windows service,开始搜索到资料http://sanatgersappa.blogspot.com/2013/07/windows-service-with-go-easy-way.html (需要FQ),感觉NSSM(http://nssm.cc/)挺方便的,考虑使用NSSM程序,使用NSSM把exe程序注册成windows服务,命令:

    nssm install MyService d:\MyService.exe
    (where d:\MyService.exe is the full path to the exe file).

    我当时就写了2个批处理程序CreateService.bat:
    nssm install SyncSystemTimeService %CD%\SyncSystemTim.exe

    DeleteService.bat:
    sc delete SyncSystemTimeService

    windows服务注册成功了,启动SyncSystemTimeService服务后,我的程序好像并没有生效,我怀疑要么必须使用完整的路径(不能用%CD%变量), 要么可能使用%~dp0而不是%CD%(参考资料:http://stackoverflow.com/questions/16255184/how-do-i-find-the-current-directory-of-a-batch-file-and-then-use-it-for-the-pat),后来我没有继续查原因,在网上找到了使用golang写的一个服务程序:http://bitbucket.org/kardianos/service, 把代码拉下来,调整一下就达到我想要的要求。

windows下搭建GO开发环境 - chinesern - 博客园

mikel阅读(830)

来源: windows下搭建GO开发环境 – chinesern – 博客园

1. Go下载

由于某些原因golang.org不能访问,可以使用下面的镜像地址进行下

http://fossies.org/windows/misc/

我的环境是win8 64,所以选择go1.7.5.windows-amd64.msi 进行下载

 

2. Install

安装在 d:/go 目录下

新建一个名为GOROOT的环境变量(注意大小写)

 

 

 

4. 在系统的Path环境变量中添加go的bin目录(注意大小写)

 

5. 命令行输入 go version

安装成功!

 

6. LiteIDE下载

LiteIDE的介绍大家可以自行在网上找,下面是Golang中国提供的LiteIDE下载

http://www.golangtc.com/download/liteide

选择自己合适的系统文件进行下载,这里我选择的是liteidex30.3.windows-qt5.zip

 

7. LiteIDE安装

把下载的文件解压缩到d:\app\liteide下

运行bin\liteide.exe即可启动

 

8. LiteIDE配置

打开LiteIDE的bin目录下的liteide.exe,开始配置Go的编译环境,依次点击菜单栏上的的:查看 -> 选项 -> LiteEnv,因为电脑上装的64位系统,所以选中win64.env进行环境变量编辑 ,点击确认,跳出编辑框

 

9. 修改完成后Ctrl + S保存(修改GOROOT等),重启LiteIDE

 

10.重启后在Package浏览下如果能找到Go则说明配置成功(左边栏的Package)

 

11.新建一个用于存放Go程序的目录,依次点击菜单栏上的:查看 -> 管理GOPATH -> 浏览(相当于配置工程路径)

点击ok会看到Package浏览多了一项

 

12.新建一个简单工程测试Go语言环境,依次点击菜单上的:文件 -> 新建,如下配置后,点击ok

点击工具栏上的BuildAndRun,或者执行Ctrl+B进行编译或者Ctrl+R编译并运行,运行程序,若成功在底下的编译输出窗口中会出现HelloWorld

Windows 安装 Go语言开发环境 - Go语言中文网 - Golang中文社区

mikel阅读(851)

来源: Windows 安装 Go语言开发环境 – Go语言中文网 – Golang中文社区

Windows 安装 Go语言开发环境

 

  1. 下载安装包

32 位请选择名称中包含 windows-386 的 msi 安装包,64 位请选择名称中包含 windows-amd64 的。下载好后运行,不要修改默认安装目录 C:\Go\,若安装到其他位置会导致不能执行自己所编写的 Go 代码。安装完成后默认会在环境变量 Path 后添加 Go 安装目录下的 bin 目录 C:\Go\bin\,并添加环境变量 GOROOT,值为 Go 安装根目录 C:\Go\ 。

验证是否安装成功

在运行中输入 cmd 打开命令行工具,在提示符下输入 go,检查是否能看到 Usage 信息。输入 cd %GOROOT%,看是否能进入 Go 安装目录。若都成功,说明安装成功。

不能的话请检查上述环境变量 Path 和 GOROOT 的值。若不存在请卸载后重新安装,存在请重启计算机后重试以上步骤。

 

环境变量设置

Go编译器需要三个必须的环境变量和一个可选的环境变量。环境变量在.bashrc 或其他配置文件中设置。

GOPATH=c:\go;c:\go\src;F:\Go\Demo

$GOROOT

Go安装包的根目录。通常是放在$HOME/go,当然也可以是其他位置。默认为c:\go

 

$GOOS and 和 $GOARCH

 

这两个环境变量表示目标代码的操作系统和CPU类型。$GOOS选项有linux、 freebsd、darwin (Mac OS X 10.5 or 10.6) 和 nacl (Chrome的Native Client接口,还未完成)。$GOARCH的 选项有amd64 (64-bit x86,目前最成熟)、386 (32-bit x86)、 和arm (32-bit ARM,还未完成)。下面是$GOOS和 $GOARCH的可能组合:

我的为:GOOS=darwin     GOARCH=amd64

 

  $GOOS       $GOARCH	
  darwin      386
  darwin      amd64
  freebsd     386
  freebsd     amd64
  linux       386
  linux       amd64
  linux       arm          incomplete
  nacl        386
  windows     386          incomplete

 

$GOBIN (optional) (可选)

c:\go\bin;F:\Go\Demo\bin;    后面的为工作目录

指明用于存放go的二进制程序目录。如果是没设置$GOBIN环境变量, 则默认是安装在$HOME/bin。如果设置了该变量,需要确保$PATH 变量也包含这个路径,这样编译器可以找到正确的执行文件。

 

$GOARM (optional, arm, default=6)

 

ARM处理器(待补充)。

需要说明的是$GOARCH和$GOOS环境变量表示的是目标代码 运行环境,和当前使用的平台是无关的。这个对于交叉编译是很方便的。在.bashrc文件中设置以下环境变量:

  export GOROOT=$HOME/go
  export GOARCH=amd64
  export GOOS=linux
  export PATH=.:$PATH:$GOBIN

检查是否能正常使用:

  source ~/.bashrc
  cd ~
  8g -V


Go 配置出现错误: GOPATH entry is relative; must be absolute path: “”.

把 GOPATH 的值 E:\GOPATH; 改成了 E:\GOPATH 竟然好了,原来是结尾分号搞鬼了。

js将当前时间格式化为年-月-日 时:分:秒

mikel阅读(914)

转自:
http://blog.csdn.net/ziwoods/article/details/64443776?utm_source=itdadao&utm_medium=referral

利用js的Date()对象,将系统当前时间格式化为年-月-日 时:分:秒。也可以自己定义格式。(做项目时遇到这个问题。本来想百度一个用,哎,网上的结果太乱了,于是自己写一个)

<script type=“text/JavaScript>

var d=new Date();

var year=d.getFullYear();

var month=change(d.getMonth()+1);

var day=change(d.getDate());

var hour=change(d.getHours());

var minute=change(d.getMinutes());

var second=change(d.getSeconds());

function change(t){

if(t<10){

return “0”+t;

}else{

return t;

}

}

var time=year+‘-‘+month+‘-‘+day+‘ ‘+hour+‘:’+minute+‘:’+second;

document.write(time);

</script>

让ThinkPHP3.2.3 支持对Oracle LOB数据的操作 - Fighting! - CSDN博客

mikel阅读(1326)

来源: 让ThinkPHP3.2.3 支持对Oracle LOB数据的操作 – Fighting! – CSDN博客

让ThinkPHP3.2.3 支持对Oracle LOB数据的操作

1. 问题由来

直接用PHP存取oracle的clob也是会自动截断。当需要插入的数据很大,会直接报错。ThinkPHP 3.2.3 封装的CURD也不能解决这个问题。
这个时候就需要使用PHP OCI8的拓展函数库。

2. 配置PHP:OCI8

首先,原理是利用PHP OCI8的拓展函数库。所以,必须先把OCI8,和php_oci8和php_oci8_11 功能开启。
可以wampserver上直接进行设置。如下图:
setconfig.png
设置成功后,可以通过phpinfo() 查看,显示enabled即开启成功,如下图。
phpinfo.png

2. PHP:OCI8的CURD

PHP对Clob文件是以resource的类型存取的, 所以PDO对Clob资源文件的读取应该这样操作:

$arr = $pdo -> fetch();
is_resource($arr[‘clob’]) && $arr[‘clob’]=stream_get_contents($arr[‘clob’]);
  • 1
  • 2

可以对照参考:PHP:OCI8 手册
更多CURD的Examples可以参考 官方范例

$c1 = oci_connect("hr", "welcome", 'localhost/XE');
$c2 = oci_connect("hr", "welcome", 'localhost/XE');

// Both $c1 and $c2 show the same PHP resource id meaning they use the
// same underlying database connection
echo "c1 is $c1<br>\n";
echo "c2 is $c2<br>\n";

function create_table($conn)
{
    $stmt = oci_parse($conn, "create table hallo (test varchar2(64))");
    oci_execute($stmt);
    echo "Created table<br>\n";
}

function drop_table($conn)
{
    $stmt = oci_parse($conn, "drop table hallo");
    oci_execute($stmt);
    echo "Dropped table<br>\n";
}

function insert_data($connname, $conn)
{
    $stmt = oci_parse($conn, "insert into hallo
              values(to_char(sysdate,'DD-MON-YY HH24:MI:SS'))");
    oci_execute($stmt, OCI_DEFAULT);
    echo "$connname inserted row without committing<br>\n";
}

function rollback($connname, $conn)
{
    oci_rollback($conn);
    echo "$connname rollback<br>\n";
}

function select_data($connname, $conn)
{
    $stmt = oci_parse($conn, "select * from hallo");
    oci_execute($stmt, OCI_DEFAULT);
    echo "$connname ----selecting<br>\n";
    while (oci_fetch($stmt)) {
        echo "    " . oci_result($stmt, "TEST") . "<br>\n";
    }
    echo "$connname ----done<br>\n";
}

create_table($c1);

insert_data('c1', $c1);   // Insert a row using c1
sleep(2);                 // sleep to show a different timestamp for the 2nd row
insert_data('c2', $c2);   // Insert a row using c2

select_data('c1', $c1);   // Results of both inserts are returned
select_data('c2', $c2);   // Results of both inserts are returned

rollback('c1', $c1);      // Rollback using c1

select_data('c1', $c1);   // Both inserts have been rolled back
select_data('c2', $c2);

drop_table($c1);

// Closing one of the connections makes the PHP variable unusable, but
// the other could be used
oci_close($c1);
echo "c1 is $c1<br>\n";
echo "c2 is $c2<br>\n";


// Output is:
//    c1 is Resource id #5
//    c2 is Resource id #5
//    Created table
//    c1 inserted row without committing
//    c2 inserted row without committing
//    c1 ----selecting
//        09-DEC-09 12:14:43
//        09-DEC-09 12:14:45
//    c1 ----done
//    c2 ----selecting
//        09-DEC-09 12:14:43
//        09-DEC-09 12:14:45
//    c2 ----done
//    c1 rollback
//    c1 ----selecting
//    c1 ----done
//    c2 ----selecting
//    c2 ----done
//    Dropped table
//    c1 is 
//    c2 is Resource id #5
?>

注意
1.[oci_connect()]连接数据库时,为了防止乱码,建立连接的时候就指定字符编码。

// OCILogon 是oci_connect的别名, 不建议使用OCILogon
oci_connect($username, $password, $dbsid, $charset);
OCILogon($username, $password, $dbsid, $charset);

2.oci_execute() 执行一条之前被解析过的语句(见 oci_parse())。可选参数 mode 允许定义执行模式(默认是 OCI_COMMIT_ON_SUCCESS)。如果不需要将语句自动提交,则需要把 mode 设为 OCI_DEFAULT。
用 OCI_DEFAULT 模式时,将建立一个事务。事务会在关闭连接或脚本结束时(看哪个先)自动回卷。需要明确调用 oci_commit() 来提交事务,或者 oci_rollback() 中止事务。
成功时返回 TRUE, 或者在失败时返回 FALSE。

3. ThinkPHP 的Oracle Clob操作类:

[引用自ThinkPHP社区《分享自己的oracel类,支持多CLOB操作及主键自增加》]


class Ociclob{

    var $conn;
    var $table;
    var $seqname;
    var $where;//查询条件,字符串
    var $lob;//lob字段名,数组
    var $data;//数据数组

    //架构函数
    public function Ociclob($table='',$data=''){
        //取TP框架的数据库配置
        $this->connect(C('DB_USER'),C('DB_PWD'),C('DB_NAME'));

        if(!empty($table)) $this->table=$table;
        if(!empty($table)&&!empty($data)){
            $this->checkfield($table,$data);
        }
    }

    //检测字段属性
    public function checkfield($table,$data){

        if(!empty($table)&&!empty($data)){
            $fields=$this->getFields($table);
            foreach ($data as $key=>$value){
                //检测lob字段
                if(strtolower($fields[strtolower($key)]['type'])=='clob')  $lob[]=$key;
                //检测PK字段并获取SEQ
                if(strtolower($fields[strtolower($key)]['primary'])==1){
                    $this->seqname=$value;
                    $this->data[$key]=$this->getseq();//根据自动填充主键值
                    $pk=$key;//主键被设置标志
                }
            }
            $this->lob=$lob;
            //如果没有在DATA中的设置主键值,则根据SEQNAME自动填充
            if(!isset($pk)&&!empty($this->seqname)) {
                $this->data[$fields['pk']]=$this->getseq();
            }
            unset($lob);
            unset($pk);
        }

    }

    /**
    +----------------------------------------------------------
     * 连接ORACLE
    +----------------------------------------------------------
     */
    public function connect($user, $password, $SID){
        // 创建连接,并设置字符编码为'UTF8'.
        $this->conn = OCILogon($user, $password, $SID, 'UTF8');
    }

    /**
    +----------------------------------------------------------
     * 设置ORACLE字符集
    +----------------------------------------------------------
     */
    public function charset($code='UTF8'){
        $sql="ALTER DATABASE CHARACTER SET $code";
        $stmt = oci_parse($this->conn, $sql);
        oci_execute($stmt);
        oci_commit($this->conn);
        // Free resources
        oci_free_statement($stmt);

    }

    /**
    +----------------------------------------------------------
     * 添加包含有CLOB字段的记录
    +----------------------------------------------------------
     */
    public function insert (){

        //检测字段属性
        if(empty($this->lob)) $this->checkfield($this->table,$this->data);

        //字段整理
        $f=strtoupper(join(',',array_keys($this->data)));
        //数据整理
        foreach ($this->data as $key=>$val){
            $f_v_arr[]=!in_array($key,$this->lob)?"'".$val."'":"EMPTY_CLOB()";
        }
        $f_v=join(',',$f_v_arr);

        //lob字段清理并赋值LOB数据到绑定变量
        for ($i=0;$i<count($this->lob);$i++){
            $lob_str.=":".$this->lob[$i]."_loc,";
        }
        $returning_str.="  RETURNING ".join(',',$this->lob)." INTO ".rtrim($lob_str,',');

        //组装SQL
        $sql = "INSERT INTO  $this->table ($f) VALUES (".$f_v.")".$returning_str ;
        $stmt = oci_parse($this->conn, $sql);

        for ($i=0;$i<count($this->lob);$i++){
            // 创建一个“空”的OCI LOB对象绑定到定位器
            $$this->lob[$i] = oci_new_descriptor($this->conn, OCI_D_LOB);
            $lob_str=":".$this->lob[$i]."_loc";
            // 将Oracle LOB定位器绑定到PHP LOB对象
            oci_bind_by_name($stmt, $lob_str, $$this->lob[$i], -1, OCI_B_CLOB);
        }

        // 执行该语句的使用,oci_default -作为一个事务
        oci_execute($stmt, OCI_DEFAULT)    or die ("Unable to execute query\n");

        // 保存LOB对象数据
        for ($i=0;$i<count($this->lob);$i++){
            if(!$$this->lob[$i]->save($this->data[$this->lob[$i]])){
                $result=false;
                break;
            }
        }

        if ( isset($result)&&$result==false ) {
            // 如果错误,则回滚事务
            oci_rollback($this->conn);
            $ret=false;
        } else {
            // 如果成功,则提交
            oci_commit($this->conn);
            $ret=true;
        }

        // 释放资源
        oci_free_statement($stmt);
        for ($i=0;$i<count($this->lob);$i++){
            $$this->lob[$i]->free();
        }

        return $ret;

    }

    /**
    +----------------------------------------------------------
     * 更新CLOB字段的内容
    +----------------------------------------------------------
     */
    public function update (){
        //检测字段属性
        if(empty($this->lob)) $this->checkfield($this->table,$this->data);

        //数据整理
        foreach ($this->data as $key=>$val){
            $set_arr[]=!in_array($key,$this->lob)?strtoupper($key)."='".$val."'":$key."=EMPTY_CLOB()";
        }
        $set_str=join(',',$set_arr);

        //lob字段清理并赋值LOB数据到绑定变量
        for ($i=0;$i<count($this->lob);$i++){
            $lob_str.=":".$this->lob[$i]."_loc,";
        }
        $returning_str.="  RETURNING ".join(',',$this->lob)." INTO ".rtrim($lob_str,',');
        $where_str=strtoupper($this->where);
        //组装SQL
        $sql = "UPDATE  $this->table SET   $set_str  WHERE   $where_str  ".$returning_str;
        $stmt = OCIParse($this->conn, $sql);

        for ($i=0;$i<count($this->lob);$i++){
            // 创建一个“空”的OCI LOB对象绑定到定位器
            $$this->lob[$i] = OCINewDescriptor($this->conn, OCI_D_LOB);
            $lob_str=":".$this->lob[$i]."_loc";
            // 将Oracle LOB定位器绑定到PHP LOB对象
            OCIBindByName($stmt, $lob_str, $$this->lob[$i], -1, OCI_B_CLOB);
        }

        // 执行该语句的使用,oci_default -作为一个事务
        OCIExecute($stmt, OCI_DEFAULT)    or die ("Unable to execute query\n");

        // 保存LOB对象数据
        for ($i=0;$i<count($this->lob);$i++){
            if(!$$this->lob[$i]->save($this->data[$this->lob[$i]])){
                $result=false;
                break;
            }
        }
        if ( isset($result)&&$result==false ) {
            OCIRollback($this->conn);
            $ret=false;

        }else $ret=true;

        // 提交事务
        OCICommit($this->conn);
        //释放资源
        for ($i=0;$i<count($this->lob);$i++){
            $$this->lob[$i]->free();
        }
        OCIFreeStatement($stmt);
        return $ret;
    }

    public function getseq(){
        $sql="select $this->seqname.currval from dual";

        $stmt = oci_parse($this->conn, strtoupper($sql));

        oci_execute($stmt);
        $data = array();
        while ( $row = oci_fetch_array($stmt, OCI_ASSOC+OCI_RETURN_LOBS) ) {
            if($row == null) continue;
            array_push($data, $row);
        }
        // 释放资源
        oci_free_statement($stmt);
        array_filter($data);
        return $data[0]['CURRVAL'];
    }

    /**
    +----------------------------------------------------------
     * 查询包含有CLOB字段的记录
    +----------------------------------------------------------
     */
    public function select ($sql=''){
        $sql = empty($sql) ? "SELECT * FROM  $this->table  WHERE $this->where ":$sql;

        $stmt = oci_parse($this->conn, strtoupper($sql));

        oci_execute($stmt);

        while ( $row = oci_fetch_array($stmt, OCI_ASSOC+OCI_RETURN_LOBS) ) {
            $data[]=$row;
        }
        // 释放资源
        oci_free_statement($stmt);
        return $data;
    }

    /**
     * 取得数据表的字段信息
     * @access public
     */
    public function getFields($tableName) {
        $sql="select a.column_name,data_type,decode(nullable,'Y',0,1) notnull,data_default,decode(a.column_name,b.column_name,1,0) pk "
            ."from user_tab_columns a,(select column_name from user_constraints c,user_cons_columns col "
            ."where c.constraint_name=col.constraint_name and c.constraint_type='P'and c.table_name='".strtoupper($tableName)
            ."') b where table_name='".strtoupper($tableName)."' and a.column_name=b.column_name(+)";

        $result=  $this->select ($sql);
        $info   =   array();
        if($result) {
            foreach ($result as $key => $val) {
                $info[strtolower($val['COLUMN_NAME'])] = array(
                    'name'    => strtolower($val['COLUMN_NAME']),
                    'type'    => strtolower($val['DATA_TYPE']),
                    'notnull' => $val['NOTNULL'],
                    'default' => $val['DATA_DEFAULT'],
                    'primary' => $val['PK'],
                    'autoinc' => $val['PK'],
                );
                if($val['PK']==1) $info['pk']=$val['COLUMN_NAME'];
            }
        }
        return $info;
    }
}
?>

Ociclob 的调用样例
假设已经存在一个表名为’tb_post’的表(表的主键为’postid’,并且是自增的),以及一个名为’SEQ_POST’的序列名

/**
 * $data 要插入到表的数据
 * 返回值 插入数据的ID
 */
function insertPostWithClob($data) {
    $clog_obj=new Ociclob();
    $clog_obj->table='tb_post';
    $clog_obj->seqname='SEQ_POST';
    $clog_obj->data = $data;
    if($clog_obj->insert() == false) return -1;
    $ret = $clog_obj->getseq();
    return $ret;
}
/**
 * $data 要插入到表的数据
 * 返回值 是否修改成功
 */
function updatePostWithClob($data) {
    $postid = $data['postid'];
    $clog_obj=new Ociclob();
    $clog_obj->table='tb_post';
    $clog_obj->where="postid='$postid'";
    $clog_obj->data = $data;
    return $clog_obj->update();
}
/**
 * $postid
 * 返回值 查询得到的list
 */
function selectPostWithClob($postid) {
    $clog_obj=new Ociclob();
    $clog_obj->table='tb_post';
    $clog_obj->where="postid='$postid'";
    $ret=$clog_obj->select();
    return $ret;
}

4. 参考资料:

  1. ThinkPHP社区《分享自己的oracel类,支持多CLOB操作及主键自增加》
  2. [PHP Manual OCI8函数介绍]
  3. [oracle 官网的解释]