1. 程序開發中json 存儲結構化數據是怎麼回事呢
使用 json 存儲結構化數據就是從文件中讀寫字元串很容易。
1.數值就要多費點兒周折,因為 read() 方法只會返回字元串,應將其傳入 int() 這樣的函數,就可以將 '123' 這樣的字元串轉換為對應的數值 123。當你想要保存更為復雜的數據類型,例如嵌套的列表和字典,手工解析和序列化它們將變得更復雜。
好在用戶不是非得自己編寫和調試保存復雜數據類型的代碼,Python 允許你使用常用的數據交換格式 JSON(JavaScript Object Notation)。標准模塊 json 可以接受 Python 數據結構,並將它們轉換為字元串表示形式;此過程稱為 序列化。從字元串表示形式重新構建數據結構稱為 反序列化。序列化和反序列化的過程中,表示該對象的字元串可以存儲在文件或數據中,也可以通過網路連接傳送給遠程的機器。
Note
2.JSON 格式經常用於現代應用程序中進行數據交換。許多程序員都已經熟悉它了,使它成為相互協作的一個不錯的選擇。
如果你有一個對象 x,你可以用簡單的一行代碼查看其 JSON 字元串表示形式:
>>> json.mps([1, 'simple', 'list'])
'[1, "simple", "list"]'
mps() 函數的另外一個變體 mp(),直接將對象序列化到一個文件。所以如果 f 是為寫入而打開的一個 文件對象,我們可以這樣做:
json.mp(x, f)
為了重新解碼對象,如果 f 是為讀取而打開的 文件對象:
x = json.load(f)
3.這種簡單的序列化技術可以處理列表和字典,但序列化任意類實例為 JSON 需要一點額外的努力。 json 模塊的手冊對此有詳細的解釋。
See also
pickle - pickle 模塊
4.與 JSON 不同,pickle 是一個協議,它允許任意復雜的 Python 對象的序列化。因此,它只能用於 Python 而不能用來與其他語言編寫的應用程序進行通信。默認情況下它也是不安全的:如果數據由熟練的攻擊者精心設計, 反序列化來自一個不受信任源的 pickle 數據可以執行任意代碼。
2. 微信小程序存儲數據到本地,離線使用
在做微信小程序項目開發的過程中,有時候後台給的請求數據過大,會導致請求時間過長或者項目需要離線使用一些數據;這是就可以使用小程序的文件保存和文件讀取的API,離線存儲數據到本地使用。
保存文件:
頁面中獲取文件:
3. 資料庫在軟體開發中的作用是什麼
(1)數據以「文件」形式可長期保存在外部存儲器的磁碟上。由於計算機的應用轉向信息管理,因此對文件要進行大量的查詢、修改和插入等操作。
(2)數據的邏輯結構與物理結構有了區別,程序和數據分離,使數據與程序有了一定的獨立性,但比較簡單。數據的邏輯結構是指呈現在用戶面前的數據結構形式。數據的物理結構是指數據在計算機存儲設備上的實際存儲結構。程度與數據之間具有「設備獨立性」,即程序只需用文件名就可與數據打交道,不必關心數據的物理位置。由操作系統的文件系統提供存取方法(讀/寫)。
(3)文件組織已多樣化。有索引文件、鏈接文件和直接存取文件等。但文件之間相互獨立、缺乏聯系。數據之間的聯系需要通過程序去構造。
(4)數據不再屬於某個特定的程序,可以重復使用,即數據面向應用。但是文件結構的設計仍是基於特定的用途,程序基於特定的物理結構和存取方法,因此程度與數據結構之間的依賴關系並未根本改變。
(5)用戶的程序與數據可分別存放在外存儲器上,各個應用程序可以共享一組數據,實現了以文件為單位的數據共享文件系統。
(6)對數據的操作以記錄為單位。這是由於文件中只存儲數據,不存儲文件記錄的結構描述信息。文件的建立、存取、查詢、插入、刪除、修改等操作,都要用程序來實現。
(7)數據處理方式有批處理,也有聯機實時處理。
4. 程序開發資料庫版本控制必備 - Flyway
在我們日常產品發布的過程中,代碼的版本控制可以使用git、svn工具實現。對於資料庫每當發布時會出現手動執行sql腳本進行升級資料庫,中間經常出現一些漏寫、錯寫情況,對資料庫的版本與代碼的版本不匹配,導致上線後出現資料庫不同步的問題。flyway就是對資料庫版本進行控制的工具,可以對不同環境的sql進行遷移操作。
flyway 的官網:https://flywaydb.org/
flyway會對每次執行過sql腳本保存到flyway_schema_history中,在資料庫中將保存sql腳本的版本號和對sql生成checksum,當下次執行資料庫遷移的時候就會按照版本號從低往高執行。如果以前的版本號腳本已經執行過就不會執行,如果以前版本的sql腳本已經被修改在執行的過程中則會報錯。對flyway的詳細描述與介紹可以查看flyway的官網。
配置好以上maven組件,在IDEA中就可以看到flyway的快捷插件了。
在插件中undo不能使用,undo為回滾操作。回滾操作只有使用商業版才能使用。
命令行執行
IDEA 工具執行(點擊baseline、migrate)
使用migrate必須開頭是V+版本號+「_ _「+描述.sql
如V1.0.3_20220618__increment.sql
對已經存在資料庫schema結構的資料庫的一種解決方案。實現在非空資料庫新建metaData flyway_schema_history表,並把Migrations應用到該資料庫;也可以在已有表格的資料庫中添加metaData數據表。 註:對已有的數據結構的資料庫來說,必須要進行baseline,才能進行migrate
清楚掉對應資料庫Schema中所有的對象,包括表結構,視圖,存儲過程等,clean操作再dev和test階段很好用,但是在生產環境務必禁用。
執行migrate會在指定文件夾下的sql按照版本號依次執行遷移操作。也就是執行sql腳本,對已經執行過的sql腳本便不再執行。
5. java寫windows桌面程序,用什麼來存儲數據啊
那隻能是注冊表了,把你所有的數據加密存儲在注冊表中就行了,注冊表中存儲是全局的,無論你程序移動到任何地方都是不受影響的,但是注冊表只能存儲少量數據,對於太多數據就是無法實現了。
注冊表(Registry,繁體中文版Windows操作系統稱之為登錄檔)是Microsoft
Windows中的一個重要的資料庫,用於存儲系統和應用程序的設置信息。早在Windows
3.0推出OLE技術的時候,注冊表就已經出現。隨後推出的Windows
NT是第一個從系統級別廣泛使用注冊表的操作系統。但是,從Microsoft Windows
95操作系統開始,注冊表才真正成為Windows用戶經常接觸的內容,並在其後的操作系統中繼續沿用至今。
6. C# 請問開發的小程序中的數據 怎樣保存並在此調用保存內容
通常以text保存(streamWriter),任何系統都可以調用,文件後綴可以自行保存為「.ini/.dat」等等,但是調用數據需要逐行string分析,從而實現資料庫的基本使用性。
給你個小例子:
using System.IO;
private static string getConnDetail(string parameter)//gets the connection details from txt file
{
try
{
string filename = "conn.txt";
using (StreamReader sr = new StreamReader(filename))
{
string line;
while ((line = sr.ReadLine()) != null)
{
//do stuff
string[] subs = line.Split(':');
if (subs[0] == parameter)
{
sr.Close();
return subs[1];
}
}
sr.Close();
return "fail";
}
}
catch (Exception ex)
{
return ex.Message;
}
}
然後在同一路徑下創建一個.txt文件命名conn.txt,內容:
Server:YourComputerName\SQLEXPRESS
DB:YourDBName
User:sa
Pass:pass
最後你如果想察看servername,就調用getConnDetail(「Server」)
返回string: "YourComputerName\SQLEXPRESS"
這個例子是從.txt讀取數據,如果要寫入數據,參考3樓的連接。也可以直接用openfile(filepath/filename,opentype)指令打開文件然後寫入或者讀取。 具體可以查找關鍵詞:File.OpenText ,主要閱讀與File指令相關。
7. 簡述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協議實現網路數據交互。
8. c/c++開發程序數據存儲為單文檔,用什麼資料庫比較好
用access就可以了
或者直接用i/o函數
直接寫成一個txt文檔
9. 微信小程序開發——本地緩存
本地緩存是指微信小程序存儲在當前設備空間里地數據。在官方文檔說明中,其所有的數據存儲上限為10MB即單個小程序的存儲空間上限為10MB。==在使用過程中用戶使用本地緩存可以存儲一些非重要性的生產操作,例如讓小程序再次打開能快速渲染頁面,減少用戶等待時間。
小程序提供了讀寫刪本地緩存的方法:
關於同步緩存和非同步緩存的區別
非同步與同步的區別是,非同步不會阻塞當前任務,同步緩存直到同步方法處理完才能繼續往下執行。
寫入本地緩存
根據key讀取本地緩存
根據key移除本地緩存
清除本地所有緩存
最後,還要注意的一點是如果寫入了同樣key的緩存數據,後寫的會覆蓋了前者,因此需要我們注意一下
10. Android開發如何將自己儲存在資料庫的數據同程序一起傳輸
可以將XX.db文件復制到Eclipse Android工程中的res\raw目錄中。所有在res\raw目錄中的文件不會被壓縮,這樣可以直接提取該目錄中的文件數據存儲這塊分為兩部分,一部分是服務端,一部分是客戶端
客戶端的存儲很簡單,現在一般用sqllite,也可以直接使用SharedPreferences。
服務端的存儲就很復雜了。你要學習jdbc的知識和資料庫的知識,如oracle,sqlserver,mysql之類的、 自己寫一個方法,點擊或者啟動的時候,採用JDBC一條條的取數據來同步。如果有時間戳的列,那麼你很好同步。 2. 我們採用的是,Local和伺服器都採用SQLLite。需要同步的時候,直接把伺服器的DB文件給拷貝下來,放到Local就可以了。至於提交到1、運行輸入 adb shell (前提是模擬器正在運行)。
2、進入命令界面後 輸入 ls 指令 會列出文件的目錄。
3、cd 進入你想要的目錄里。
4、一層一層進去後會發現 databases目錄 你的數據文件就在這個目錄下放著。
5、sqlite3 test (test就是你創建的資料庫的名稱 注意:不要加.db 後綴)。
6、現在你就進入你創建的test資料庫了使用 .tables 就可以查看所有的表了。你有用什麼執行或者編寫資料庫軟體嗎? 我一般用PL/SQL。如果你有軟體你就把創表和添加數據的資料庫文件導出(如何導出可以根據你用的軟體網路下下哦)到一個txt或者其它類型的文件裡面然後一起放到你將打包的項目文件中一起打包就可以了。命名的時候讓別人一看就知道是資料庫文件就可以了