2015-02-23 78 views
0

我在執行查詢(帶ORMLite)時遇到了問題,該查詢添加了返回到'ultimaConfiguracao'以便在配置表中插入最後一個'id'的查詢。Android:如何獲取最後一個ID插入ORMLite?

搜索方法的最後一個配置如下:

public Integer buscaIdUltimaAtualizacao() throws SQLException { 
     GenericRawResults<Integer> raw = this.queryRaw("SELECT MAX (id) FROM configuracao", new RawRowMapper<Integer>() { 
      Configuracao c = new Configuracao(); 
      @Override 
      public Integer mapRow(String[] columns, String[] results) throws SQLException { 
       if(results[0] != null) 
        return Integer.parseInt(results[0]); 
       else 
        return 0; 
      } 
     }); 
     return raw.getFirstResult(); 
    } 

類使用SQLite:

protected Boolean doInBackground(Void... paths){ 
     try { 
      this.ultimaConfiguracao = this.confDao.queryForId(confDao.buscaIdUltimaAtualizacao().toString()); 

      if(ultimaConfiguracao != null){ 
       //baixa somente o que tem atualização 
      } 
      else{ 
       //region MIDIA 
       this.query = new ParseQuery("Midia"); 
       this.query.whereEqualTo("ativo", true); 
       query.findInBackground(new FindCallback() { 
        @Override 
        public void done(List list, com.parse.ParseException e) { 
         if(!list.isEmpty()){ 
          for(ParseObject pObject : (List<ParseObject>) list) { 
           publishProgress(((Activity) listener).getString(R.string.m_progress_textView_verificandoAtualizacoes)); 
           Midia md = new Midia(); 
... 

logcat的:

我在其中執行操作

@DatabaseTable(tableName = "configuracao", daoClass = ConfiguracaoDao.class) 

    public class Configuracao { 

     public Configuracao() { 
      /*deixar vazio*/ 
     } 

     @DatabaseField(generatedId = true) 
     private int id; 

     @DatabaseField(dataType = DataType.DATE, canBeNull = true) 
     private Date ultima_atualizacao_artista; 

     @DatabaseField(dataType = DataType.DATE, canBeNull = true) 
     private Date ultima_atualizacao_diaEvento; 

     @DatabaseField(dataType = DataType.DATE, canBeNull = true) 
     private Date ultima_atualizacao_evento; 
    ... 

上下文

02-23 22:36:24.097 1446-1453/com.universo91.towersrock W/art﹕ Suspending all threads took: 313.333ms 
02-23 22:36:24.936 1446-1453/com.universo91.towersrock W/art﹕ Suspending all threads took: 651.381ms 
02-23 22:36:25.009 1446-1491/com.universo91.towersrock W/System.err﹕ java.sql.SQLException: Could not perform raw query for SELECT MAX (id) FROM configuracao 
02-23 22:36:25.011 1446-1491/com.universo91.towersrock W/System.err﹕ at com.j256.ormlite.misc.SqlExceptionUtil.create(SqlExceptionUtil.java:22) 
02-23 22:36:25.011 1446-1491/com.universo91.towersrock W/System.err﹕ at com.j256.ormlite.dao.BaseDaoImpl.queryRaw(BaseDaoImpl.java:552) 
02-23 22:36:25.011 1446-1491/com.universo91.towersrock W/System.err﹕ at com.universo91.towersrock.DAO.ConfiguracaoDao.buscaIdUltimaAtualizacao(ConfiguracaoDao.java:78) 
02-23 22:36:25.011 1446-1491/com.universo91.towersrock W/System.err﹕ at com.universo91.towersrock.BL.PSTowersRock.doInBackground(PSTowersRock.java:72) 
02-23 22:36:25.011 1446-1491/com.universo91.towersrock W/System.err﹕ at com.universo91.towersrock.BL.PSTowersRock.doInBackground(PSTowersRock.java:39) 
02-23 22:36:25.011 1446-1491/com.universo91.towersrock W/System.err﹕ at android.os.AsyncTask$2.call(AsyncTask.java:288) 
02-23 22:36:25.012 1446-1491/com.universo91.towersrock W/System.err﹕ at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
02-23 22:36:25.012 1446-1491/com.universo91.towersrock W/System.err﹕ at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
02-23 22:36:25.012 1446-1491/com.universo91.towersrock W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
02-23 22:36:25.012 1446-1491/com.universo91.towersrock W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
02-23 22:36:25.012 1446-1491/com.universo91.towersrock W/System.err﹕ at java.lang.Thread.run(Thread.java:818) 
02-23 22:36:25.012 1446-1491/com.universo91.towersrock W/System.err﹕ Caused by: java.sql.SQLException: Getting a writable database from helper [email protected] failed 
02-23 22:36:25.013 1446-1491/com.universo91.towersrock W/System.err﹕ at com.j256.ormlite.misc.SqlExceptionUtil.create(SqlExceptionUtil.java:22) 
02-23 22:36:25.013 1446-1491/com.universo91.towersrock W/System.err﹕ at com.j256.ormlite.android.AndroidConnectionSource.getReadWriteConnection(AndroidConnectionSource.java:68) 
02-23 22:36:25.013 1446-1491/com.universo91.towersrock W/System.err﹕ at com.j256.ormlite.android.AndroidConnectionSource.getReadOnlyConnection(AndroidConnectionSource.java:54) 
02-23 22:36:25.014 1446-1491/com.universo91.towersrock W/System.err﹕ at com.j256.ormlite.stmt.StatementExecutor.queryRaw(StatementExecutor.java:306) 
02-23 22:36:25.014 1446-1491/com.universo91.towersrock W/System.err﹕ at com.j256.ormlite.dao.BaseDaoImpl.queryRaw(BaseDaoImpl.java:550) 
02-23 22:36:25.014 1446-1491/com.universo91.towersrock W/System.err﹕ ... 9 more 

回答

0

你應該在你的column_name和table_name之前和之後加上潮汐(`)字符。

我也遇到了這個問題。這是解決方案。

QueryBuilder<Account, Integer> qb = accountDao.queryBuilder(); 
// select 2 aggregate functions as the return 
qb.selectRaw("MAX(`column_name`)"); 
// the results will contain 2 string values for the min and max 
results = accountDao.queryRaw(qb.prepareStatementString()); 
String[] values = results.getFirstResult(); 

在我把潮流人物,這表明錯誤一樣, 「無法爲SELECT MAX(ID)FROM configuracao執行原始查詢」

參考:http://ormlite.com/docs/raw-queries

+0

即'字符被稱爲代字號 – Odaym 2015-08-08 13:32:24

+1

@Odaym(offtopic)。這個字符實際上是一個「反引號」(或「反引號」)。 「波浪號」就是這個:〜 – 2016-01-06 09:38:05