Home Php C# Sql C C++ Javascript Python Java Go Android Git Linux Asp.net Django .net Node.js Ios Xcode Cocoa Iphone Mysql Tomcat Mongodb Bash Objective-c Scala Visual-studio Apache Elasticsearch Jar Eclipse Jquery Ruby-on-rails Ruby Rubygems Android-studio Spring Lua Sqlite Emacs Ubuntu Perl Docker Swift Amazon-web-services Svn Html Ajax Xml Java-ee Maven Intellij-idea Rvm Macos Unix Css Ipad Postgresql Css3 Json Windows-server Vue.js Typescript Oracle Hibernate Internet-explorer Github Tensorflow Laravel Symfony Redis Html5 Google-app-engine Nginx Firefox Sqlalchemy Lucene Erlang Flask Vim Solr Webview Facebook Zend-framework Virtualenv Nosql Ide Twitter Safari Flutter Bundle Phonegap Centos Sphinx Actionscript Tornado Register | Login | Edit Tags | New Questions | 繁体 | 简体


10 questions online user: 9

0
votes
answers
59 views
+10

將圖像上傳到Azure

1

我正在使用Azure應用程序服務(移動應用程序)並希望通過移動應用程序上傳圖像。我寧願將它加載到數據類型爲varbinary(max)的列中,我可以使用它來存儲圖像。但是,在Easy Tables(在Azure門戶中)中,我只能看到數據類型選項String,Number,Date和Boolean。 請任何人都可以給我一個更好的方法來實現這一目標。將圖像上傳到Azure

沙发
0
1

Azure的表存儲不是關係數據庫,僅支持值數據類型的子集:https://docs.microsoft.com/en-us/rest/api/storageservices/understanding-the-table-service-data-model#property-types

所以,你需要要麼...

  1. 將圖像存儲在Blob storage和Easy Tables/Table Storage中的URL
  2. 將圖像存儲在包含的「MySQL In App」數據庫??中。但我不會使用這個,因爲有一些limitations
  3. 使用Azure的SQL數據庫來存儲圖像或只是網址(再次使用Azure的Blob存儲到存儲圖像)

我建議1或3,一個Blob存儲保存圖像。將圖像存儲在數據庫中並不是一個好主意,因爲a)數據庫的負載更高,b)您可能很難使用瀏覽器緩存或CDN。

+0

我認爲選項一看起來非常好,你有沒有任何文章顯示它是如何實現的。我也想將圖像轉換爲基本64字符串,然後存儲在簡單表格中,然後檢索字符串並隨時將圖像轉換回BitMap圖像。 –

+0

有關如何與Blob存儲進行交互的最流行服務的說明。這裏是.NET desc的[link](https://docs.microsoft.com/zh-cn/azure/storage/blobs/storage-dotnet-how-to-use-blobs)。據我所知,我還認爲base64轉換後的圖像的存儲將不起作用,因爲表存儲條目有64KB的限制。 –

+0

非常感謝您的幫助。 –

0
votes
answers
59 views
+10

來自SQLite的Java數據解析錯誤

0

我嘗試從SQLite數據庫檢索數據時出現錯誤。來自SQLite的Java數據解析錯誤

enter image description here

它檢索數據的第一行到表,但是當該日期是有它給出以下所示的錯誤。

這是我得到錯誤的代碼。

try { 
     con = DriverManager.getConnection("jdbc:sqlite:Rooms.db"); 
     con.setAutoCommit(false); 

     pst = con.prepareStatement("Select * from Standard"); 
     rs = pst.executeQuery(); 


     while (rs.next()) 
     { 
      LocalDate sD = null; 
      LocalDate eD = null; 
      if (rs.getDate(6) != null) 
      { 
       sD = Conv(rs.getDate(6)); 
       eD = Conv(rs.getDate(7)); 
       System.out.println(sD + " " + eD); 

       if (chkIn.getValue().isBefore(sD) == true && chkOut.getValue().isBefore(eD) == true) 
       { 
        datas.add(new StandardRoomList(rs.getString(1), rs.getString(2) , "£" + (rs.getInt(3)*pri), "" + rs.getInt(4))); 
       } 

      } 

這是我收到的錯誤:

Caused by: java.text.ParseException: Unparseable date: "2017-11-17" does not match (p{Nd}++)Q-E(p{Nd}++)Q-E(p{Nd}++)Q E(p{Nd}++)Q:E(p{Nd}++)Q:E(p{Nd}++)Q.E(p{Nd}++) 
at org.sqlite.date.FastDateParser.parse(FastDateParser.java:299) 
at org.sqlite.date.FastDateFormat.parse(FastDateFormat.java:490) 
at org.sqlite.jdbc3.JDBC3ResultSet.getDate(JDBC3ResultSet.java:293) 
... 64 more 
沙发
0
1

錯誤消息的模式意味着JDBC驅動程序期望的格式爲「YYYY-MM-DD HH的字符串:MM: SS.milliseconds」。這與數據庫中的日期表示不兼容。

這裏的根本問題是,SQLite不支持的日期/時間/時間戳類型:

您似乎已編碼的日期爲你的數據庫字符串,它似乎JDBC驅動程序試圖使用內置啓發式將這些字符串值轉換爲日期/時間值。但那是失敗的。

我建議使用getString從結果集中檢索值,然後使用Java的內置日期/時間類顯式地執行字符串 - >日期轉換。

另一種方法是使用org.sqlite.SQLiteConfig對象更改JDBC驅動程序的默認日期時間格式。但是,除了源代碼之外,我找不到這種方法的任何文檔!

0
votes
answers
53 views
+10

SQLite的列錯誤:表XXX沒有名爲YYY

-1

我看着下面,在其他列,並發現匹配我的問題(據我可以告訴)什麼:SQLite的列錯誤:表XXX沒有名爲YYY

android.database.sqlite.SQLiteException: table X has no column named Y: , while compiling: INSERT INTO

Android : Table has no column named "variable name" MySql Database error

Error compiling insert into: No column named ID

Android SQLite issue - table ... has no column named

https://sqlite.org/foreignkeys.html

我收到以下錯誤的SQLite:

SQLiteDatabase: Error inserting zipCode=23456 address2= city=state address1=123 petName=qwerty phoneNumber=null vetName=zaw emailAddress= 
              android.database.sqlite.SQLiteException: table vets has no column named petName (code 1): , while compiling: INSERT INTO vets (zipCode,address2,city,address1,petName,phoneNumber,vetName,emailAddress) VALUES (?,?,?,?,?,?,?,?) 

我有一種感覺,它與在VetTable外鍵做的,但我的研究還沒有與瞭解發生了什麼事情幫助我。

VetTable定義如下:

public class VetTable { 
    public static final String TABLE_VETS = "vets"; 
    public static final String VET_ID = "vetId"; 
    public static final String PET_ID = "petId"; 
    public static final String VET_NAME = "vetName"; 
    public static final String ADDRESS1 = "address1"; 
    public static final String ADDRESS2 = "address2"; 
    public static final String CITY = "city"; 
    public static final String STATE = "state"; 
    public static final String ZIP_CODE = "zipCode"; 
    public static final String PHONE_NUMBER = "phoneNumber"; 
    public static final String EMAIL_ADDRESS = "emailAddress"; 

public static final String SQL_CREATE = 
     "CREATE TABLE " + TABLE_VETS + "(" + 
       VET_ID + " INTEGER PRIMARY KEY UNIQUE, " + 
       PET_ID + " INTEGER, " + 
       VET_NAME + " TEXT, " + 
       ADDRESS1 + " TEXT, " + 
       ADDRESS2 + " TEXT, " + 
       CITY + " TEXT, " + 
       STATE + " TEXT, " + 
       ZIP_CODE + " TEXT, " + 
       PHONE_NUMBER + " TEXT, " + 
       EMAIL_ADDRESS + " TEXT, " + 
       "FOREIGN KEY(" + PET_ID + ") " + 
       "REFERENCES pets(petId));"; 

    public static final String SQL_DELETE = 
      "DROP TABLE" + TABLE_VETS; 
} 

從DBHelper代碼相關的代碼如下:

public void addVetInfo(String name, String address1, String address2, String city, String state, String zip, String phone, String email){ 
    try { 
     db = this.getWritableDatabase(); 
     values.put(VET_NAME, name); 
     values.put(ADDRESS1, address1); 
     values.put(ADDRESS2, address2); 
     values.put(CITY, city); 
     values.put(CITY, state); 
     values.put(ZIP_CODE, zip); 
     values.put(PHONE_NUMBER, phone); 
     values.put(EMAIL_ADDRESS, email); 
     db.insert(TABLE_VETS, null, values); 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
} 

如可以看到的petName不的一部分也不曾經被包括在VetTable ,也不是addVetInfo中參數列表的一部分。那麼,SQLite做的是什麼讓它認爲petName應該是VetTable中的一個列?

+0

有兩個'put(CITY')調用,無論如何,顯示的代碼並不是實際得到執行的代碼 –

+0

CL,你是什麼意思?我沒有發佈什麼代碼? – Jeff

+0

CL,感謝您發現兩個「CITY」電話! – Jeff

沙发
0
0

對於其他人誰是有這個SQLite的錯誤問題,看來,它在我的情況下有重複的是由於列的名稱由CL指出我的帖子。當我糾正並重新編碼時,它工作正常,沒有錯誤。

因此,請確保您的列名稱對於您的插入語句是正確的。

板凳
0
-1

看起來像你的價值觀變量已經有對象內部的價值,看看這個:

public void addVetInfo(String name, String address1, String address2, String city, String state, String zip, String phone, String email){ 
    try { 
     db = this.getWritableDatabase(); 
     //INITIALIZE YOUR VARIABLE VALUES HERE 
     ContentValues values = new ContentValues(); 

    //if(name == "Enter vet name") name = null; 
    values.put(VET_NAME, name); 
    //if(address1 == "Enter address 1" || address1 == " ") address1 = null; 
    values.put(ADDRESS1, address1); 
    //if(address2 == "Enter address 2") address2 = null; 
    values.put(ADDRESS2, address2); 
    //if(city == "Enter city") city = null; 
    values.put(CITY, city); 
    //if(state == "Enter state") state = null; 
    values.put(CITY, state); 
    //if(zip == "Enter zip") zip = null; 
    values.put(ZIP_CODE, zip); 
    //if(phone == "Enter phone number") phone = null; 
    values.put(PHONE_NUMBER, phone); 
    //if(email == "Enter email address") email = null; 
    values.put(EMAIL_ADDRESS, email); 
    db.insert(TABLE_VETS, null, values); 
} catch (SQLException e) { 
    e.printStackTrace(); 
} 
} 
+0

我發現錯誤是由於CL的評論指出我有重複的「CITY」引用導致的。我無法想象爲什麼SQLite會說它與「petName」有什麼關係。 – Jeff

0
votes
answers
41 views
+10

python sqlite fetchall沒有返回正確的數據類型

0

我有一個問題,讓fetchall返回正確的數據類型。 fetchone確實有用?!?!python sqlite fetchall沒有返回正確的數據類型

con = sqlite3.connect('test.db', detect_types=sqlite3.PARSE_DECLTYPES) 

與CON:

cur = con.cursor()  
cur.execute("SELECT df1 FROM PLCValues") 

rows = cur.fetchall() 
#print(rows) 
for row in rows: 
    print (row) 
print(row) 

返回

================= RESTART: C:/Users/zippo/Desktop/Graphit.py ================= 
(44.64769744873047,) 
(44.691650390625,) 
(44.691650390625,) 
(44.471900939941406,) 
(44.64769744873047,) 

FETCHONE

con = sqlite3.connect('test.db', detect_types=sqlite3.PARSE_DECLTYPES) 

與CON:

cur = con.cursor()  
cur.execute("SELECT df1 FROM PLCValues") 

rows = cur.fetchone() 
#print(rows) 
for row in rows: 
    print (row) 
print(row) 

返回:

================= RESTART: C:/Users/zippo/Desktop/Graphit.py ================= 
44.64769744873047 
44.64769744873047 
+0

「PLCValues」表中「df1」列的類型是什麼? –

沙发
0
1

cur.fetchall()返回一個元組的元組。據https://docs.python.org/2/library/sqlite3.html它似乎正在返回正確的類型。你可能想遍歷單個元組來獲得單個元素。

0
votes
answers
58 views
+10

其他類的空結果語句

0

即使查詢正常,我試圖從另一個類中檢索的結果集也會返回null。我試圖根據數據庫中保存的記錄初始化我的對象,這意味着如果最初有一個在sqlite中的記錄,我用最新的日期檢索一個記錄。不過,我嘗試從mysql數據庫中檢索最早的一個。是應該檢索結果從MySQL數據庫設置的代碼是這樣的:其他類的空結果語句

public ResultSet lowestDate() throws SQLException { 
    ResultSet rs1 = null; 
    String resultQuery = "SELECT * FROM alarm ORDER BY `timestamp` ASC LIMIT 1"; 
    rs1 = stmt.executeQuery(resultQuery); 
    return rs1; 
} 

聲明初始化globally.And我把這個在另一類是這樣的:

public void setLastAlarm() throws SQLException, ParseException { 
    String liteQuery = "SELECT * FROM alarm_entries ORDER BY date(`timestamp`) DESC LIMIT 1"; 
    conn.connectLite(); 
    Connection getCon = conn.getLiteConnection(); 
    try { 
     stmt = getCon.createStatement(); 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
    try { 
     rs = stmt.executeQuery(liteQuery); 
     if (rs.next()) { 
      //while (rs.next()) { 
      nuDate = rs.getString("timestamp"); 
      newDate = format.parse(nuDate); 
      lastAlarm.setBacklogId(rs.getBytes("backlog_id")); 
      lastAlarm.setTimestamp(newDate); 
      //} 
     } 
     else{ 
      rsq=mysqlConnection.lowestDate(); 
      lastAlarm.setTimestamp(format.parse(rsq.getString("timestamp"))); 
      lastAlarm.setBacklogId(rsq.getBytes("backlog_id")); 
     } 
    }catch (Exception e){ 
     e.printStackTrace(); 
    } 
} 

public void run() { 
    try { 
     setLastAlarm(); 
沙发
0
0

你永遠不會調用ResultSet#next()上結果集從lowestDate()輔助方法返回。因此,遊標永遠不會前進到結果集中的第一個(也是唯一)記錄。但是我認爲用這種方式來考慮JDBC代碼是一個壞主意。相反,只是內聯的兩個查詢是這樣的:

try { 
    rs = stmt.executeQuery(liteQuery); 
    if (rs.next()) { 
     nuDate = rs.getString("timestamp"); 
     newDate = format.parse(nuDate); 
     lastAlarm.setBacklogId(rs.getBytes("backlog_id")); 
     lastAlarm.setTimestamp(newDate); 
    } 
    else { 
     String resultQuery = "SELECT * FROM alarm ORDER BY timestamp LIMIT 1"; 
     rs = stmt.executeQuery(resultQuery); 
     if (rs.next()) { 
      String ts = rs.getString("timestamp"); 
      lastAlarm.setTimestamp(format.parse(ts)); 
      lastAlarm.setBacklogId(rs.getBytes("backlog_id")); 
     } 
    } 
} catch (Exception e){ 
    e.printStackTrace(); 
} 
+0

它沒有工作,它只是跳過整個事情,爲什麼會這樣。當我查詢相同的查詢返回的數據 – Morbidity

+0

那麼也許你的第一個查詢從不空虛。你檢查過你的表中的實際數據嗎? –

+0

是的我的意思是我檢查了表格中的數據,並且查詢在那裏工作 – Morbidity

0
votes
answers
50 views
+10

如何讓光標從SQLite數據庫中讀取下一行?

0

我想從我的數據庫從某些領域的報告到PDF。 pdf正在完美生成,但它只是從數據庫中讀取第一個條目而不是所有條目。如何讓光標從SQLite數據庫中讀取下一行?

這是我對PDF的代碼:

public void exportDataBaseIntoPDF() { 
    Document doc = new Document(PageSize.A4); 
    try { 
     path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/MSS Jobsheets"; 
     date = new SimpleDateFormat("dd-MM-yyyy", Locale.getDefault()).format(new Date()); 

     File dir = new File(path); 
     if (!dir.exists()) 
      dir.mkdirs(); 

     Log.d("PDFCreator", "PDF Path: " + path); 

     filePDF = new File(dir, "Report" + "(" + date + ")" + ".pdf"); 
     FileOutputStream fOut = null; 
     try { 
      fOut = new FileOutputStream(filePDF); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } 
     PdfWriter.getInstance(doc, fOut); 
     doc.open(); 

     DBHelper db = new DBHelper(this); 
     Cursor cursor = db.getDataItem(); 
     int count = cursor.getCount(); 

     cursor.moveToFirst(); 

     for (int j = 0; j < count; j++) { 
      PdfPTable table = new PdfPTable(2); 
      table.addCell(cursor.getString(cursor.getColumnIndex("name"))); 
      table.addCell(cursor.getString(cursor.getColumnIndex("gender"))); 


      cursor.moveToNext(); 

      doc.add(table); 
      doc.close(); 
     } 

    } catch (DocumentException e) { 
     e.printStackTrace(); 
    } 
} 

這是從我的DBHelper類拉低數據:

public Cursor getDataItem() { 
    SQLiteDatabase db = this.getReadableDatabase(); 
    String q = "SELECT * FROM " + PERSON_TABLE_NAME; 
    Cursor mCursor = db.rawQuery(q, null); 

    return mCursor; 
} 
} 

但就像我說的,它只是從數據庫讀取第一行並添加數據但不移動到數據庫中的下一行以將數據添加到PDF中。

有人可以幫我解決這個問題嗎? 在此先感謝!

+0

外面你有數據庫中的多行? –

+0

是的,我確實有。基本上它是一個用戶填寫的表單,然後在一天結束時用戶可以從某些領域獲取報告,然後發送電子郵件。 – Newbie

+0

嘗試關閉doc for side循環。寫這行doc.close();外側爲循環 – Munir

沙发
0
1

實際問題與遊標無關,遊標讀取下一行但您在第一次寫入數據後關閉文檔。嘗試關閉for循環之外的文檔對象。

,就把這行到for loop

doc.close(); 
+0

謝謝!它的工作現在。我無法相信我是如何錯過的!我一直在努力奮鬥這個年齡! – Newbie

+0

@Newbie高興地幫助你..! – Munir

0
votes
answers
55 views
+10

我的Android應用程序中的SQLite選擇與排錯

-3

我需要從SQLite數據庫中選擇數據。但是,我有一個搜索字段,用戶可以在其中輸入位置的名稱。因爲他們可能錯誤地輸入這個名字,我需要能夠根據這個從數據庫中提取相關的記錄。我的Android應用程序中的SQLite選擇與排錯

例如:

輸入:摩天Whrrl

實際:摩天輪

應該儘管錯字正確定位的摩天輪項目。我意識到editdist3沒有在Android SQLite中實現。我寧願不選擇整個數據庫到RAM中並遍歷所有字符串,並手動計算Levenshtein距離,因爲這將是超級資源密集型的。

任何幫助將不勝感激! :)

+0

嘗試使用LIKE運算符。 –

+0

LIKE運算符並不能幫助您逼近拼寫錯誤:/ – ashiswin

+1

您可以使用LIKE運算符來快速減少潛在匹配,然後使用更小的集合,這正是@BernoulliGate可能會遇到的問題。 –

沙发
0
-1

這裏您需要創建一個AI系統來猜測正確的單詞。我認爲這與SQL或Android無關。

或者您可以使用在線AI系統來猜測正確的單詞。

板凳
0
0

我認爲你能做的最好的事情就是實現一個自動建議功能,就像現在所有的搜索引擎一樣。

您可以實現動態算法,在輸入新字母時根據需要搜索和緩存值。但是,如果您只是在沒有任何外部服務的幫助下在裸機上進行操作,則您也會遇到資源問題 - 這取決於數據庫的大小和其他上下文變量。

有一個合適的索引將有所幫助,但我仍然認爲將所有必要的值加載到數組中並且搜索速度更快。

0
votes
answers
43 views
+10

VS單元測試無法打開數據庫(sqlite3)

0

我正在使用Visual Studio進行單元測試。創建一個測試項目,其目錄位於我正在測試的項目內。VS單元測試無法打開數據庫(sqlite3)

我想「單元測試」一個函數打開數據庫文件,並根據數據庫的內容創建類對象。 函數本身實際上工作正常。

bool import_materials_from_db(const char *db_name){ 
    sqlite3 *db; 
    int rc = sqlite3_open_v2(db_name, &db, 2, NULL); 
    if (rc != SQLITE_OK) { 
     std::cout << "The database "" << db_name << "" was not found.
"; 
     return false; 
    } 
} 

我已經明顯減少了功能,因爲這是失敗的地方。 RC表示錯誤代碼SQLITE_CANTOPEN(14)。 傳遞給函數的另一件事是持有我的類的std :: vector <>。不要相信這是特別相關的。

我調用該函數像這樣:

import_materials_from_db("materials.db"); 

這主要應用中的偉大工程,但只要我試試我的單元測試中:

import_materials_from_db("test_database.db"); 

我有沒有運氣。

項目目錄:

Advanced_Task_1 

單元測試指南:

Advanced_Task_1UnitTest1 

我試圖以防萬一把數據庫文件中的每個目錄中。 我嘗試過傳遞「.. test_database.db」等等。 最後,值得一提的是,我確信這是正確的文件名,我確信數據庫中有信息可以讀取。仍然沒有運氣。

關於我在做什麼錯誤的任何想法?我嘗試了「看上面的目錄」的技巧,就像我在項目設置中所做的那樣「..」,但它也不喜歡那樣。

沙发
0
0

我在寫問題的時候發現了答案。

我試圖插入整個路徑只是爲了確保。

"C:UsersDocumentsVisualStudioProjects" etc. 

這產生了錯誤「不正確形成的通用字符名稱」。

通用字符?他們與backsla ......喔做....

所以,我想我的功能,像這樣(注意的/,而不是):

import_materials_from_db("../test_database.db"); 

和它的工作!
只需引用單元測試目錄(..)上方的目錄,並使用正斜槓而不是反斜槓。

仍然想發佈這個問題,因爲我確信其他人將來會有類似的問題。


更有趣的,這可能是使用雙反斜線實現... 如在這個論壇上是必要的...顯然Windows以相同的方式對待它們(ish)。

所以,答案,而不是使用:

"..filename" 

使用本:

"..\filename" 

或本:

"../filename" 
0
votes
answers
97 views
+10

查詢在奎爾在運行時崩潰的語法錯誤

0

相關片段:查詢在奎爾在運行時崩潰的語法錯誤

case class Video(
    id: String, 
    title: String, 
    url: String, 
    pictureUrl: String, 
    publishedAt: Date, 
    channel: String, 
    duration: Option[String], 
    createdOn: Date 
) 

「連接」到DB工作,從預期的結果視頻臺返回選擇。我有儲蓄的問題,這個簡單的方法:

def saveToCache(item: Video): Unit = { 
    logger.trace(item) 
    import ctx._ 
    val x = quote { 
     val lItem = lift(item) 
     val fromDb = query[Video].filter(_.id == lItem.id) 
     if (fromDb.isEmpty) query[Video].insert(lItem) 
     else fromDb.update(lItem) 
    } 
    logger.trace(x.ast) 
    run(x) 
    } 

崩潰在運行時用(縮短):

CASE WHEN NOT EXISTS (SELECT x3.* FROM video x3 WHERE x3.id = ?) THEN INSERT INTO video (id,title,url,picture_url,published_at,channel,duration,created_on) VALUES (?, ?, ?, ?, ?, ?, ?, ?) ELSE UPDATE video SET id = ?, title = ?, url = ?, picture_url = ?, published_at = ?, channel = ?, duration = ?, created_on = ? WHERE id = ? END 

我想:

11:14:06.640 [scala-execution-context-global-84] ERROR io.udash.rpc.AtmosphereService - RPC request handling failed 
org.sqlite.SQLiteException: [SQLITE_ERROR] SQL error or missing database (near "CASE": syntax error) 
     at org.sqlite.core.DB.newSQLException(DB.java:909) ~[sqlite-jdbc-3.18.0.jar:na] 
     at org.sqlite.core.DB.newSQLException(DB.java:921) ~[sqlite-jdbc-3.18.0.jar:na] 
     at org.sqlite.core.DB.throwex(DB.java:886) ~[sqlite-jdbc-3.18.0.jar:na] 
     at org.sqlite.core.NativeDB.prepare_utf8(Native Method) ~[sqlite-jdbc-3.18.0.jar:na] 
     at org.sqlite.core.NativeDB.prepare(NativeDB.java:127) ~[sqlite-jdbc-3.18.0.jar:na] 
     at org.sqlite.core.DB.prepare(DB.java:227) ~[sqlite-jdbc-3.18.0.jar:na] 
     at org.sqlite.core.CorePreparedStatement.<init>(CorePreparedStatement.java:41) ~[sqlite-jdbc-3.18.0.jar:na] 
     at org.sqlite.jdbc3.JDBC3PreparedStatement.<init>(JDBC3PreparedStatement.java:30) ~[sqlite-jdbc-3.18.0.jar:na] 
     at org.sqlite.jdbc4.JDBC4PreparedStatement.<init>(JDBC4PreparedStatement.java:19) ~[sqlite-jdbc-3.18.0.jar:na] 
     at org.sqlite.jdbc4.JDBC4Connection.prepareStatement(JDBC4Connection.java:48) ~[sqlite-jdbc-3.18.0.jar:na] 
     at org.sqlite.jdbc3.JDBC3Connection.prepareStatement(JDBC3Connection.java:263) ~[sqlite-jdbc-3.18.0.jar:na] 
     at org.sqlite.jdbc3.JDBC3Connection.prepareStatement(JDBC3Connection.java:235) ~[sqlite-jdbc-3.18.0.jar:na] 
     at com.zaxxer.hikari.pool.ProxyConnection.prepareStatement(ProxyConnection.java:317) ~[HikariCP-2.7.2.jar:na] 
     at com.zaxxer.hikari.pool.HikariProxyConnection.prepareStatement(HikariProxyConnection.java) ~[HikariCP-2.7.2.jar:na] 
     at io.getquill.context.jdbc.JdbcContext.$anonfun$executeAction$1(JdbcContext.scala:98) ~[quill-jdbc_2.12-2.2.0.jar:2.2.0] 
     at io.getquill.context.jdbc.JdbcContext.$anonfun$executeAction$1$adapted(JdbcContext.scala:97) ~[quill-jdbc_2.12-2.2.0.jar:2.2.0] 
     at io.getquill.context.jdbc.JdbcContext.$anonfun$withConnection$1(JdbcContext.scala:46) ~[quill-jdbc_2.12-2.2.0.jar:2.2.0] 
     at scala.Option.getOrElse(Option.scala:121) ~[scala-library-2.12.2.jar:1.0.0-M1] 
     at io.getquill.context.jdbc.JdbcContext.withConnection(JdbcContext.scala:44) ~[quill-jdbc_2.12-2.2.0.jar:2.2.0] 
     at io.getquill.context.jdbc.JdbcContext.executeAction(JdbcContext.scala:97) ~[quill-jdbc_2.12-2.2.0.jar:2.2.0] 

從宏觀編譯過程中相關的輸出

啓用日誌記錄查詢,但我不知道如何去做(Quill文檔只是說了一些關於SLF4J的信息,這對我來說是無用的信息 - 我沒有看到任何日誌,我不知道要在SLF4J中搜索什麼內容OCS)。

到目前爲止,我對Quill感到非常失望 - 第一次在使用默認排序類型時,它會生成無效的排序查詢,現在這個。

+0

我修復了我的答案中的錯誤並添加了有關日誌記錄的信息。 – mixel

沙发
0
0

你應該重寫你的查詢:

import ctx._ 
def saveToCache(item: Video): Unit = { 
    if (ctx.run(query[Video].filter(_.id == lift(item.id)).isEmpty)) 
    ctx.run(query[Video].insert(lift(item))) 
    else ctx.run(query[Video].filter(_.id == lift(item.id)).update(lift(item))) 
() 
} 

因爲quote必須包含將被編譯成一個單一的查詢表達式。 此代碼將編譯爲三個查詢。

但更好地利用優化的版本:

import ctx._ 
def saveToCacheOptimized(item: Video): Unit = { 
    if (ctx.run(query[Video].filter(_.id == lift(item.id)).update(lift(item))) == 0) 
    ctx.run(query[Video].insert(lift(item))) 
() 
} 

其編譯成兩個查詢。

Quill使用SLF4J進行日誌記錄,您應該閱讀本項目文檔。啓用日誌記錄,你應該添加一些日誌記錄的後端,例如,logback

libraryDependencies ++= Seq(
    "ch.qos.logback" % "logback-classic" % "1.2.3" 
) 

應該爲剛剛記錄的查詢是不夠的。

+0

謝謝,它的工作:)。我可能對Quill的期望過高,也許是因爲我幾年前在ORM方面做了一些工作。但是,奎爾似乎更接近數據庫層,並不像我希望的那樣是傻瓜式的(規則「如果編譯它是正確的」顯然不在這裏,即使使用正確的類型它可能會失敗運行)。 – monnef

+0

其實它似乎是一個錯誤。我報告了它(https://github.com/getquill/quill/issues/974)。 – mixel

0
votes
answers
68 views
+10

條件訂貨通過價值SQL表達式中使用SQLite.Net-PCL

2

純SQL(在源碼)是這不會實現LINQ結果:條件訂貨通過價值SQL表達式中使用SQLite.Net-PCL

select * from Employees order by case WorkDay 
     WHEN 'MON' then 0 
     WHEN 'TUE' then 1 
     WHEN 'WED' then 2 
     WHEN 'THU' then 3 
     WHEN 'FRI' then 4 END 

結果在SQL編輯器是好的和如預期

id| FullName | Department| WorkDay 
7 Frank Bone C Block  MON 
8 Frank Bone D Block  TUE 
6 Frank Bone A Block  FRI 
9 Frank Bone E Block  FRI 

和使用C#代碼SQLite.Net-PCL(通用Windows平臺)

var rows = 
    conn.Query<Employees>("select * from Employees order by case WorkDay 
          WHEN 'MON' then 0 
          WHEN 'TUE' then 1 
          WHEN 'WED' then 2 
          WHEN 'THU' then 3 
          WHEN 'FRI' then 4 END").ToList(); 

     //rows.ForEach(x => { listBox1.Add(x); }); rows appears in wrong/weird order in debug mode. this line not important and not the cause of wrong order. 

行出現在一個衛rd /錯誤的順序

我得到這個行的順序錯誤。你知道這個奇怪的命令是什麼原因嗎?

id| FullName | Department| WorkDay 
6 Frank Bone A Block  FRI 
7 Frank Bone C Block  MON 
9 Frank Bone E Block  FRI 
8 Frank Bone D Block  TUE 

額外注:表類的模型(?EF)

public class Employees 
{ 

    [PrimaryKey, AutoIncrement] 
    public int id { get; set; } 

    public string FullName { get; set; } 

    [Indexed] 
    public string Department { get; set; } 

    public string WorkDay { get; set; } 
} 
沙发
0
1

試試這個

限定枚舉,而下面

[Flags] enum DayEnum { MON=0, TUE= 1, WED= 2, THU= 3, FRI = 4}; 

public class Employees 
{ 
    [PrimaryKey, AutoIncrement] 
    public int id { get; set; } 
    public string FullName { get; set; } 
    [Indexed] 
    public string Department { get; set; } 
    public string WorkDay { get; set ; } 
     public DayEnum DayNO{ get; set; } 
    } 

var employees = conn.Query<Employees>("select * from Employees"); 
var rows = (from e in employees 
      select new Employee() { 
       id =e.id 
       FullName = e.FullName 
       Department = e.Department 
       WorkDay = e.WorkDay 
       DayNO = (DayEnum) Enum.Parse(typeof(DayEnum), e.WorkDay) 
      }).OrderBy(e=>e.DayNO); 

給出做休息按照你的評論似乎像圖書館的問題,在Ë解決辦法是

增加新屬性WorkDayNo

public class Employees 
{ 
    [PrimaryKey, AutoIncrement] 
    public int id { get; set; } 
    public string FullName { get; set; } 
    [Indexed] 
    public string Department { get; set; } 
    public string WorkDay { get; set; } 
    public string WorkDayNo { get; set; } 
} 

做這樣的查詢

var rows = 
    conn.Query<Employees>("select *, (case WorkDay 
           WHEN 'MON' then 0 
           WHEN 'TUE' then 1 
           WHEN 'WED' then 2 
           WHEN 'THU' then 3 
           WHEN 'FRI' then 4 END) as WorkDayNo from Employees").OrderBy(e=> e.WorkDayNo).ToList(); 

能否請您嘗試查詢,如下

select id, FullName, Department,WorkDay from 
(select *, (case WorkDay 
          WHEN 'MON' then 0 
          WHEN 'TUE' then 1 
          WHEN 'WED' then 2 
          WHEN 'THU' then 3 
          WHEN 'FRI' then 4 END) as workdayno from Employees) d order by workdayno 
+0

SQL編輯器拋出語法錯誤Pranay先生。在子查詢之前的某處沒有「in或from」?按照預期,我的問題中的sql代碼在sqleditor中工作。但在C#代碼隱藏順序行結果成爲錯誤orderomehow。 –

+0

@KursatTurkay - 我更新的查詢可以請你試試,我忘了包括END –

+0

>在「select」附近:語法錯誤(我試圖找到錯誤) –