CouchBase-lite是Couchbase官网出的一个嵌入式文档数据库,专门编码格调是用于挪动设施应用程序的,其中就有java版本。其底层应用的是sqlite数据库
以下是我首次踩坑编写的代码
import java.time.LocalDate;import com.couchbase.lite.CouchbaseLite;import com.couchbase.lite.CouchbaseLiteException;import com.couchbase.lite.DataSource;import com.couchbase.lite.Database;import com.couchbase.lite.DatabaseConfiguration;import com.couchbase.lite.Dictionary;import com.couchbase.lite.Expression;import com.couchbase.lite.Meta;import com.couchbase.lite.MutableDocument;import com.couchbase.lite.Query;import com.couchbase.lite.QueryBuilder;import com.couchbase.lite.Result;import com.couchbase.lite.ResultSet;import com.couchbase.lite.SelectResult;public class Test { public static String path = "path"; public static String tableName="db"; public static void main(String[] args) throws CouchbaseLiteException { // TODO Auto-generated method stub //初始化CouchbaseLite模块? CouchbaseLite.init(); //配置对象实例? DatabaseConfiguration config = new DatabaseConfiguration(); //设置db文件门路 config.setDirectory(path); try { //query(config); testDelete(config); } catch (CouchbaseLiteException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void read(DatabaseConfiguration config) { for(int i=1;i<10;i++) { new Thread(()->{ try { query(config); } catch (CouchbaseLiteException e) { // TODO Auto-generated catch block e.printStackTrace(); } }).start(); } } //关上保留 public static void testAdd(DatabaseConfiguration config) throws CouchbaseLiteException { Database database = null; try { database = new Database(tableName, config); MutableDocument doc = new MutableDocument().setString("sad", "dsf").setString("aa", "bb") .setValue("date_test", LocalDate.now().toString()); database.save(doc); System.out.println("id:" + doc.getId()); } catch (CouchbaseLiteException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void testDelete(DatabaseConfiguration config) throws CouchbaseLiteException { Database database = null; try { database = new Database(tableName, config); Query query = QueryBuilder .select( SelectResult.all(), SelectResult.expression(Meta.id) ). from(DataSource.database(database)).limit(Expression.intValue(1)); ResultSet rs=query.execute(); Result r=rs.next(); if(r!=null) { String id=r.getString("id") ; System.out.println("id:"+id); Dictionary dict = r.getDictionary(0); for (String key : dict.getKeys()) { System.out.println(key + " = " + dict.getValue(key)); } //以下代码运行会抛出异样 //database.delete(new MutableDocument().setString("id", id)); //删除一个汇合表 //database.delete(); } //System.out.println("id:" + doc.getId()); } catch (CouchbaseLiteException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void query(Database database) throws CouchbaseLiteException { Query query = QueryBuilder.select(SelectResult.all()).from(DataSource.database(database)); for (Result r : query.execute()) { System.out.println("\ncount:" + r.count()); Dictionary dict = r.getDictionary(0); for (String key : dict.getKeys()) { System.out.println(key + " = " + dict.getValue(key)); } } } public static void query(DatabaseConfiguration config) throws CouchbaseLiteException { Database database = null; database = new Database(tableName, config); Query query = QueryBuilder .select( SelectResult.all(), SelectResult.expression(Meta.id).as("id") ). from(DataSource.database(database)); for (Result r : query.execute().allResults()) { System.out.println("id"+":"+r.getString("id") ); Dictionary dict = r.getDictionary(0); if(dict!=null) for (String key : dict.getKeys()) { System.out.println(key + " = " + dict.getValue(key)); } System.out.println(); } }}
它的delete办法的api在非挪动设施上应用是有问题的,我感觉是偏差于挪动设施,无奈纯id删除内容。也可能是我没找到办法,如果有晓得的,在这里说以下