一、SQLite简介
SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的SQL数据库引擎、SQLite是一个零配置的数据库,这以为着不需要在系统中配置。
SQLite不是一个独立的进程,可以按照应用程序需求进行静态或动态的连接。SQLite直接访问其存储文件。
二、SSM和SQLite的整合
Step1. 导入SQLite-jdbc的jar包
Step2. 在“resources”下新建一个“jdbc.properties”文件,该文件内容如下:
#数据库的类型
dbType=sqlite
validationQuery=SELECT 'x'
#驱动名
sqlServer.driverClassName=org.sqlite.JDBC
#数据库的地址 我的数据库放在了项目的resoureces的文件夹下
sqlServer.url=jdbc:sqlite::resource:123.db
#用户名
sqlServer.username=
#用户密码
sqlServer.password=
Step3. 在配置文件中配置如下内容:
<context:property-placeholder location="classpath:jdbc.properties"/>
<bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<property name="dbType" value="${dbType}"/>
<property name="url" value="${sqlServer.url}"/>
<property name="driverClassName" value="${sqlServer.driverClassName}"/>
<property name="username" value="${sqlServer.username}"/>
<property name="password" value="${sqlServer.password}"/>
<property name="initialSize" value="1"/>
<property name="maxActive" value="20"/>
<property name="minIdle" value="10"/>
<property name="maxWait" value="60000"/>
<property name="testOnBorrow" value="false"/>
<property name="testOnReturn" value="false"/><property name="testWhileIdle" value="true"/>
<property name="timeBetweenEvictionRunsMillis" value="60000"/>
<property name="minEvictableIdleTimeMillis" value="25200000"/>
<property name="removeAbandoned" value="true"/>
<property name="removeAbandonedTimeout" value="1800"/>
<property name="logAbandoned" value="true"/>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--数据源-->
<property name="dataSource" ref="dataSource"/>
<!--配置mybatis的全局配置文件-->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
<!--扫描model包,-->
<property name="typeAliasesPackage" value="cn.demo.model"/>
<!--扫描sql配置文件-->
<property name="mapperLocations" value="classpath:/mapper/*.xml"/>
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
<!--给出要扫描的包的地址-->
<property name="basePackage" value="src.cn.dao"/>
</bean>
注意:一定要导入com.alibaba.druid的jar包,spring、springMvc的配置都正常配
三、路径问题
当项目启动后我用MyBatis动态建表的时候会发现控制台显示已经建表成功但是在数据库中并没
有这个表,当再一次进行这个操作的时候会报”表已经存在”的错误。这是为什么呢?
后来我是用下面这种方法来追踪这个表到底存到哪里去了?
Connection c = null;
Statement stmt = null;
try {
Class.forName("org.sqlite.JDBC");
c = DriverManager.getConnection("jdbc:sqlite::resource:123.db");
System.out.println("Opened database successfully");
stmt = c.createStatement();
String sql = "CREATE TABLE main.COMPANYS " +
"(ID INT PRIMARY KEY NOT NULL," +
" NAME TEXT NOT NULL, " +
" AGE INT NOT NULL, " +
" ADDRESS CHAR(50), " +
" SALARY REAL)";
stmt.executeUpdate(sql);
stmt.close();
c.close();
} catch (Exception e) {
System.err.println(e.getClass().getName() + ": " + e.getMessage());
System.exit(0);
}
System.out.println("Table created successfully");
后来打断点发现当 DriverManager.getConnection(“jdbc:sqlite::resource:123.db”);时实际获取的路径为
此时会去我项目路径下的target文件夹下找我这个数据路的,但是此时在这个路径下我并没有
这个数据库,当你要执行的是DML和DQL的操作时会报”找不到表”这个错误,但是当你执行的
是DDL的操作时候会在这个路径下创建一个数据库,所以可以正常执行。但是此时这个表并没
有插入到resources的文件夹下的数据库中。
此时我把路径变为 c = DriverManager.getConnection(“jdbc:sqlite:resource:123.db”);时发现实际找的路径为:
此时会去找服务器中的bin文件夹下的数据库。
从上面可以看出数据库的路径写相对路径似乎不怎么好使,所以我的建议是当你进行把数
据库文件放在项目的resources文件下时,执行DDL操作的时候可以把 jdbc.url 写成绝对
路径(一般很少有业务需求让执行DDL操作),执行DML和DQL的操作时可以把 jdbc.url写
成”jdbc:sqlite::resource:123.db”这种相对路径形式,写成这种形式当用IDEA启动tomcat
的时候自动把这个数据库放在了target文件夹下,当打车war包放下服务器下就自动去项目
的resources文件夹下去找了。
简单的做一下学习总结,希望对大家有帮助