2019独角兽企业重金招聘Python工程师标准>>>

Sqlite 的单文件便携性、高性能在开发中方便性无与伦比,即使部署在中小型应用中也胜任有余。

在JFinal中添加对 Sqlite 的支持 Step by Step:

1、点击 http://www.xerial.org/maven/repository/artifact/org/xerial/sqlite-jdbc/3.7.2/sqlite-jdbc-3.7.2.jar 下载 sqlite JDBC驱动,并将其放入 Jfinal_app/WEB-INF/lib ;

2、下载一个Sqlite的数据库管理工具,推荐 Navicate Premium,在此下载:http://www.navicat.com/en/products/navicat_premium/premium_overview.html ;或者你也可以到 Sqlite 官网下载Sqlite Shell ,当前版本是 3.7.13: http://www.sqlite.org/sqlite-shell-win32-x86-3071300.zip ;

3、使用数据库管理工具创建一个数据库,存放路径为 Jfinal_app/WEB-INF/data.db ;创建必要的表,插入测试记录,等等;

4、在 a_little_config.txt (或你自己的配置文件) 中设置:

jdbcUrl = jdbc:sqlite:D:/webs/Jfinal_app/WEB-INF/data.db 
user = 
password = 
devMode = true

5、新建一个类 Sqlite3Dialect.java :(注:也可以等待JFinal 1.1.1版Jar将增加此类)

package com.jfinal.plugin.activerecord.dialect;import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import com.jfinal.plugin.activerecord.ActiveRecordException;
import com.jfinal.plugin.activerecord.Record;
import com.jfinal.plugin.activerecord.TableInfo;/*** Sqlite3Dialect. Try to use Sqlite3 SQL dialect with ActiveRecordPlugin.* <p>* A clever person solves a problem. A wise person avoids it.*/
public class Sqlite3SqlDialect implements IDialect {public String forTableInfoBuilderDoBuildTableInfo(String tableName) {return "select * from " + tableName + " where 1 = 2";}public void forModelSave(TableInfo tableInfo, Map<String, Object> attrs, StringBuilder sql, List<Object> paras) {sql.append("insert into ").append(tableInfo.getTableName()).append("(");StringBuilder temp = new StringBuilder(") values(");for (Entry<String, Object> e: attrs.entrySet()) {String colName = e.getKey();if (tableInfo.hasColumnLabel(colName)) {if (paras.size() > 0) {sql.append(", ");temp.append(", ");}sql.append(colName);temp.append("?");paras.add(e.getValue());}}sql.append(temp.toString()).append(")");}public String forModelDeleteById(TableInfo tInfo) {String pKey = tInfo.getPrimaryKey();StringBuilder sql = new StringBuilder(45);sql.append("delete from ");sql.append(tInfo.getTableName());sql.append(" where ").append(pKey).append(" = ?");return sql.toString();}public void forModelUpdate(TableInfo tableInfo, Map<String, Object> attrs, Set<String> modifyFlag, String pKey, Object id, StringBuilder sql, List<Object> paras) {sql.append("update ").append(tableInfo.getTableName()).append(" set ");for (Entry<String, Object> e : attrs.entrySet()) {String colName = e.getKey();if (!pKey.equalsIgnoreCase(colName) && modifyFlag.contains(colName) && tableInfo.hasColumnLabel(colName)) {if (paras.size() > 0)sql.append(", ");sql.append(colName).append(" = ? ");paras.add(e.getValue());}}sql.append(" where ").append(pKey).append(" = ?");paras.add(id);}public String forModelFindById(TableInfo tInfo, String columns) {StringBuilder sql = new StringBuilder("select ");if (columns.trim().equals("*")) {sql.append(columns);}else {String[] columnsArray = columns.split(",");for (int i=0; i<columnsArray.length; i++) {if (i > 0)sql.append(", ");sql.append(columnsArray[i].trim());}}sql.append(" from ");sql.append(tInfo.getTableName());sql.append(" where ").append(tInfo.getPrimaryKey()).append(" = ?");return sql.toString();}public String forDbFindById(String tableName, String primaryKey, String columns) {StringBuilder sql = new StringBuilder("select ");if (columns.trim().equals("*")) {sql.append(columns);}else {String[] columnsArray = columns.split(",");for (int i=0; i<columnsArray.length; i++) {if (i > 0)sql.append(", ");sql.append(columnsArray[i].trim());}}sql.append(" from ");sql.append(tableName.trim());sql.append(" where ").append(primaryKey).append(" = ?");return sql.toString();}public String forDbDeleteById(String tableName, String primaryKey) {StringBuilder sql = new StringBuilder("delete from ");sql.append(tableName.trim());sql.append(" where ").append(primaryKey).append(" = ?");return sql.toString();}public void forDbSave(StringBuilder sql, List<Object> paras, String tableName, Record record) {sql.append("insert into ");sql.append(tableName.trim()).append("(");StringBuilder temp = new StringBuilder();temp.append(") values(");for (Entry<String, Object> e: record.getColumns().entrySet()) {if (paras.size() > 0) {sql.append(", ");temp.append(", ");}sql.append(e.getKey());temp.append("?");paras.add(e.getValue());}sql.append(temp.toString()).append(")");}public void forDbUpdate(String tableName, String primaryKey, Object id, Record record, StringBuilder sql, List<Object> paras) {sql.append("update ").append(tableName.trim()).append(" set ");for (Entry<String, Object> e: record.getColumns().entrySet()) {String colName = e.getKey();if (!primaryKey.equalsIgnoreCase(colName)) {if (paras.size() > 0) {sql.append(", ");}sql.append(colName).append(" = ? ");paras.add(e.getValue());}}sql.append(" where ").append(primaryKey).append(" = ?");paras.add(id);}public void forPaginate(StringBuilder sql, int pageNumber, int pageSize, String select, String sqlExceptSelect) {int offset = pageSize * (pageNumber - 1);sql.append(select).append(" ");sql.append(sqlExceptSelect);sql.append(" limit ").append(offset).append(", ").append(pageSize);    // limit can use one or two '?' to pass paras}
}

6、在DemoConfig.java (或你自己的 Config 类)中:

1) 引入Sqlite3Dialect类:

import com.jfinal.plugin.activerecord.dialect.Sqlite3Dialect;
public void configPlugin(Plugins me) {// 配置C3p0数据库连接池插件C3p0Plugin c3p0Plugin = new C3p0Plugin(getProperty("jdbcUrl"), getProperty("user"), getProperty("password"));c3p0Plugin.setDriverClass("org.sqlite.JDBC"); //指定驱动程序me.add(c3p0Plugin);  // 配置ActiveRecord插件ActiveRecordPlugin arp = new ActiveRecordPlugin(c3p0Plugin);me.add(arp);arp.setDialect(new Sqlite3Dialect());  //指定 Dialectarp.addMapping("blog", Blog.class);    // 映射blog 表到 Blog模型}

7、至此大功告成!启动,服务器,在浏览器中查看效果吧!

转载于:https://my.oschina.net/u/237078/blog/69934

给JFinal添加 Sqlite 数据库支持相关推荐

  1. electron添加SQLite数据库

    序 在之前,我曾经使用electron开发过一个番茄钟应用,但是当时的应用数据存储是在JSON文件当中,通过node的fs文件系统进行读写的,但是感觉不用数据库总有点不太专业. 所以还是打算使用数据库 ...

  2. qt android oci数据库,QT mysql SQLite 数据库支持

    qt-opensource-linux-x64-5.14.1.run安装的qt可能只支持有限的几种数据库,缺少mysql的支持,按照下文操作添加mysql数据的支持. 操作 sudo apt-get ...

  3. Android数据库 之 SQLite数据库

    一.关系型数据库SQLIte 每个应用程序都要使用数据,Android应用程序也不例外,Android使用开源的.与操作系统无关的SQL数据库-SQLite.SQLite第一个Alpha版本诞生于20 ...

  4. 使用iOS原生sqlite3框架对sqlite数据库进行操作

    摘要: iOS中sqlite3框架可以很好的对sqlite数据库进行支持,通过面向对象的封装,可以更易于开发者使用. 使用iOS原生sqlite3框架对sqlite数据库进行操作 一.引言 sqlit ...

  5. android SQLite数据库(转)

    Android数据库 之 SQLite数据库 Android数据库  一.关系型数据库SQLIte 每个应用程序都要使用数据,Android应用程序也不例外,Android使用开源的.与操作系统无关的 ...

  6. android属于数据库管理系统,详细谈谈Android系统中的SQLite数据库的应用

    数据库是按照数据结构来组织.存储和管理数据的仓库,而在信息话的社会,数据库又不单单仅限与数据的相关内容,现在数据库技术是管理信息系统.办公自动化系统.决策支持系统等各类信息系统的核心部分,而SQL是结 ...

  7. Android之SQLite数据库的使用

    1      SQLite数据库 1.1    概念及基础知识 [ Sqlite数据库 作用: 用于存储n张数据表 数据表的作用:为了同时清晰存储多条复杂数据,如存储一张学生信息表 Ø  sqlite ...

  8. Android中Shared Preferences、Files、Network、SQLite数据库编程总结及示例

    Android数据存储 前言 Android中提供了4中数据存储方式.但是存储的这些数据都是私有的,要想在其他应用程序中使用这些数据.就需要使用ContentProvider(数据共享).下面是对4种 ...

  9. arm qt mysql插件,关于移植QT的Sqlite数据库到ARM板运行的问题

    关于移植QT的Sqlite数据库到ARM板运行的问题 运行一般的程序我们的步骤一般是在PC主机上编译,编译成功后交叉编译,然后把程序下载到ARM开发板上,因为主机的交叉编译库和ARM开发板的运行的QT ...

最新文章

  1. python用django连接mysql_三分钟了解Django如何连接Mysql数据库
  2. 全球工业互联网十大最具成长性技术
  3. MySQL存储引擎中的MyISAM和InnoDB区别详解
  4. VC++6 开发MFC扩展DLL以及MFC DLL可以包含界面
  5. 高性能I/O设计模式Reactor和Proactor
  6. LCS最长公共子序列
  7. 小小攻城师,步步达成梦想!
  8. python深浅拷贝的底层理解_理解python中的深拷贝与浅拷贝
  9. 数据挖掘基础数学知识博客
  10. cloudstack centOS安装(二)
  11. Hadoop生态圈-Zookeeper的工作原理分析
  12. linux学习笔记:明白Linux文件的属主和属组概念
  13. 金额大小写转换(2)
  14. 如何用常量代替session_如何用Python代替Visual Basic应用程序并节省了很多时间
  15. 215.数组中的第K个最大元素
  16. java初级程序员需要掌握哪些,附源代码
  17. 分位数回归--基于R
  18. 百度开放平台-快递物流解决方案
  19. 《创业算法》:技术人做CEO的优势和劣势
  20. 技巧:屏幕長亮 兩種方式

热门文章

  1. Linux系统下软件包管理四
  2. 三十天学不会TCP,UDP/IP网络编程 - RST的用法
  3. 使项目持续集成支持Carthage管理
  4. 一个把ListString转化为以,隔开的字符串的方法
  5. word如何设置标题编号
  6. java部署web service的方式
  7. Linux内核源代码分析-第三章 内核体系结构概述-3
  8. StringUtils工具类的常用方法
  9. java通过url读取远程数据并保持到本地
  10. Fedora 20 安装搜狗拼音输入法