sqlite 入门备忘

26 篇文章 0 订阅
20 篇文章 0 订阅
初识sqlite 翻了好多资料。终于搞明白怎么回事了,记录一下。备查。

1、官网【[url=http://sqlite.org]sqlite.org[/url]】上面文件说明:
①:[b]Source Code[/b]源代码就在这个压缩包里
[url=http://sqlite.org/sqlite-amalgamation-3071300.zip]sqlite-amalgamation-3071300.zip[/url](1.33 MiB)。其中有四个文件分别为:shell.c、sqlite3.c、sqlite3.h、sqlite3ext.h;这就是sqlite C的源代码了。
②:动态库
[url=http://sqlite.org/sqlite-dll-win32-x86-3071300.zip]sqlite-dll-win32-x86-3071300.zip[/url]这个包里有两个文件:sqlite3.def、sqlite3.dll

2、C/C++调用
现在光有这些文件还是不够的,根据上面的文件生成链接库文件。(其实有源码已经够了,但建议最好生成各平台的库文件,因程序编译时源文件很慢,弄成库调用就很快了。)

[quote]Codeblocks()
1.用GCC,生成.a文件;先将sqlite3.c放到gcc工具的bin目录下。

gcc -c sqlite3.c -o sqlite3.o
ar rcs libsqlite3.a sqlite3.o //生成我要的libsqlite3.a 静态库文件

2.将libsqlite3.a,sqlite3.h文件放在Codeblocks的工程目录中;
3.Build option->Linker settings->Link librarys增加libsqlite3.a;
4.Build option->Search Directories->Linker点击Add按钮,添加当前目录;
5.OK.
Codeblocks注意一点:如果在设置Build option时,注意一下左边选择,我是选择了Debug和Release上面的项目名称添加的,所以又点了Copy all to…按钮将配置复制到Debug和Release。[/quote]
#include <stdio.h>
#include "sqlite3.h"
int main(void){
sqlite3 *pDB=NULL;
int ret=sqlite3_open("fuck.db",&pDB);
if(ret==SQLITE_OK){
printf("sqlite3,打开成功!");
}

sqlite3_close(pDB);
return 0;
}


在VC6下:
将sqlite3.dll和sqlite3.def放到:d:\Microsoft Visual Studio\VC98\Bin下
然后dos命令提示 定位到上面的这个目录上
输入命令:
D:\Microsoft Visual Studio\VC98\Bin>lib /def:sqlite3.def /machine:ix86

回车,然后在该目录下就会看到生成了两个文件(sqlite3.exp、sqlite3.lib)

调用 :先将sqlite3.h、sqlite3.dll、sqlite3.lib放到vc工程目录下。
main.c
#include <stdio.h>
#include "sqlite3.h"
#pragma comment(lib,"sqlite3.lib")
int main(void){
sqlite3 *pDB=NULL;
int ret=sqlite3_open("fuck.db",&pDB);
if(ret==SQLITE_OK){
printf("打开成功!");
}

sqlite3_close(pDB);
return 0;
}

[quote]小注:windows 与linux 下链接文件对比
[table]
|类型|Windows|Linux|
|静态库|lib(library)|a(archived file)|
|动态库|dll|so(shared object)|
[/table]
比较完好的C Sqlite3 API学习:[url=http://www.blogjava.net/xylz/archive/2012/09/25/388519.html]入门API[/url]
[/quote]
3、Java (JDBC)调用
①下载jdbc驱动包
[url=http://dl.iteye.com/topics/download/296a8cef-3b52-3d93-a4a9-921b75e9e9e2]sqlitejdbc-v056.jar[/url]
②代码

package com.leson.db;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

public class SQLiteHelper {

private String url;
private String dbname;
private String path;

/**
* 得到Connection 对象
* @return
*/
public Connection getConn(){
Connection conn=null;
try {
Class.forName("org.sqlite.JDBC");
conn=DriverManager.getConnection("jdbc:sqlite:e:/test.db");//如果没有自动创建test.db
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
/**
* 查询
* @param conn
* @param sql
* @return List<Map<String,Object>>([{},{}])
*/
public List<Map<String,Object>> execQuery(Connection conn,String sql){
List<Map<String,Object>> list=new ArrayList<Map<String,Object>>();
PreparedStatement ps=null;
ResultSet rs=null;
try {
ps=conn.prepareStatement(sql);
rs=ps.executeQuery();
ResultSetMetaData rsmd=rs.getMetaData();
int columnCount=rsmd.getColumnCount();//结果集共多少列
while(rs.next()){
Map<String, Object> ht=new LinkedHashMap<String, Object>();
for(int i=1;i<=columnCount;i++){
ht.put(rsmd.getColumnName(i), rs.getString(i));
}
list.add(ht);
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
try {
rs.close();
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return list;
}
/**
* 增、删、改
* @return
*/
public synchronized int execUpdate(Connection conn,String sql){
int res=0;
PreparedStatement ps=null;
try {
ps=conn.prepareStatement(sql);
res=ps.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return res;
}
/**
* 多条sql语句的批处理。
* @param conn
* @param sqls
* @return
*/
public synchronized int execBatch(Connection conn,String[] sqls){
Statement sm=null;
try {
sm=conn.createStatement();
for(String sql:sqls){
sm.addBatch(sql);
}
sm.executeBatch();
} catch (SQLException e) {
e.printStackTrace();
}finally{
try {
sm.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return 0;
}

/**
* 测试本类的方法
* @param args
*/
public static void main(String args[]){
SQLiteHelper sh=new SQLiteHelper();
Connection conn=sh.getConn();
// String[] sqls=new String[3];
// String sql1 ="create table test(id,name);";
// String sql2="insert into test(id,name) values('1','张三')";
// String sql3="insert into test(id,name) values('2','李四')";
// sqls[0]=sql1;
// sqls[1]=sql2;
// sqls[2]=sql3;
// sh.execBatch(conn, sqls);

//-------------------------
String sql="select * from test;";
List<Map<String,Object>> list=sh.execQuery(conn, sql);
System.out.println(list);

try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值