SqLite数据库测评;
数据库有很多种,常见的有Msql,Oracel等等,按照种类又分为关系型数据库和菲关系型数据库,来段百度百儿科:数据库系统是为适应数据处理的需要而发展起来的一种较为理想的数据处理系统,也是一个为实际可运行的存储、维护和应用系统提供数据的软件系统,是存储介质 、处理对象和管理系统的集合体。
今天,我们的主角,是SqLite数据库!!!
SQLite 是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是在世界上最广泛部署的 SQL 数据库引擎。SQLite 源代码不受版权限制。
在嵌入式应用产品领域中,由于硬件产品资源性能有限,无法运行MySql大型数据库,所以经常用到小型数据库,如何才能把小数据库玩的精通,是需要花费一些功夫的!身边好多朋友经常吐槽说SqLite数据库性能不够,以前不理解时候可能似信非信,总感觉是软件不会,硬件来凑的思维。经过今天的测评,我想说的是SqLite数据库其实没想象中的那么弱,嵌入式方面就不断压榨硬件CPU和数据库的新能,游走在危险的边缘,做到充分的利用性能资源!
之前一直有困惑,关于循环变量插入的疑问,sqlite的insert语句如何插入变量,问题已解决 ,并且完成SqLite数据库测评。再测感谢potticho这篇回帖:
PS:这位前辈于2004-04-13加入CSDN,佩服佩服~
SqLite数据库测评报告:
1,插入10000条数据:
插入数据库时的负载:
查询数据库文件增长量:
程序中,每插入一条SqLite数据库记录延时50毫秒,实际会更快 ,文件增长量大概4kb每秒,
10000条记录下来文件最终大小:
然后总表进行查询数据库,一万条SqLite数据库查询加打印一秒多钟样子,不打印会特别快
附加测试代码:
printf("ready loop insert...\n");
for(int insCnt=0;insCnt<10000;insCnt++)
{
//sprintf(insBuf,"insert into Mytable values(%d,%s,%s,%d);",insCnt,"Boss","lvyuanqing",age);
sprintf(insBuf,"insert into Mytable values(4,'woker','M',50)");
result = sqlite3_exec(db,insBuf,0,0,&errmsg);
printf("%d loop insert..., %s \n",insCnt,insBuf);
usleep(5*1000);
if(result != SQLITE_OK) {
printf("Can't insert into datebase:%d\n",errmsg);
}
}
printf("查询数据库 ... \n");
result = sqlite3_exec(db,"select * from Mytable",0,0,&errmsg);
//查询数据库
int nrow = 0, ncol = 0, i,j;
char **table;
printf("\n");
sqlite3_get_table(db,"select * from Mytable",&table,&nrow,&ncol,&errmsg);
printf("row:%d col:%d\n",nrow,ncol);
printf("The result of querying is:\n");
for (i = 0; i < nrow+1; i++) {
for (j = 0; j < ncol; j++) {
printf("% -9s ",table[i*ncol+j]);
}
printf("\n");
}
sqlite3_free_table(table);
sqlite3_close(db); //关闭数据库
return 0;
测试结束,感谢!满满的收货!
后期待更新:
SqLite数据库不支持表中增加字段问题,目前想到方案可采用创建新表将旧表数据查询复制进来
SQLite实现不同数据库的表内容复制---从一个数据库把表和内容复制到另一个数据库
1) 在SQLiteExpert Personal 3中鼠标右键点击目的数据库dist的Attach Database,将原数据库source附加在dist上。
2) 执行下面的SQL语句实现表格内容复制(将source数据库的表格table1中内容复制到dist的某一个表格中):
l 当dist数据库已经存在table1表格,
insert into table1(field1, field2, field3, fieldn)
select field1, field2, field3, fieldn from source.table1;
l 当dist数据库不存在table1表时,
create table table1 as select field1, field2, fieldn from source.table1
3)在dist表中点击Detach Database ,卸载数据库source。
————————————————
版权声明:本文为CSDN博主「nothing is worse」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/small_small_chick/article/details/38019393
SQLite 如何实现从一个数据库的某个表的记录复制到另一个数据库中?
package sqliteTest;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Demo3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
testattach();
}
public static void testattach(){
Connection connection_historymapsdb = null;
String sTargetDB="D:\\Database\\Test\\T.db3";
try {
Class.forName("org.sqlite.JDBC");
connection_historymapsdb = DriverManager.getConnection("jdbc:sqlite:" + sTargetDB);
} catch (ClassNotFoundException e1) {
e1.printStackTrace();
} catch (SQLException e2) {
e2.printStackTrace();
}
Statement statement;
try {
String sDatabasetoattach="D:\\Database\\Test\\T2.db3";
statement = connection_historymapsdb.createStatement();
String sSQL="Attach \'" + sDatabasetoattach + "\' as T2";
System.out.println(sSQL);
statement.execute(sSQL);
String sTestSQL="select count(*) from T2.title_info";
ResultSet rs=statement.executeQuery(sTestSQL);
int count=0;
while(rs.next()){
count=rs.getInt(1);
}
System.out.println(count+"worked.");
} catch (SQLException e) {
e.printStackTrace();
}
}
}
版权声明:本文为CSDN博主「Xxy_」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xxy0118/article/details/72458310