分类目录归档:技术文献

在C++中使用sqlite的示例(从下载、编译、工程建立、配置、测试代码编写全方位介绍)

SQLite是一个完全独立的、不需要服务器、不要任何配置、支持SQL的、开源的文件数据库引擎。源代码和支持可以登录:http://www.sqlite.org/
本文主要介绍如何在C++中使用sqlite。 1、SQLite下载与安装
本文以3.7.4版本为例进行说明。在http://www.sqlite.org/ 下载windows平台的3.7.4版本的sqlite。
(1)下载sqlite3.dll和sqlite3.def文件,其下载地址为:http://www.sqlite.org/sqlite-dll-win32-x86-3070400.zip ,本文直接下载到桌面
下载后文件为:

在C++中使用sqlite的示例(从下载、编译、工程建立、配置、测试代码编写全方位介绍)X

,解压后文件为:在C++中使用sqlite的示例(从下载、编译、工程建立、配置、测试代码编写全方位介绍)
(2)下载.h/.cpp文件,其下载地址为:http://www.sqlite.org/sqlite-amalgamation-3070400.zip,本文直接下载到桌面,下载后文件为:在C++中使用sqlite的示例(从下载、编译、工程建立、配置、测试代码编写全方位介绍),解压后文件为:在C++中使用sqlite的示例(从下载、编译、工程建立、配置、测试代码编写全方位介绍)
2、代码编译,由于SQLite下载文件中只提供了def文件而没有提供lib文件。所以在正式使用sqlite之前需要先编译lib文件。下面给出编译lib文件的方法和步骤。
(1)打开V2008自带的命令行工具(本文以vs2008为例进行说明)
在C++中使用sqlite的示例(从下载、编译、工程建立、配置、测试代码编写全方位介绍)
(2)打开后的界面如下:
在C++中使用sqlite的示例(从下载、编译、工程建立、配置、测试代码编写全方位介绍)
(3)在上面的命令行中输入(注意空格):(小技巧,输入lib /def:后可以将刚刚解压sqlite3.def直接拖到命令行界面中,然后加上/machine:ix86)
在C++中使用sqlite的示例(从下载、编译、工程建立、配置、测试代码编写全方位介绍)
(4)输入命令行回车:
在C++中使用sqlite的示例(从下载、编译、工程建立、配置、测试代码编写全方位介绍)
到此sqlite编译完成.
(5)编译完成后生成sqlite3.lib、sqlite3.exp文件,该文件路径在:C:Program FilesMicrosoft Visual Studio 9.0VC
在C++中使用sqlite的示例(从下载、编译、工程建立、配置、测试代码编写全方位介绍)
3、sqlite使用工程建立
(1)打开vs2008,选择File→New→Project.在弹出的对话框中按如下进行选择,并在Name中输入工程名:TestSqlite,如下图所示
在C++中使用sqlite的示例(从下载、编译、工程建立、配置、测试代码编写全方位介绍)
(2)单击ok,如下图:
在C++中使用sqlite的示例(从下载、编译、工程建立、配置、测试代码编写全方位介绍)
(3)单击Finsh完成工程建立,如下图:在C++中使用sqlite的示例(从下载、编译、工程建立、配置、测试代码编写全方位介绍)
在C++中使用sqlite的示例(从下载、编译、工程建立、配置、测试代码编写全方位介绍)
4、sqlite配置
(1)将前面下载和编译期间的.h、.lib、.cpp、.def、.dll文件分别放在inc、lib文件夹下。如下图
在C++中使用sqlite的示例(从下载、编译、工程建立、配置、测试代码编写全方位介绍)
其中inc文件内容为:
在C++中使用sqlite的示例(从下载、编译、工程建立、配置、测试代码编写全方位介绍)
lib文件内容为:
在C++中使用sqlite的示例(从下载、编译、工程建立、配置、测试代码编写全方位介绍)
(2)在C/C++ General的Additional Include Directories中输入..inc 如下图:
在C++中使用sqlite的示例(从下载、编译、工程建立、配置、测试代码编写全方位介绍)
(3)在Linker的Additional Library Directories中输入..lib 如下图:
在C++中使用sqlite的示例(从下载、编译、工程建立、配置、测试代码编写全方位介绍)
(4)在Linker的Input的Additional Dependencies中输入:sqlite3.lib 如下图:
在C++中使用sqlite的示例(从下载、编译、工程建立、配置、测试代码编写全方位介绍)
(5)单击确定,到此sqlite配置已经完成
5、测试代码。
本文给出sqlite使用的文件模式和内存模式测试代码。在TestSqlite.cpp中输入如下代码:
#include 'stdafx.h'
#include 'sqlite3.h'
int testdb(void);
int testdb2(void);
int testdb3(void);
//callback回调函数 _callback_exec的编写,其中notused为sqlite3_exec中的第四个参数,第二个参数是栏的数目,第三个是栏的名字,第四个为查询得到的值
static int _callback_exec(void * notused,int argc, char ** argv, char ** aszColName)
{
int i;
for ( i=0; i<argc; i++ )
{
printf( '%s = %s/n', aszColName[i], argv[i] == 0 ? 'NUL' : argv[i] );
}
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
//文件模式
testdb();
testdb2();
testdb3();
return 0;
}
#include <cstdio>
#include <cstdlib>
#include 'sqlite3.h'
int testdb(void)
{
sqlite3 *db=NULL;
char *zErrMsg = 0;
int rc;
//打开指定的数据库文件,如果不存在将创建一个同名的数据库文件
rc = sqlite3_open('test1.db', &db);
if(rc)
{
fprintf(stderr, 'Can’t open database: %sn', sqlite3_errmsg(db));
sqlite3_close(db);
return (1);
}
else
printf('You have opened a sqlite3 database named test1.db successfully!n');
//创建一个表,如果该表存在,则不创建,并给出提示信息,存储在zErrMsg 中
char *sql = ' CREATE TABLE test(ID INTEGER PRIMARY KEY,AGE INTEGER,LEVEL INTEGER,NAME VARCHAR(12),SALARY REAL);' ;
sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );
//插入数据
sql = 'INSERT INTO test VALUES(NULL , 1 , 1 , '201205151206', 117.9 );' ;
sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );
int nrow = 0, ncolumn = 0; //查询结果集的行数、列数
char **azResult; //二维数组存放结果
//查询数据
sql = 'SELECT * FROM test ';
sqlite3_get_table( db , sql , &azResult , &nrow , &ncolumn , &zErrMsg );
int i = 0 ;
printf( 'row:%d column=%d n' , nrow , ncolumn );
printf( 'nThe result of querying is : n' );
for( i=0 ; i<( nrow + 1 ) * ncolumn ; i++ )
{
printf( 'azResult[%d] = %sn', i , azResult[i] );
}
//删除数据
sql = 'DELETE FROM test WHERE AGE = 1 ;' ;
sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );
//释放掉azResult 的内存空间
sqlite3_free_table( azResult );
sqlite3_close(db); //关闭数据库
int c=getchar();
return 0;
}
int testdb2(void)
{
const char * sSQL = 'select * from t1;';
char * pErrMsg = 0;
int ret = 0;
sqlite3 * db = 0;
ret = sqlite3_open('./test2.db', &db);
if ( ret != SQLITE_OK )
{
fprintf(stderr, 'Could not open database: %s', sqlite3_errmsg(db));
exit(1);
}
printf('Successfully connected to database/n');
sqlite3_exec( db, sSQL, _callback_exec, 0, &pErrMsg );
if ( ret != SQLITE_OK )
{
fprintf(stderr, 'SQL error: %s/n', pErrMsg);
sqlite3_free(pErrMsg);
}
sqlite3_close(db);
db = 0;
return 0;
}
int testdb3(void)
{
const char * sSQL = 'select * from t1;';
char * pErrMsg = 0;
int ret = 0;
sqlite3 * db = 0;
ret = sqlite3_open(':memory:', &db);
if ( ret != SQLITE_OK )
{
fprintf(stderr, 'Could not open database: %s', sqlite3_errmsg(db));
exit(1);
}
printf('Successfully connected to database/n');
char *zErrMsg = 0;
char *sql = ' CREATE TABLE test(ID INTEGER PRIMARY KEY,AGE INTEGER,LEVEL INTEGER,NAME VARCHAR(12),SALARY REAL);' ;
sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );
//插入数据
sql = 'INSERT INTO test VALUES(NULL , 1 , 1 , '201205151206', 20.9 );' ;
sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );
int nrow = 0, ncolumn = 0; //查询结果集的行数、列数
char **azResult; //二维数组存放结果
//查询数据
sql = 'SELECT * FROM test ';
sqlite3_get_table( db , sql , &azResult , &nrow , &ncolumn , &zErrMsg );
int i = 0 ;
printf( 'row:%d column=%d n' , nrow , ncolumn );
printf( 'nThe result of querying is : n' );
for( i=0 ; i<( nrow + 1 ) * ncolumn ; i++ )
{
printf( 'azResult[%d] = %sn', i , azResult[i] );
}
//释放掉azResult 的内存空间
sqlite3_free_table( azResult );
sqlite3_close(db); //关闭数据库
return 0;
}
6、运行结果
在C++中使用sqlite的示例(从下载、编译、工程建立、配置、测试代码编写全方位介绍)
总结:到此sqlite的从下载、编译、工程建立、配置、测试代码编写、运行结果介绍已经完成。关于sqlite的更多的理论知识将在后续我将会继续给出。

Ubuntu 14.04 更新源

1、备份源
# sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

2、编辑源文件/etc/apt/sources.list,并添加以下地址
# sudo gedit /etc/apt/sources.list

网易163源:
deb http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse

搜狐源:
deb http://mirrors.sohu.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.sohu.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.sohu.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.sohu.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.sohu.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.sohu.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.sohu.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.sohu.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.sohu.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.sohu.com/ubuntu/ trusty-backports main restricted universe multiverse

oschina源:
deb http://mirrors.oschina.net/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.oschina.net/ubuntu/ trusty-backports main restricted universe multiverse
deb http://mirrors.oschina.net/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.oschina.net/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.oschina.net/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.oschina.net/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.oschina.net/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.oschina.net/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.oschina.net/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.oschina.net/ubuntu/ trusty-updates main restricted universe multiverse

3、 更新源索引,使新源生效
# sudo apt-get update

Ubuntu Linux系统下的SVN客户端工具PySVN

在Windows下面一直在用TortoiseSVN做为SVN客户端工具,但它居然没提供Linux版本,无视Linux用户的存在。它视我如空气,偶视它如废土。开始探索尝试其他跨平台的SVN客户端,最后在试用了几个后,发现PySvn相对比较好。在这里介绍给大家:

PySVN官方网站:http://pysvn.tigris.org/

Mission

The pysvn project's goal is to enable Tools to be written in Python that use Subversion.

Windows, Mac OS X, Linux and other unix platforms are supported.

pysvn Extension FeaturesSupports all svn client featuresSupports svn transaction features required to write svn pre-commit hooksEasy to learn and usePython like interfaceGood Documentation and examplesNo need to understand the Subversion C APIpysvn WorkBench FeaturesEasy to learn and useAll subversion client operations in a GUIEnhanced subversion operations (rename of modified files etc)Support software development workflowBuiltin GUI diff showing line and character diffsAbility to diff between revisions in a files historyRuns on Windows, Mac OS X and Unix platformsImplemented in Python, allowing customisation。

对于Ubuntu Linux用户的话可以使用ubuntu软件中心来获取这个软件:在软件中心它的名字为:Svn Workbemch.你也可以使用如下命令来安装:

sudo apt-get install python-svn
sudo apt-get install svn-workbench

最后,安装好后新建project就可以开始在Linux下使用SVN 了。很简单,如下图。

Ubuntu,Linux

交叉编译ARM版 Qt

       因实际项目需求,需将Qt编译成LINUX-ARM版,以下为整个操作过程,使用Qt编写的程序已在实际开发板上运行,在此贴出,但愿能为需要的朋友提供上帮助。

准备工作:
Linux内核版本:
Linux 2.6.35-22-generic #33-Ubuntu

交叉编译工具:
arm-none-linux-gnueabi 4.4.1

Qt安装包:
qt-everywhere-opensource-src-4.7.3.tar.gz

安装
一.安装交叉编译工具
1.本机使用的交叉编译工具是:arm-none-linux-gnueabi

2.添加交叉编译工具的路径至相应环境变量中:
export PATH=/usr/CodeSourcery/Sourcery_G++_Lite/bin/:$PATH

3.通过以下命令查看arm-none-linux-gnueabi编译工具是否安装成功
a. 执行:arm-none-linux-gnueabi-g++ -v
b. 执行:arm-none-linux-gnueabi-gcc -v
如果以上两步都能正确打印对应的版本信息,则表明arm-none-linux-gnueabi编译工具
已安装成功!

二.交叉编译ARM版Qt
1.下载Qt源码包 qt-everywhere-opensource-src-4.7.3.tar.gz;

2.解压Qt源码包
tar -xvfz qt-everywhere-opensource-src-4.7.3.tar.gz

3.修改文件: /usr/local/qt-4.7.3-linux-arm/mkspecs/qws/linux-arm-g++/qmake.conf

# 设置交叉编译工具链:
# 本项目使用的交叉编译工具是 arm-none-linux-gnueabi-g++
#
QMAKE_CC                         = arm-none-linux-gnueabi-gcc
QMAKE_CXX                      = arm-none-linux-gnueabi-g++
QMAKE_LINK                      = arm-none-linux-gnueabi-g++
QMAKE_LINK_SHLIB        = arm-none-linux-gnueabi-g++

QMAKE_AR                   = arm-none-linux-gnueabi-ar cqs
QMAKE_OBJCOPY      = arm-none-linux-gnueabi-objcopy
QMAKE_STRIP             = arm-none-linux-gnueabi-strip

4.(如有需要,需修改g++.conf文件)
修改文件: /usr/local/qt-4.7.3-linux-arm/mkspecs/common/g++.conf

# 设置使用ARM高级特性的编译标志:
#
QMAKE_CFLAGS_RELEASE += -O2 -march=armv7-a -mtune=cortex-a9 -mfloat-abi=softfp

5.配置Qt编译选项

进入Qt解压目录,执行如下命令:
./configure -prefix /usr/local/qt-4.7.3-linux-arm-install -embedded arm -host-little-endian -no-cups -no-3dnow -nomake examples -nomake demos -nomake docs -xplatform /qws/linux-arm-g++

6.执行 make 命令;
该步骤大致需要2~3个小时

7.执行 make install 命令;

8.修改用户环境变量
export ARMQTDIR=/usr/local/qt-4.7.3-linux-arm-install
export PATH=$ARMQTDIR/bin:$PATH
export MANPATH=$ARMQTDIR/man:$MANPATH
export LD_LIBRARY_PATH=$ARMQTDIR/lib:$LD_LIBRARY_PATH

9.测试 ARM 版 QT 是否安装并配置成功:
a. 执行:qmake -v
打印以下对应信息:
QMake version 2.01a
Using Qt version 4.7.3 in /usr/local/qt-4.7.3-linux-arm-install/lib
b. 执行:which qmake
打印以下对应信息:
/usr/local/qt-4.7.3-linux-arm-install/bin/qmake

c. 编写一个简单的测试程序,文件名为hello.cpp,进入该文件目录,进行工程编译,看是否能正确通编译

hello.cpp源码:
#include <QApplication>
#include <QDebug>
int main(int argc,char *argv[])
{
qDebug("Hello, welcome to Qt world!");
return 0;
}

顺序执行以下操作:
@1. 执行:qmake -project hello1.cpp
生成 hello1.pro 工程文件
@2. 执行:qmake hello1.pro
生成 Makefile 文件
@3. 执行:make
生成 hello.o, hello 文件

如果执行@2步骤时出现以下错误:
QMAKESPEC has not been set, so configuration cannot be deduced.
Error processing project file: hello1.pro
则是 QMAKESPEC 变量没有设置好,执行:
export QMAKESPEC=/usr/local/qt-4.7.3-linux-arm-install/mkspecs/qws/linux-arm-g++

如果以上对应的信息都能正确打印,说明 ARM 版 QT 安装并配置成功,大功告成,可以你的ARM版QT之旅了!

友情提示:
在以上所有过程中,请务必注意相关路径,及环境变量的配置,另外,请根据自己的路径对相应部分做修改。

Linux Kernel configuration for Virtualbox/VirtualPC/VMware hardware

Device Drivers

  • SCSI device support --->
    • [*] legacy /proc/scsi/ support
    • [*] SCSI disk support
    • [*] SCSI CDROM support
    • [*] SCSI generic support
    • [*] SCSI low-level drivers (VMWare Player)
      • [*] LSI MPT Fusion SAS 2.0 Device Driver
  • [*] Serial ATA and Parallel ATA drivers --->
    • [*] Verbose ATA error reporting
    • [*] AHCI SATA Support
    • [*] ATA SFF support
      • [*] ATA BMDMA support
        • [*] Intel ESB, ICH, PIIX3, PIIX4 PATA/SATA support
    • < > Generic ATA support
  • [*] Fusion MPT device support ---> (VMWare Player)
    • [*] Fusion MPT ScsiHost drivers for SPI
    • [*] Fusion MPT ScsiHost drivers for SAS
  • [*] Network device support --->
    • [*] Ethernet (10 or 100Mbit) --->
      • [*] "Tulip" family network devices support ---> (Virtual PC)
        • [*] DECchip Tulip (dc2114x) PCI support
        • [*] Generic DECchip & DIGITAL EtherWORKS PCI/EISA
      • [*] EISA, VLB, PCI and on board controllers ---> (VMWare Player)
        • [*] AMD PCnet32 PCI support
    • [*] Ethernet (1000Mbit) ---> (Virtualbox)
      • [*] Intel(R) PRO/1000 Gigabit Ethernet support
      • [*] Intel(R) PCI-Express PRO/1000 Gigabit Ethernet support
    • [*] VMware VMXNET3 ethernet driver (VMWare Player)

Bus options (PCI etc.)

  • [*] PCI support
  • [*] PCI Express support
  • [ ] ISA support
  • < > PCCard (PCMCIA/CardBus) support --->
  • < > Support for PCI Hotplug --->