|
初识sqlite 翻了好多资料。终于搞明白怎么回事了,记录一下。备查。
1、官网【sqlite.org】上面文件说明:
①:Source Code源代码就在这个压缩包里
sqlite-amalgamation-3071300.zip(1.33 MiB)。其中有四个文件分别为:shell.c、sqlite3.c、sqlite3.h、sqlite3ext.h;这就是sqlite C的源代码了。
②:动态库
sqlite-dll-win32-x86-3071300.zip这个包里有两个文件:sqlite3.def、sqlite3.dll
2、C/C++调用
现在光有这些文件还是不够的,根据上面的文件生成链接库文件。(其实有源码已经够了,但建议最好生成各平台的库文件,因程序编译时源文件很慢,弄成库调用就很快了。)
引用
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。
#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;
}
引用
小注:windows 与linux 下链接文件对比
类型 | Windows | Linux | 静态库 | lib(library) | a(archived file) | 动态库 | dll | so(shared object) |
比较完好的C Sqlite3 API学习:入门API
3、Java (JDBC)调用
①下载jdbc驱动包
sqlitejdbc-v056.jar
②代码
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();
}
}
} |
|
|