2021-05-10 SqLite数据库插入和性能测评

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在UniApp中使用SQLite数据库,你可以借助第三方插件uni-sqlite来实现。以下是使用uni-sqlite插件在UniApp中使用SQLite数据库的基本步骤: 1. 安装插件:在UniApp项目中,使用命令行工具或插件市场安装uni-sqlite插件。 2. 引入插件:在需要使用SQLite的页面或组件中,通过`require`方法引入uni-sqlite插件。例如: ```javascript const db = require('@dcloudio/uni-sqlite') ``` 3. 打开数据库:在需要操作数据库的地方,通过`db.openDatabase`方法打开数据库连接。例如: ```javascript const databasePath = uni.env.USER_DATA_PATH + '/your-database-name.db' const database = db.openDatabaseSync(databasePath) ``` 这段代码会创建一个名为"your-database-name.db"的数据库文件,并将其存储在用户数据目录中。 4. 创建表和操作数据:可以使用SQLite语句创建表和执行数据操作。例如: ```javascript // 创建表 database.executeSql('CREATE TABLE IF NOT EXISTS chat_messages (id INTEGER PRIMARY KEY AUTOINCREMENT, content TEXT, timestamp INTEGER)') // 插入数据 database.executeSql('INSERT INTO chat_messages (content, timestamp) VALUES (?, ?)', ['Hello', Date.now()]) // 查询数据 const result = database.executeSql('SELECT * FROM chat_messages') console.log(result.rows) ``` 这段代码展示了创建名为"chat_messages"的表,以及插入和查询数据的示例。 需要注意的是,uni-sqlite插件是基于原生平台的SQLite实现,因此在运行时需要在对应的平台环境下进行测试和调试。另外,SQLite支持的语法和特性可能与其他数据库有所不同,可以参考SQLite的官方文档进行更详细的了解和学习。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值