|
说明: 下面的代码演示了如何对 sqlite 数据库的操作..
注意:
1. 数据库名 pmm_cz 你可以任意修改成你自己的. 无论是否存在都可以. 因为如果存在, 则不会再创建. 如果不存在, 则新创建一个.
2. 表名也可以任意取. 表里的字段名也可以任意取. 我这里只是演示我自己的环境中的. 至于表的创建, 你可以使用 SQLite Expert Personal 这个可视化的编辑器创建.
3. 开发环境 myeclipse 8.5 + jdk 1.6
1) 创建一个 java project 或 web 都可以.
2) 在 http://www.zentus.com/sqlitejdbc/ 中下载 sqlite 驱动 jar 包, 然后添加到 myeclise 的 Builder path 即可.. 我下的是: sqlitejdbc-v056.jar
package blrise.emcs.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import org.junit.Test;
public class SqliteTest {
/**
* 测试获取 Connection
* @throws Exception
*/
@Test
public void testGetConnection() throws Exception {
Class.forName("org.sqlite.JDBC");
Connection conn = DriverManager.getConnection("jdbc:sqlite:d:pmm_cz.db");
System.out.println(conn);
}
/**
* 测试获取结果集
* @throws Exception
*/
@Test
public void getQueryAllData() throws Exception {
Class.forName("org.sqlite.JDBC");
Connection conn = DriverManager.getConnection("jdbc:sqlite:d:pmm_cz.db");
String sql = "select * from WM_EQUI_TYPE";
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
while (rs.next()) {
System.out.println(rs.getString("eq_type") + " :: " + rs.getString("eq_type_name"));
}
}
/**
* 测试插入数据
* @throws Exception
*/
@Test
public void testInsert() throws Exception {
Class.forName("org.sqlite.JDBC");
Connection conn = DriverManager.getConnection("jdbc:sqlite:d:pmm_cz.db");
String sql = "insert into WM_EQUI_TYPE (eq_type, eq_type_name) values (?, ?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "4");
pstmt.setString(2, "ddd");
pstmt.execute();
System.out.println("Done.");
}
/**
* 测试删除数据
* @throws Exception
*/
@Test
public void testDelete() throws Exception {
Class.forName("org.sqlite.JDBC");
Connection conn = DriverManager.getConnection("jdbc:sqlite:d:pmm_cz.db");
//String sql = "delete from WM_EQUI_TYPE where eq_type = ?";
String sql = "delete from WM_EQUI_TYPE";
PreparedStatement pstmt = conn.prepareStatement(sql);
//pstmt.setString(1, "4");
pstmt.execute();
System.out.println("Done.");
}
/**
* 测试修改数据
* @throws Exception
*/
@Test
public void testUpdate() throws Exception {
Class.forName("org.sqlite.JDBC");
Connection conn = DriverManager.getConnection("jdbc:sqlite:d:pmm_cz.db");
String sql = "update WM_EQUI_TYPE set eq_type_name = ? where eq_type = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "test");
pstmt.setString(2, "3");
pstmt.execute();
System.out.println("Done.");
}
/**
* 测试批处理添加
* @throws Exception
*/
@Test
public void testBatch() throws Exception {
Class.forName("org.sqlite.JDBC");
Connection conn = DriverManager.getConnection("jdbc:sqlite:d:pmm_cz.db");
String sql = "insert into WM_EQUI_TYPE (eq_type, eq_type_name) values (?, ?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
for (int i=1; i<=10; i++) {
pstmt.setString(1, i + "type");
pstmt.setString(2, i + "typeName");
pstmt.addBatch();
}
pstmt.executeBatch();
System.out.println("Done.");
}
/**
* 测试事务
* @throws Exception
*/
@Test
public void testTransaction() throws Exception {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
Class.forName("org.sqlite.JDBC");
conn = DriverManager.getConnection("jdbc:sqlite:d:pmm_cz.db");
conn.setAutoCommit(false);
String sql = "insert into WM_EQUI_TYPE (eq_type, eq_type_name) values (?, ?)";
pstmt = conn.prepareStatement(sql);
for (int i=1; i<=10; i++) {
pstmt.setString(1, i + "type");
pstmt.setString(2, i + "typeName");
pstmt.addBatch();
if (i == 9) {
throw new RuntimeException();
}
}
pstmt.executeBatch();
System.out.println("Done.");
conn.commit();
} catch (Exception e) {
e.printStackTrace();
conn.rollback();
throw e;
} finally {
release(conn, pstmt, rs);
}
}
public void release(Connection conn, PreparedStatement pstmt, ResultSet rs) {
try {
if (conn != null) {
conn.close();
}
conn = null;
if (pstmt != null) {
pstmt.close();
}
pstmt = null;
if (rs != null) {
rs.close();
}
rs = null;
} catch (Exception e) {
e.printStackTrace();
}
}
}
1. 因为是单元测试, 并且声明了抛出异常所以没有对异常进行处理. 其实也不需要进行处理, try...catch 住了直接往外抛即可..
2. 其实没必要每个单元测试类中写获取连接之类的操作. 完全可以写一个工具类来实现.这里为了偷懒了. 全写一块了.
重点只是演示了 sqlite 的使用. 一个文件搞定. 搞多了文件, 也看不清.
应该没有什么问题了吧? |
|
|