packagecom.hotent.code.util.eayun;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.SQLException;importjava.sql.Statement;/*** 对sqlite操作
* 所需支持依赖 sqlite-jdbc-3.8.11.1.jar
*@authorsunzhenyang on 2019-04-18
*
*
* 注:以下所有方法不能抛异常只能捕获 不然会报错*/
public classSqliteJDBCUtil {private static String dbFilePath="";public staticString getDbFilePath() {returndbFilePath;
}/*** 生成一个DB文件 (创建连接)
*@paramfilePath 生成文件夹的路径 如:F:/fileTest/aabb.db
*@return当前DB文件的连接通道*/
public staticConnection createRssDBFile(String filePath) {
SqliteJDBCUtil.dbFilePath=filePath;
Connection con=null;try{
Class.forName("org.sqlite.JDBC");//创建了一个sqlite的 .db文件
con = DriverManager.getConnection("jdbc:sqlite:"+filePath);
}catch(ClassNotFoundException e) {
e.printStackTrace();
}catch(SQLException e) {
e.printStackTrace();
}returncon;
}/*** 创建表
*@paramcon 某一个DB文件的连接
*@paramcreateTableSql 创建表的语句
*@paramtableName 表名 建表时判断表是否存在 存在即删除表 (可以不传)
*@throwsSQLException*/
public static voidcreateTable(Connection con,String createTableSql,String tableName){try{
Statement stat=con.createStatement();if(tableName != null && !"".equals(tableName)){
stat.executeUpdate("drop table if exists "+tableName+";");
}//创建表
stat.executeUpdate(createTableSql);
}catch(SQLException e) {
e.printStackTrace();
}
}/*** 执行SQL 外部调用是直接设置SQL语句 以及参数 传入后直接执行
*@throwsSQLException*/
public static voideditSql(PreparedStatement prep,Connection con){//执行处理
try{
prep.addBatch();
}catch(SQLException e) {
e.printStackTrace();
}
}/*** 执行SQL
*@throwsSQLException*/
public staticPreparedStatement editSql(Connection con){
PreparedStatement prep=null;//向rssType表中插入数据
try{
prep= con.prepareStatement("insert into tableTest values (?, ?, ?, ?);");
prep.setInt(1,1);
prep.setString(2,"qqq");
prep.setInt(3,2);
prep.setString(4,"11123");
prep.addBatch();
}catch(SQLException e) {
e.printStackTrace();
}returnprep;
}/*** 提交SQL语句
*@paramcon
*@paramprep
*@throwsSQLException*/
public static voidsubmitSql(Connection con,PreparedStatement prep){/*** 默认的话为自动提交, 每执行一个update ,delete或者insert的时候都会自动提交到数据库,无法回滚事务。
* 设置connection.setautocommit(false);
* 只有程序调用connection.commit()的时候才会将先前执行的语句一起提交到数据库,这样就实现了数据库的事务。
* 还有一点是因为sqllite数据库是一个 .db的文件 没执行一次语句都要打开一次文件 所以加入事务将全部SQL放于缓存中一次性执行 只需要打开一次文件*/
try{
con.setAutoCommit(false);
prep.executeBatch();//批量执行
con.setAutoCommit(true);
}catch(SQLException e) {
e.printStackTrace();
}
}/*** 使用完一定要关闭连接 ***** 务必 切记 *****
*@paramprep
*@paramcon*/
public static voidclose(PreparedStatement prep,Connection con){try{if(prep!=null)
prep.close();if(con!=null)
con.close();
}catch(Exception e) {
e.printStackTrace();
}
}public static void main(String[] args) throwsException {
Connection con= SqliteJDBCUtil.createRssDBFile("F:/fileTest/demo.db"); //1,创建一个DB文件
StringBuffer createTableSql=new StringBuffer("create table tableTest (");
createTableSql.append("id INTEGER, name NTEXT,");
createTableSql.append("typeId INTEGER, logoUrl text");
createTableSql.append(");");
SqliteJDBCUtil.createTable(con, createTableSql.toString(),"tableTest"); //2,创建一个表
PreparedStatement prep= SqliteJDBCUtil.editSql(con); //3, 向表中插入SQL
SqliteJDBCUtil.submitSql(con, prep);//提交
SqliteJDBCUtil.close(prep, con);
}
}