有兩種方法:
1、在資料庫中建立相關表 保存視圖的相對路徑即可 調用的時候 直接調用路徑 相當於連接。
2、將視頻轉化為二進制 存儲在表中 取出的時候 再轉化回來 建議新手不要考慮此方法 否則你會對資料庫失去信心的 而且這樣的性能也沒有前者的高。
㈡ 帆軟怎麼在公式裡面引用數據列
一、資料庫如何工作
1、什麼是資料庫
資料庫是用來進行數據存儲和管理的容器。
產品在使用過程中發生的行為和業務數據都存儲在資料庫中。
資料庫運行在伺服器上,屬於後端的一部分
服務端處理業務邏輯,然後調用資料庫進行數據操作
關系型資料庫:mysql、sql Server、oracle等
非關系型資料庫:mongoDB、couchDB等
被服務端調用,進行數據增刪改查
服務端通過SQL語句操作資料庫,SQL語句需要工程師寫代碼實現
資料庫運行在伺服器上,數據存儲在伺服器硬碟中
索引單獨維護,需要耗費空間
每次更新數據表時需要同步更新索引表
建立和維護索引時耗時較多,數據量增加時,耗時也會增加
2、資料庫分類
不同數據廠商提供的資料庫基礎能力是類似的,但是使用場景和處理能力有差別,比如銀行會用Oracle,支持大規模系統的資料庫,安全性高。類似不同空調廠商,空調都可以製冷制熱,但是能耗價格有差別。
3、資料庫如何工作的
資料庫工作原理:
二、資料庫表和關系結構
1、實體關系結構
反映現實世界中實體本身和實體之間的關系結構,實體之間的關系可以是1對1、1對多、多對多。
例如:
實體A是父親,有姓名、年齡、職業等屬性。
實體B是孩子,有姓名、年齡、學歷等屬性。
一個父親實體A可以對應多個孩子實體B,即1對多。
2、資料庫表
資料庫中的表對應客觀世界中的一個實體,表的名字就是實體名,表的欄位就是實體屬性。
3、資料庫關系結構
反映現實世界中實體本身和實體之間的關系結構,實體之間的關系可以是1對1、1對多、多對多。
表與表之間可以建立關聯關系,對應不同實體之間的關系。
訂單與商品表的關系:1對多(一個訂單可以有多個商品)
商品表與店鋪表的關系:多對多(一個店鋪可以賣多個商品,一個商品可以在多個店鋪賣)
用戶表與戶口表的關系:1對1(一個人只有一個戶口)
4、表與表之間通過主鍵相互關聯
主鍵:每個表中唯一標識一條數據的欄位
例如:商品表的主鍵是proctId,訂單表的主鍵是orderId
三、資料庫欄位和欄位類型
1、數據表欄位
欄位對應實體對象中的屬性,在資料庫表結構中,欄位是基本組成要素。
例如User表欄位:User、username、sex、age等
欄位可以有無限多個,資料庫表欄位命名通常用英文,可以用下劃線區分。例如user_id,user_name
2、數據表的欄位類型
每一個欄位都對應一種欄位類型,用來表示欄位存儲的值屬於哪種類型。
常用欄位類型有整數型、字元型、日期型。
例如User表欄位類型:userId是字元型,username是字元型,sex是字元型,age是整數型。
例如Order表欄位類型:time是日期型。
工程師寫代碼存儲數據時要根據表的欄位的數據類型約束來做相應改變。
3、欄位和欄位類型的使用
欄位映射的是客觀世界的實體屬性,每個屬性都需要對應的數據類型。
欄位和欄位類型是數據結構的基礎,介面里的參數和值對應的都是資料庫里的欄位和欄位類型。
工程師都是基於欄位和欄位類型來定義介面(API)。
產品經理對資料庫表、欄位、欄位類型有了了解後,可以更好的理解介面的設計和功能的邏輯。
四、資料庫操作語言SQL
1、資料庫操作語言——SQL
SQL全稱是結構化查詢語言,是一種用來操作關系型資料庫的編程語言,可以理解為對資料庫的操作指令。
SQL語句被嵌入在服務端程序中,後端工程師除了編寫業務邏輯代碼外,還需要對資料庫進行操作。
2、資料庫如何呈現
客戶端發起請求,服務端處理,調用資料庫進行查詢,通過介面將數據帶咐賀返回客戶端並展示。當數據出現異常時,產品經理要知道問題出在哪裡,是數據取的時候出現問題還是數據返回的時候出現問題。在定位產品數據問題時更有針對性。
3、常用SQL語句
表的建立、新增、查詢、修改、刪除。
建表:create table
新增:insert into
查詢:select
修改:update
刪除:delete from
五、資料庫表索引
1、什麼是資料庫索引
索引是基於資料庫表某一列或幾列建立的目錄結構,通過索引能極大提高數據的查詢效率簡蔽。
例如基於user表建立userid的索引結構,能快速定位查詢到某一具體數據。
傳統蠢派方法使用select * from user where userid = '10000' 查詢第10000條數據,按行遍歷。
通過userid的索引可以快速定位到userid=10000的數據項,提高查詢效率。
2、資料庫索引的缺點
㈢ 帆軟怎麼不用坐標存數據
帆軟不使用坐標存儲數據,因為它使用關系資料庫來存儲搭段磨數據,這種資料庫可以更有效地存儲和管理數據,而且可以更容易地查詢和更新數據。關系資料庫可以更有效地存儲和管理數據,燃州而且可以更容易地查詢和更新數據。它還可以更容易地維護數據的完整知斗性,減少數據冗餘,提高數據的可用性,以及提高數據的可靠性。
㈣ 簡述android平台提供了哪些數據存儲方法
數據存儲在開發中是使用最頻繁的,Android平台主要有5種實現數據存儲的方式。
第1種: 使用SharedPreferences存儲數據
SharedPreferences是Android平台上一個輕量級的存儲類,主要是保存一些常用的配置比如窗口狀態,一般在Activity中 重載窗口狀態onSaveInstanceState保存一般使用SharedPreferences完成,它提供了Android平台常規的Long長 整形、Int整形、String字元串型的保存。
它的本質是基於XML文件存儲key-value鍵值對數據,通常用來存儲一些簡單的配置信息。
其存儲位置在/data/data/<包名>/shared_prefs目錄下。
SharedPreferences對象本身只能獲取數據而不支持存儲和修改,存儲修改是通過Editor對象實現。
實現SharedPreferences存儲的步驟如下:
一、根據Context獲取SharedPreferences對象
二、利用edit()方法獲取Editor對象。
三、通過Editor對象存儲key-value鍵值對數據。
四、通過commit()方法提交數據。
SharedPreferences對象與SQLite資料庫相比,免去了創建資料庫,創建表,寫SQL語句等諸多操作,相對而言更加方便,簡潔。但是SharedPreferences也有其自身缺陷,比如其職能存儲boolean,int,float,long和String五種簡單的數據類型,比如其無法進行條件查詢等。所以不論SharedPreferences的數據存儲操作是如何簡單,它也只能是存儲方式的一種補充,而無法完全替代如SQLite資料庫這樣的其他數據存儲方式。
第2種: 內部文件存儲數據
關於文件存儲,Activity提供了openFileOutput()方法可以用於把數據輸出到文件中,具體的實現過程與在J2SE環境中保存數據到文件中是一樣的。
文件可用來存放大量數據,如文本、圖片、音頻等。
默認位置:/data/data/<包>/files/***.***。
openFileOutput()方法的第一參數用於指定文件名稱,不能包含路徑分隔符「/」 ,如果文件不存在,Android 會自動創建它。
創建的文件保存在/data/data//files目錄,如: /data/data/cn.itcast.action/files/itcast.txt ,通過點擊Eclipse菜單「Window」-「Show View」-「Other」,在對話窗口中展開android文件夾,選擇下面的File Explorer視圖,然後在File Explorer視圖中展開/data/data//files目錄就可以看到該文件。
openFileOutput()方法的第二參數用於指定操作模式,有四種模式,分別為:
Context.MODE_PRIVATE = 0
Context.MODE_APPEND = 32768
Context.MODE_WORLD_READABLE = 1
Context.MODE_WORLD_WRITEABLE = 2
Context.MODE_PRIVATE:為默認操作模式,代表該文件是私有數據,只能被應用本身訪問,在該模式下,寫入的內容會覆蓋原文件的內容,如果想把新寫入的內容追加到原文件中。可以使用Context.MODE_APPEND
Context.MODE_APPEND:模式會檢查文件是否存在,存在就往文件追加內容,否則就創建新文件。
Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用來控制其他應用是否有許可權讀寫該文件。
MODE_WORLD_READABLE:表示當前文件可以被其他應用讀取;
MODE_WORLD_WRITEABLE:表示當前文件可以被其他應用寫入。
如果希望文件被其他應用讀和寫,可以傳入: openFileOutput(「itcast.txt」, Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE); android有一套自己的安全模型,當應用程序(.apk)在安裝時系統就會分配給他一個userid,當該應用要去訪問其他資源比如文件的時候,就需要userid匹配。默認情況下,任何應用創建的文件,sharedpreferences,資料庫都應該是私有的(位於/data/data//files),其他程序無法訪問。
除非在創建時指定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE ,只有這樣其他程序才能正確訪問。 對於私有文件只能被創建該文件的應用訪問,如果希望文件能被其他應用讀和寫,可以在創建文件時,指定Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE許可權。
Activity還提供了getCacheDir()和getFilesDir()方法: getCacheDir()方法用於獲取/data/data//cache目錄 getFilesDir()方法用於獲取/data/data//files目錄。
第3種: 外部文件存儲數據
把文件存入SDCard:
使用Activity的openFileOutput()方法保存文件,文件是存放在手機空間上,一般手機的存儲空間不是很大,存放些小文件還行,如果要存放像視頻這樣的大文件,是不可行的。對於像視頻這樣的大文件,我們可以把它存放在SDCard。
SDCard是干什麼的?你可以把它看作是移動硬碟或U盤。 在模擬器中使用SDCard,你需要先創建一張SDCard卡(當然不是真的SDCard,只是鏡像文件)。
創建SDCard可以在Eclipse創建模擬器時隨同創建,也可以使用DOS命令進行創建,如下: 在Dos窗口中進入android SDK安裝路徑的tools目錄,輸入以下命令創建一張容量為2G的SDCard,文件後綴可以隨便取,建議使用.img: mksdcard 2048M D:\AndroidTool\sdcard.img 在程序中訪問SDCard,你需要申請訪問SDCard的許可權。
在AndroidManifest.xml中加入訪問SDCard的許可權如下:
要往SDCard存放文件,程序必須先判斷手機是否裝有SDCard,並且可以進行讀寫。
注意:訪問SDCard必須在AndroidManifest.xml中加入訪問SDCard的許可權。
Environment.getExternalStorageState()方法用於獲取SDCard的狀態,如果手機裝有SDCard,並且可以進行讀寫,那麼方法返回的狀態等於Environment.MEDIA_MOUNTED。
Environment.getExternalStorageDirectory()方法用於獲取SDCard的目錄,當然要獲取SDCard的目錄,你也可以這樣寫:
第4種: SQLite資料庫存儲數據
SQLite是輕量級嵌入式資料庫引擎,它支持 SQL 語言,並且只利用很少的內存就有很好的性能。此外它還是開源的,任何人都可以使用它。許多開源項目((Mozilla, PHP, Python)都使用了 SQLite.SQLite 由以下幾個組件組成:SQL 編譯器、內核、後端以及附件。SQLite 通過利用虛擬機和虛擬資料庫引擎(VDBE),使調試、修改和擴展 SQLite 的內核變得更加方便。
特點:
面向資源有限的設備,
沒有伺服器進程,
所有數據存放在同一文件中跨平台,
可自由復制。
SQLite 基本上符合 SQL-92 標准,和其他的主要 SQL 資料庫沒什麼區別。它的優點就是高效,Android 運行時環境包含了完整的 SQLite。
SQLite 和其他資料庫最大的不同就是對數據類型的支持,創建一個表時,可以在 CREATE TABLE 語句中指定某列的數據類型,但是你可以把任何數據類型放入任何列中。當某個值插入資料庫時,SQLite 將檢查它的類型。如果該類型與關聯的列不匹配,則 SQLite 會嘗試將該值轉換成該列的類型。如果不能轉換,則該值將作為其本身具有的類型存儲。比如可以把一個字元串(String)放入 INTEGER 列。SQLite 稱這為「弱類型」(manifest typing.)。 此外,SQLite 不支持一些標準的 SQL 功能,特別是外鍵約束(FOREIGN KEY constrains),嵌套 transcaction 和 RIGHT OUTER JOIN 和 FULL OUTER JOIN, 還有一些 ALTER TABLE 功能。 除了上述功能外,SQLite 是一個完整的 SQL 系統,擁有完整的觸發器,交易等等。
Android 集成了 SQLite 資料庫 Android 在運行時(run-time)集成了 SQLite,所以每個 Android 應用程序都可以使用 SQLite 資料庫。
對於熟悉 SQL 的開發人員來時,在 Android 開發中使用 SQLite 相當簡單。但是,由於 JDBC 會消耗太多的系統資源,所以 JDBC 對於手機這種內存受限設備來說並不合適。因此,Android 提供了一些新的 API 來使用 SQLite 資料庫,Android 開發中,程序員需要學使用這些 API。
資料庫存儲在 data/< 項目文件夾 >/databases/ 下。 Android 開發中使用 SQLite 資料庫 Activites 可以通過 Content Provider 或者 Service 訪問一個資料庫。
創建資料庫 Android 不自動提供資料庫。在 Android 應用程序中使用 SQLite,必須自己創建資料庫,然後創建表、索引,填充數據。
Android 提供了 SQLiteOpenHelper 幫助你創建一個資料庫,你只要繼承 SQLiteOpenHelper 類,就可以輕松的創建資料庫。SQLiteOpenHelper 類根據開發應用程序的需要,封裝了創建和更新資料庫使用的邏輯。
SQLiteOpenHelper 的子類,至少需要實現三個方法:
1 構造函數,調用父類 SQLiteOpenHelper 的構造函數。這個方法需要四個參數:上下文環境(例如,一個 Activity),資料庫名字,一個可選的游標工廠(通常是 Null),一個代表你正在使用的資料庫模型版本的整數。
2 onCreate()方法,它需要一個 SQLiteDatabase 對象作為參數,根據需要對這個對象填充表和初始化數據。
3 onUpgrage() 方法,它需要三個參數,一個 SQLiteDatabase 對象,一個舊的版本號和一個新的版本號,這樣你就可以清楚如何把一個資料庫從舊的模型轉變到新的模型。
接下來討論具體如何創建表、插入數據、刪除表等等。調用 getReadableDatabase() 或 getWriteableDatabase() 方法,你可以得到 SQLiteDatabase 實例,具體調用那個方法,取決於你是否需要改變資料庫的內容:
update()方法有四個參數,分別是表名,表示列名和值的 ContentValues 對象,可選的 WHERE 條件和可選的填充 WHERE 語句的字元串,這些字元串會替換 WHERE 條件中的「?」標記。
update() 根據條件,更新指定列的值,所以用 execSQL() 方法可以達到同樣的目的。 WHERE 條件和其參數和用過的其他 SQL APIs 類似。
delete() 方法的使用和 update() 類似,使用表名,可選的 WHERE 條件和相應的填充 WHERE 條件的字元串。 查詢資料庫 類似 INSERT, UPDATE, DELETE,有兩種方法使用 SELECT 從 SQLite 資料庫檢索數據。
1 .使用 rawQuery() 直接調用 SELECT 語句; 使用 query() 方法構建一個查詢。
Raw Queries 正如 API 名字,rawQuery() 是最簡單的解決方法。通過這個方法你就可以調用 SQL SELECT 語句。
例如: Cursor c=db.rawQuery( 「SELECT name FROM sqlite_master WHERE type=』table』 AND name=』mytable』」, null);
在上面例子中,我們查詢 SQLite 系統表(sqlite_master)檢查 table 表是否存在。返回值是一個 cursor 對象,這個對象的方法可以迭代查詢結果。 如果查詢是動態的,使用這個方法就會非常復雜。
例如,當你需要查詢的列在程序編譯的時候不能確定,這時候使用 query() 方法會方便很多。
Regular Queries query() 方法用 SELECT 語句段構建查詢。SELECT 語句內容作為 query() 方法的參數,比如:要查詢的表名,要獲取的欄位名,WHERE 條件,包含可選的位置參數,去替代 WHERE 條件中位置參數的值,GROUP BY 條件,HAVING 條件。 除了表名,其他參數可以是 null。所以,以前的代碼段可以可寫成:
String[] columns={「ID」, 」inventory」};
Java代碼
String[] parms={"snicklefritz"}; Cursor result=db.query("widgets", columns, "name=?",parms, null, null, null);
使用游標
不管你如何執行查詢,都會返回一個 Cursor,這是 Android 的 SQLite 資料庫游標,
使用游標,你可以:
通過使用 getCount() 方法得到結果集中有多少記錄;
通過 moveToFirst(), moveToNext(), 和 isAfterLast() 方法遍歷所有記錄;
通過 getColumnNames() 得到欄位名;
通過 getColumnIndex() 轉換成欄位號;
通過 getString(),getInt() 等方法得到給定欄位當前記錄的值;
通過 requery() 方法重新執行查詢得到游標;
通過 close() 方法釋放游標資源;
在 Android 中使用 SQLite 資料庫管理工具 在其他資料庫上作開發,一般都使用工具來檢查和處理資料庫的內容,而不是僅僅使用資料庫的 API。
使用 Android 模擬器,有兩種可供選擇的方法來管理資料庫。
首先,模擬器綁定了 sqlite3 控制台程序,可以使用 adb shell 命令來調用他。只要你進入了模擬器的 shell,在資料庫的路徑執行 sqlite3 命令就可以了。
資料庫文件一般存放在: /data/data/your.app.package/databases/your-db-name 如果你喜歡使用更友好的工具,你可以把資料庫拷貝到你的開發機上,使用 SQLite-aware 客戶端來操作它。這樣的話,你在一個資料庫的拷貝上操作,如果你想要你的修改能反映到設備上,你需要把資料庫備份回去。
把資料庫從設備上考出來,你可以使用 adb pull 命令(或者在 IDE 上做相應操作)。
存儲一個修改過的資料庫到設備上,使用 adb push 命令。 一個最方便的 SQLite 客戶端是 FireFox SQLite Manager 擴展,它可以跨所有平台使用。
如果你想要開發 Android 應用程序,一定需要在 Android 上存儲數據,使用 SQLite 資料庫是一種非常好的選擇。
第五種: 網路存儲數據
前面介紹的幾種存儲都是將數據存儲在本地設備上,除此之外,還有一種存儲(獲取)數據的方式,通過網路來實現數據的存儲和獲取。
我們可以調用WebService返回的數據或是解析HTTP協議實現網路數據交互。
㈤ 資料庫中數據如何存儲
資料庫是一種文件系統
可以將數據導出為指定格式
㈥ 如何在帆軟報表頁面上顯示上傳的Excel之類文檔內容並可以編輯和保存
帆軟報表奔愛就是支持excel 文件的呀。在帆軟報表中可進行excel導入邏輯設計插件。
設置單元格的匹配邏輯
先按標題匹配,不通過再按單元格位置匹配,默認選中,該選項即為當前FR中已有邏輯(標題匹配和位置匹配同時開啟)。
按位置匹配,默認不選中。該選項選中時的效果,和現有邏輯中只啟用位置匹配的效果保持一致。
設置導入時的形態
顯示值轉換,默認不勾選,勾選即為開啟導入顯示值對應的實際值功能
擴展功能選項
雙向擴展各導入,默認不勾選,勾選即為開啟雙向導入功能,
行式報表
1)固定行式報表:只能根據位置匹配
2)非固定行式報表:優先使用標題匹配(同時2列或以上匹配成功,其他列如果匹配失敗,對應列就導入空白),如果標題匹配失敗,則啟用位置匹配。
3)表頭可擴展的行式報表:雙向導入,優先標題匹配,然後位置匹配。
非行式報表(自由格式)
只能根據位置匹配
excel導入顯示值轉換
excel里使用顯示值,導入到資料庫中的為實際值
啟用插件
點擊模板-excel導入設置,彈出excel導入配置菜單,如下圖:
㈦ 如何用fineReport自定義模板,導出自己指定id的數據,並且保存到本地
1. 描述
2. 思路
3. 操作步驟
4. 預覽效果
5. 已完成模板
1. 描述編輯
FR雖然有內置的導出按鈕,但是導出名稱不能自定義,如果想要自定義導出文件名稱,那麼該如何實現呢?
㈧ 帆軟如何實現填報利用參數$fine_usernamer獲取用戶名後存入資料庫中
可以通過js腳本獲取到需要的控搭祥裂件,從而獲得控制項的值,及給控制項賦值。
示例
我們利用FineReport製作一個簡單的例子實現上圖效果。
1、參數界面
如下圖參數界面
username控制項類型為下拉框,數據自定義,實際值和顯示值都為:jerny,知閉anna,merry。
state控制項類型選擇單選按鈕組,數據也為自定義,實際值和顯示值都為:1,2。
2 、JS事件設置
在username的事件編輯中添加編輯後事件,JS代碼如下:
1. var state= this.options.form.getWidgetByName(state);
2. var username = this.options.form.getWidgetByName(username).getValue();
3. if (!username){
4. state.setValue(2);
5. }else{
6. state.setValue(1);
7. }
該段代宴消碼是用來對state參數置數,當username為空時,!username為真,此時將state置數為2,否則當username有值時,將state置數為1。