一、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文件夾下去找了。
簡單的做一下學習總結,希望對大家有幫助