当前位置:首页 » 服务存储 » 用户存储数据的选择
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

用户存储数据的选择

发布时间: 2022-09-14 08:49:56

A. 什么存储介质能够更好地保存你的资料

现代人几乎每天都要与计算机打交道,不论是智能手机、平板还是桌面PC,涵盖了工作、生活、娱乐方方面面。这就意味着:数据和资料已经完全数字化。

显然,在整个计算机的发展历程中,存储介质也扮演着重要的角色。20年前,你需要使用一个容量不到3MB的软盘来存储文档数据;现在,128GB的U盘已经非常常见,还有TB级别的硬盘、蓝光光盘甚至是海量云端空间可以选择。而对于网龄达到10年以上的用户来说,无疑也是经历着这种数据存储介质的巨变。那么,你还能找到各种老照片、经典电影或是10年前的笔记吗?它们是存储在软盘、光盘、硬盘还是你的QQ空间中?

这就给我们带来了一个问题。如果你想完美保存下一个10年的数据和资料,你应该选择什么存储介质?

存储介质很重要

如何选择存储介质,很大一部分关系到存储成本。现在,我们基本上有以下不同成本、不同形式的存储介质可以选择:

光盘

目前,CD/DVD/蓝光光盘十分普及,单面容量从700MB、4.7GB到25GB,价格也不尽相同,一般DVD光盘不到1元钱、单面蓝光光盘则在3.5元左右。另外,一般的低价笔记本、台式机都配备了DVD刻录机、高端影音PC则配备了蓝光光驱,你可以根据自己的预算来进行选择。

不过,要想把光盘保存10年,可并不容易。即便诸如索尼、松下等厂商宣布蓝光光盘未来容量可达1TB、保存时间长达50年,但这种技术的稳定性依然令人失望。普遍来说,一般空白光盘的寿命不到5年;而高档、新技术光盘的价格则十分昂贵,并不值得投入。

机械硬盘

传统机械硬盘目前已经突破TB容量级别,相比光盘拥有更大容量和更快的读写速度速度。不过,由于机械结构和电路复杂,接口变化较快,同时寿命基本上在8年左右,所以即便机械硬盘的价格已经十分低廉,依然不是一个最好的存储介质。

固态硬盘

固态硬盘是目前高端电脑主要配备的存储介质,虽然价格昂贵,但存储速度更快、没有机械部件的设计理论上也更适合长时间保存数据。不过,实际的应用体验似乎并非如此,由于闪存的记忆细胞会因为限制而会失去电荷,最终导致数据丢失,所以固态硬盘并非完美。

那么云存储和社交媒体呢?

云存储是21世纪科技厂商的新发明,包括微软、谷歌、苹果等巨头都拥有自己的云服务,各种其他互联网厂商也都涉足云技术领域。显然,将资料上传至云端,可以在任何地方下载到设备中,这种存储机制听上去是很完美的,无需担心天灾人祸导致数据丢失。

至于成本,感觉上是比较昂贵的。比如苹果iColud,50GB的年存储价格需要600多元,同时由于系统的显着,你无法使用更便宜的第三方云服务来备份其系统文件(仅限照片、视频、文档等用户数据)。即便是价格便宜的第三方云服务,数据格式可能也会受到限制。当然,你还要担心网络的安全性和被黑客侵入的可能,但总得来说,云服务在目前来看是一个明智的选择。

与云服务相似,社交媒体也可以作为一种在线备份的形式,如相册、消息等,当然社交媒体的文件类型和服务限制更多,另外一些社交媒体也允许用户通过谷歌等云服务来备份数据。

最好的数据存储解决方案

在任何存储介质都不太完美的情况下,我们认为最好的方式便是根据需求选择混合形式,比如:

·定期备份:将电脑数据保存在硬盘里

·多个文件备份:诸如照片、视频、文档保存在可靠的云空间及状态良好的硬盘中

·将物理存储介质放在合适的地方:诸如光盘、硬盘都要避免阳光暴晒,温度也要合适。

·考虑加密文件:可以通过一些软件将文件内容加密后再存储,实现更安全的存储形式。

B. 请问RFID标签用户区数据具体是怎么存储的,以及移动读写器如何与javaWeb程序交互

数据块写操作
选择标签(图3-1中1),选择存储区(图3-1中2,只有EPC区和用户区可以写入数据),填写起始地址和读取长度(图3-1中3),注: 起始地址:0x00 表示从第一个字(相应存储区第一个16位)开始读,0x01表示从第2个字开始读,依次类推。读长度:要读取的字的个数。不能为0x00,不能超过120,即最多读取120个字。若设置为0或者超过了120,将返回参数出错的消息。访问密码:从左到右为从高位到低位,2字的访问密码的最高位在第一字,如果电子标签没有设置访问密码,则访问密码部分可以为任意值,但不能缺失。填写需要写入的数据(图3-1中4),点击写(图3-1中5),左下角看到“写数据”按钮执行成功,点击“读”按钮则右边框中显示读取到的数据(图3-1中6 ),点击“清除显示”即可清空数据显示区内容。
详情请见 http://wenku..com/view/af1169e3f524ccbff121844a 第十四页
如果需要在web调用读写 需要编写浏览器的OCX文件

C. Oracle数据选择查询和数据存储

首先,建立一个 DBLINK

目标表是在 orcl 实例上面的, 那么,需要在 oracl 那里,建立一个 client 实例的 DBLINK。

DBLINK 的创建的例子如下:
建立一个名字叫 mydblink 的 DBLINK
这个链接是 使用 test 作为用户名, test1234567 作为密码
连接到 192.168.1.210 这台机器 的 1521 端口
目标数据库的服务名为 orcl

sql> CREATE DATABASE LINK mydblink
2 CONNECT TO test IDENTIFIED BY test1234567
3 USING '(DESCRIPTION =
4 (ADDRESS_LIST =
5 (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.210)(PORT = 1521)))
6 (CONNECT_DATA = (SERVICE_NAME = orcl)
7 )
8 )';

Database link created.

SQL> select count(1) from user_tables@mydblink;

COUNT(1)
----------
6

DBLINK 创建完毕后

在 orcl 那里
执行

CREATE TABLE B
AS
SELECT
a1,a2, a3, a4,a7,a8, a9, a10, a11,
CASE
WHEN (a1='x' OR a2='x' OR a3='x' OR a4='x') THEN 'x'
WHEN (a1='O' OR a2='O' OR a3='O' OR a4='O'
AND a1!='x' AND a2!='x' AND a3!='x' AND a4!='x') THEN 'O'
WHEN (a1='√' AND a2='√' AND a3='√' AND a4='√') THEN '√'
ELSE '?'
END AS b1
FROM
A@你前面创建的对于client的dblink.

上面的 SQL, 只演示一下,怎么处理:

其中b1存的值由如下规则确定:
该值与字段a1,a2, a3, a4的值有关, 即在字段a1,a2, a3, a4同一行的值中,只要有一个为字符"×", 则b1在该行中存为"×",
如果字段a1,a2, a3, a4同一行的值中,只要有一个为字符"〇",但没有出现"×", 则b1在该行中存为"〇",
如果字段a1,a2, a3, a4同一行的值中全部为"√", 则b1在该行中存为"√".

我测试的时候,是英文版的Oracle, 那个〇 处理不了,就用 O 代替了。

注意:请不要在 实例client 那里,建立一个 orcl 的dblink,然后 执行这样的语句:

SQL> CREATE TABLE B@mydblink
2 AS
3 SELECT
4 a1,a2, a3, a4,a7,a8, a9, a10, a11,
5 CASE
6 WHEN (a1='x' OR a2='x' OR a3='x' OR a4='x') THEN 'x'
7 WHEN (a1='O' OR a2='O' OR a3='O' OR a4='O'
8 AND a1!='x' AND a2!='x' AND a3!='x' AND a4!='x') THEN 'O'
9 WHEN (a1='√' AND a2='√' AND a3='√' AND a4='√') THEN '√'
10 ELSE '?'
11 END AS b1
12 FROM
13 A;
CREATE TABLE B@mydblink
*
ERROR at line 1:
ORA-02021: DDL operations are not allowed on a remote database

D. 要怎么保存数据

保存数据,方法如下
1,数据分类

你要把自己想要长期有效保存的数据先分类清楚,等级划分为核心数据、重要数据、普通数据三个类型。然后依据不同层次的数据对可靠性的要求,再制定出对应的方法。



2/6

压缩存储空间

需要保存的数据可能有word、图片、音频、视频等各种类型的文件,可以把其都格式转换成空间较小的格式,这样我们能存储更多的数据。



3/6

选择存储介质

其实保存数据有很多方法,比如光盘、硬盘、机械硬盘、网盘,所以如果您有一定资金建议您选择更安全的存储介质。



4/6

定期查看

不管你存放的任何的介质中,您如果要长期保存数据,就要定期查看一下。适当的维护一下,如果有漏洞就要进行修复。



5/6

重要的数据要备份

重要的数据不是能只有一份,你要至少备份三份。当其中一份因为意外失去之后,不至于让你彻底失去这些数据。



6/6

把文件直接放在文件系统上

不要再弄一个打包文件把一堆文件打了包再存,当介质发生故障时,打包文件很难恢复,而直接放在文件系统上的文件相对容易恢复一些。

E. java程序中数据的储存方法有哪些

java程序中数据储存方法如下:
一种是栈内存,另一种是堆内存
(1)在函数中定义的基本类型变量(即基本类型的局部变量)和对象的引用变量(即对象的变量名)都在函数的栈内存中分配;
(2)堆内存用来存放由new创建的对象和数组以及对象的实例变量(即全局变量)。
在函数(代码块)中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量所分配的内存空间;
在堆中分配的内存由java虚拟机的自动垃圾回收器来管理
堆和栈的优缺点
堆的优势是可以动态分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的。
缺点就是要在运行时动态分配内存,存取速度较慢;
栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。

F. 安卓需要存一些参数信息、测量数据和计算结果,File和SQlite哪个好

使用SQLite方式存储数据

在Android中一共提供了5种数据存储方式,分别为:

(1)Files:通过FileInputStream和FileOutputStream对文件进行操作。具体使用方法可以参阅博文《Android学习笔记34:使用文件存储数据》。

(2)Shared Preferences:常用来存储键值对形式的数据,对系统配置信息进行保存。具体使用方法可以参阅博文《Android学习笔记35:使用Shared Preferences方式存储数据》。

(3)Content Providers:数据共享,用于应用程序之间数据的访问。

(4)SQLite:Android自带的轻量级关系型数据库,支持SQL语言,用来存储大量的数据,并且能够对数据进行使用、更新、维护等操作。

(5)Network:通过网络来存储和获取数据。

本篇博文介绍第四种方式,通过Android自带的SQLite数据库存储数据。

1.SQLite简介

SQLite是一款开源的、嵌入式关系型数据库,第一个版本Alpha发布于2000年。SQLite在便携性、易用性、紧凑性、高效性和可靠性方面有着突出的表现。

SQLite和C/S模式的数据库软件不同,它是一款嵌入式数据库,没有独立运行的进程,与所服务的应用程序在应用程序进程空间内共生共存。它的代码与应用程序代码也是在一起的,或者说嵌入其中,作为托管它的程序的一部分。因此不存在数据库的客户端和服务器,使用SQLite一般只需要带上它的一个动态库,就可以享受它的全部功能。

数据库服务器在程序中的好处是不需要网络配置或管理。将数据库客户端与服务器运行在同一个进程中,可以省去不少的操作及麻烦:不用担心防火墙或者地址解析;不用浪费时间管理复杂的授权和权限;可以减少网络调用相关的消耗;可以简化数据库管理并使程序更容易部署。

SQLite数据库通过数据库级上的独占性和共享锁来实现独立事务处理。这意味着多个进程可以在同一时间从同一数据库读取数据,但是只有一个可以写入数据。在某个进程向数据库执行写操作之前,必须获得独占锁定。在发出独占锁定后,其他的读写操作将不会再发生。

此外,SQLite数据库中的所有信息(比如表、视图、触发器等)都包含在一个文件内,方便管理和维护。SQLite数据库还支持大部分操作系统,除电脑上使用的操作系统之外,很多手机上使用的操作系统同样可以运行。同时,SQLite数据库还提供了多语言的编程接口,供开发者使用。

2.SQL基本命令

SQL是与关系型数据库通信的唯一方式。它专注于信息处理,是为构建、读取、写入、排序、过滤、映射、分组、聚集和通常的管理信息而设计的声明式语言。

在讲解SQL基本命令之前,有必要先了解一下SQLite所支持的数据类型都有哪些。

2.1 SQLite支持的数据类型

SQLite采用动态数据存储类型,会根据存入的值自动进行判断。SQLite支持以下5种数据类型:

(1)NULL:空值

(2)INTEGER:带符号的整型

(3)REAL:浮点型

(4)TEXT:字符串文本

(5)BLOB:二进制对象

2.2 SQL基本命令

表是探索SQLite中SQL的起点,也是关系型数据库中信息的标准单位,所有的操作都是以表为中心的。那么如何使用SQL命令创建一张表呢?

2.2.1创建表

表是由行和列组成的,列称为字段,行称为记录。

使用CREATE命令可以创建表,CREATE命令的一般格式为:

CREATE [TEMP/TEMPORARY] TABLE table_name (column_definitions [, constraints]);

其中,[]中的内容是可选的,用TEMP或TEMPORARY关键字声明的表是临时表,这种表只存活于当前会话,一旦连接断开,就会被自动销毁。如果没有明确指出创建的表是临时表,则创建的是基本表,将会在数据库中持久存在,这也是数据库中最常见的表。

CREATE TABLE命令至少需要一个表名和一个字段名,上述命令中的table_name表示表名,表名必须与其他标识符不同。column_definitions由用逗号分隔的字段列表组成,每个字段定义包括一个名称、一个域(类型)和一个逗号分隔的字段约束。其中,域是指存储在该列的信息的类型,约束用来控制什么样的值可以存储在表中或特定的字段中。

一条创建表的命令示例如下:

1 CREATE TABLE tab_student (studentId INTEGER PRIMARY KEY AUTOINCREMENT,
2 studentName VARCHAR(20),
3 studentAge INTEGER);

如上,我们创建了一个名为tab_student的表,该表包含3个字段:studentId、 studentName和studentAge,其数据类型分别为:INTEGER、VARCHAR和INTEGER。

此外,通过使用关键字PRIMARY KEY,我们指定了字段studentId所在的列是主键。主键确保了每一行记录在某种方式上与表中的其他行记录是不同的(唯一的),进而确保了表中的所有字段都是可寻址的。

SQLite为主键提供自增长功能,当定义字段类型为INTEGER PRIMARY KEY时,SQLite将为该字段创建默认值,该默认值确保整数值是唯一的。SQLite使用64-bit单符号整数主键,因此,该字段的最大值是9,223,372,036,854,775,807。当达到最大值时,SQLite会自动搜索该字段还未使用的值,并作为要插入的值。从表中删除记录时,rowid可能被回收并在后面的插入中使用。因此,新创建的rowid不一定是按照严格顺序增长的。如果想要SQLite使用唯一的自动主键值,而不是填补空白,可以在主键定义INTEGER PRIMARY KEY中加入关键字AUTOINCREMENT。AUTOINCREMENT关键字阻止rowid回收,它将为新插入的记录产生新的(不是回收的)rowid。

2.2.2插入记录

使用INSERT命令可以一次插入一条记录,INSERT命令的一般格式为:

INSERT INTO tab_name (column_list) VALUES (value_list);

其中,tab_name指明将数据插入到哪个表中,column_list是用逗号分隔的字段名称,这些字段必须是表中存在的,value_list是用逗号分隔的值列表,这些值是与column_list中的字段一一对应的。

比如,向刚才创建的tab_student表中插入一条记录,便可以使用如下的语句完成:

INSERT INTO tab_student (studentId, studentName, studentAge) VALUES (1, “jack”, 23);

通过以上的语句,便插入了一条studentName=”jack”, studentAge=”23”的记录,该记录的主键为studentId=1。

2.2.3更新记录

使用UPDATE命令可以更新表中的记录,该命令可以修改一个表中一行或者多行中的一个或多个字段。UPDATE命令的一般格式为:

UPDATE tab_name SET update_list WHERE predicate;

其中,update_list是一个或多个字段赋值的列表,字段赋值的格式为column_name=value。WHERE子句使用断言识别要修改的行,然后将更新列应用到这些行。

比如,要更新刚才插入到tab_student表中的记录,便可以使用如下的语句完成:

UPDATE tab_student SET studentName=”tom”, studentAge=”25” WHERE studentId=1;

通过以上的语句,便可以将刚才插入的主键为studentId=1的记录更新为studentName=”tom”, studentAge=”25”了。

2.2.4删除记录

使用DELETE命令可以删除表中的记录,DELETE命令的一般格式为:

DELETE FROM table_name WHERE predicate;

其中,table_name指明所要删除的记录位于哪个表中。和UPDATE命令一样,WHERE子句使用断言识别要删除的行。

比如,要删除刚才插入的记录,便可以使用如下的语句完成:


DELETE FROM tab_student WHERE studentId=1;

2.2.5查询记录

SELECT命令是查询数据库的唯一命令。SELECT命令也是SQL命令中最大、最复杂的命令。

SELECT命令的通用形式如下:

SELECT [distinct] heading

FROM tables

WHERE predicate

GROUP BY columns

HAVING predicate

ORDER BY columns

LIMIT count,offset;

其中,每个关键字(如FROM、WHERE、HAVING等)都是一个单独的子句,每个子句由关键字和跟随的参数构成。GROUP BY和HAVING一起工作可以对GROUP BY进行约束。ORDER BY使记录集在返回之前按一个或多个字段的值进行排序,可以指定排序方式为ASC(默认的升序)或DESC(降序)。此外,还可以使用LIMIT限定结果集的大小和范围,count指定返回记录的最大数量,offset指定偏移的记录数。

在上述的SELECT命令通用形式中,除了SELECT之外,所有的子句都是可选的。目前最常用的SELECT命令由三个子句组成:SELECT、FROM、WHERE,其基本语法形式如下:

SELECT heading FROM tables WHERE predicate;

比如,要查询刚才插入的记录,便可以使用如下的语句完成:


SELECT studentId, studentName, studentAge FROM tab_student WHERE studentId=1;

至此,我们介绍了SQL中最基本和最常用的CREATE、INSERT、UPDATE、DELETE和SELECT命令。当然了,这里只是对其进行了简单的介绍,有关SQLite中SQL命令的详细使用方法,可以参阅《SQLite权威指南》一书的第三章和第四章。

3.数据库操作辅助类SQLiteOpenHelper

Android提供了一个重要的类SQLiteOpenHelper,用于辅助用户对SQLite数据库进行操作。

SQLiteOpenHelper的构造函数原型如下:

public SQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version);

其中,参数context表示应用程序运行的环境,包含应用程序所需的共享资源。参数name表示Android的数据库名字。参数factory是SQLiteDatabase.CursorFactory类对象,用于存储查询Android SQLite数据库的结果集。参数version表示应用程序所用的数据库的版本,该版本并非SQLite的真正版本,而是指定应用程序中的SQLite数据库的版本,当该版本号发生变化时,将会触发SQLiteOpenHelper类中的onUpgrade()或onDowngrade()方法。

SQLiteOpenHelper类的所有方法如图1所示。

图1 SQLiteOpenHelper类的方法

其中,close()方法用于关闭SQLiteOpenHelper对象中的SQLite数据库;getReadableDatabase()方法和getWriteableDatabase()方法类似,getReadableDatabase()方法以只读状态打开SQLiteOpenHelper对象中指定的SQLite数据库,任何想要修改数据库的操作都是不允许的;getWriteableDatabase()方法也是打开数据库,但是允许数据库正常的读/写操作;在一个不存在的数据库上调用任何方法时,都会隐式的调用SQLiteOpenHelper对象的onCreate()方法;当应用程序第一次访问数据库时,则会调用onOpen()方法,但是,如果版本号发生了变化的话,则会调用onUpgrade()或onDowngrade()方法。

4.数据库类SQLiteDatabase

SQLiteDatabase类用来完成对数据库的操作任务,比如表的选择、插入、更新和删除语句等。

SQLiteDatabase类中常用的用于执行SQL语句的方法有以下一些。

(1)execSQL()方法:

public void execSQL (String sql);

public void execSQL (String sql, Object[] bindArgs);

(2)query()方法:

public Cursor query (String table, String[] columns, String selection, String[] selectionArgs, String
groupBy, String having,String orderBy, String limit);

public Cursor query (boolean distinct, String table, String[] columns, String selection, String[] selectionArgs, String
groupBy, String having, String orderBy, String limit, CancellationSignal cancellationSignal);

public Cursor query (String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String
having,String orderBy);

public Cursor query (boolean distinct, String table, String[] columns, String selection, String[] selectionArgs, String
groupBy, String having, String orderBy, String limit);

(3)queryWithFactory()方法:

public Cursor queryWithFactory (SQLiteDatabase.CursorFactory cursorFactory, boolean distinct, String table, String[]columns, String selection, String[] selectionArgs, String groupBy, String having, String
orderBy, String limit,CancellationSignal cancellationSignal);

public Cursor queryWithFactory (SQLiteDatabase.CursorFactory cursorFactory, boolean distinct, String table, String[]columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit);

(4)rawQuery()方法:

public Cursor rawQuery (String sql, String[] selectionArgs, CancellationSignal cancellationSignal);

public Cursor rawQuery (String sql, String[] selectionArgs);

(5)rawQueryWithFactory()方法:

public Cursor rawQueryWithFactory (SQLiteDatabase.CursorFactory cursorFactory, String sql, String[]
selectionArgs,String editTable);

public Cursor rawQueryWithFactory (SQLiteDatabase.CursorFactory cursorFactory, String sql, String[]
selectionArgs,String editTable, CancellationSignal cancellationSignal);

其中,execSQL()方法都有一个参数sql,这个参数是一个SQL语句。第二个参数bindArgs接收一个数组,数组中的每个成员捆绑了一个查询。execSQL()方法用于运行那些没有返回值的查询语句,比如创建、插入、更新和修改表。

query()方法和queryWithFactory()方法是在数据库中运行一些轻量级的单查询语句,参数包括table、columns、groupBy、having、orderBy、limit等SQL语句关键字。这些方法允许将SQL语句传递给相关方法,而不必直接使用SQL语句。

rawQuery()方法和rawQueryWithFactory()方法也都有一个参数sql,用于执行SQL查询语句,返回值是Cursor对象。这两个方法都有一个版本能够接收一个字符串数组selectionArgs作为参数,通过这个参数,SQLiteDatabase对象将把捆绑的SQL语句中的问号(?)用这个数组中的值代替,并按照一一对应的位置关系进行取代。

SQLiteDatabase类提供了大约50个方法,除此之外还有一些用于打开数据库的方法(如openDatabase()、openOrCreateDatabase()等),用于管理SQLite事务的方法(如beginTransaction()、endTransaction()等),用于测试数据库是否被锁住的方法(如isDbLockedByCurrentThread()、isDbLockedByOtherThread()等),以及获取数据库基本信息的方法(如getMaximumSiza()、getVersion()等)。这里就不一一介绍了,具体可以参阅SQLiteDatabase类的API帮助文档。

5.游标类Cursor

在Android中,查询数据是通过Cursor类来实现的,当我们使用SQLiteDatabase.query()或SQLiteDatabase.rawQuery()方法时,会得到一个Cursor对象,Cursor指向的就是每一条记录,它提供了很多有关查询的方法,如图2所示。
http://www.cnblogs.com/menlsh/archive/2013/04/13/3019588.html

G. vb.net 如何存储用户数据

这个你可以用 api操作ini文件来实现。ini是windows系统的配置文件。
'首先声明这两个api
Private Declare Function GetPrivateProfileInt Lib "kernel32" Alias "GetPrivateProfileIntA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal nDefault As Long, ByVal lpFileName As String) As Long
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long