问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

分全拿出来了,为什么要进行访问数据库,数据库访问有什么意义?

发布网友 发布时间:2022-04-25 08:16

我来回答

4个回答

懂视网 时间:2022-05-01 11:27

<dependency> 2 <groupId>mysql</groupId> 3 <artifactId>mysql-connector-java</artifactId> 4 <version>5.1.26</version> 5 </dependency> View Code

1.1:配置连接数据库

技术分享
1 Class.forName("com.mysql.jdbc.Driver");//加载数据库驱动
2  String url="jdbc:mysql://localhost:3306/blog";//数据连接地址
3  String username="root";//登录名
4  String password="123456";//密码
5  connection=DriverManager.getConnection(url, username, password);//获取数据库的连接
View Code

1.2:向数据库发起请求(增删改查)

1.2.1:statement

statement用于已经建立好数据库连接的基础上发送sql语句的对象,不带参数简单的sql语句

1.2.2:PreparedStatement

由于在程序中传递sql语句必须要经过预编译,包括分析,优化等,如果重复执行一条只是参数不同的sql是比较低效的,那么久可以使用preparedStatement对象对sql语句进行预编译。(推荐使用)

1.2.3:CallableStatement

这个表示处理存储过程的对象。

1.3:ResultSet的作用

这个主要是sql执行以后返回的结果集,然后通过next属性来转换相关的结果

1.4:executeUpdate()、executeQuery()、execute()三者区别

executeUpdate()主要处理增删改语句,返回受影响的行数,也可以处理创建或更新数据库、以及创建或更新表结构

executeQuery()主要是用来查询的,主要针对select开头的语句

execute()表示一个特殊的执行,主要针对返回多个结果集、多个更新计数,相对来说用的少些

粘贴一下代码

技术分享
 1 public class JDBCHelper {
 2 private Connection connection;
 3 private PreparedStatement preparedStatement;
 4 public JDBCHelper(){
 5  try {
 6  Class.forName("com.mysql.jdbc.Driver");
 7  String url="jdbc:mysql://localhost:3306/blog";
 8  String username="root";
 9  String password="123456";
 10  connection=DriverManager.getConnection(url, username, password);
 11  }
 12  catch (ClassNotFoundException e) {
 13   e.printStackTrace();
 14  } catch (SQLException e) {
 15   e.printStackTrace();
 16  }
 17  }
 18 /**
 19  * 创建数据库
 20  * sql语句
 21 */
 22 public void createDatabase(String sql)
 23  {
 24  Statement statement=null;
 25  try {
 26  statement=connection.createStatement();//主要用户不带参数的简单sql语句()执行静态SQL语句返回它生成结果
 27   statement.executeUpdate(sql);
 28  System.out.println("数据库创建成功");
 29  } catch (SQLException e) {
 30   e.printStackTrace();
 31  } 
 32  finally {
 33  if (statement!=null) {
 34   try {
 35    statement.close();
 36   } catch (SQLException e) {
 37   }
 38   statement=null;
 39   }
 40  }
 41  }
 42 /**
 43  * 增删改
 44  * @param sql
 45  * @param paramters
 46  * @return
 47  * @throws SQLException
 48 */
 49 public int update(String sql,Object... paramters) throws SQLException
 50  {
 51  try{
 52  preparedStatement =connection.prepareStatement(sql);
 53  for (int i = 0; i < paramters.length; i++) {
 54   preparedStatement.setObject(i+1, paramters[i]);
 55   }
 56  return preparedStatement.executeUpdate();
 57  }
 58  catch(SQLException e)
 59  {
 60   e.printStackTrace();
 61  }
 62  finally {
 63  if(preparedStatement!=null)
 64   {
 65   preparedStatement.close();
 66   }
 67  preparedStatement=null;
 68  }
 69  return 0;
 70  }
 71 /**
 72  * 用与查询
 73  * @param sql
 74  * @param paramters
 75  * @return
 76  * @throws SQLException
 77 */
 78 public ResultSet query(String sql,Object... paramters) throws SQLException
 79  {
 80  try{
 81  preparedStatement =connection.prepareStatement(sql);
 82  for (int i = 0; i < paramters.length; i++) {
 83   preparedStatement.setObject(i+1, paramters[i]);
 84   }
 85  return preparedStatement.executeQuery();
 86  }
 87  catch(SQLException e)
 88  {
 89   e.printStackTrace();
 90  }
 91  finally {
 92  if(preparedStatement!=null)
 93   {
 94   preparedStatement.close();
 95   }
 96  preparedStatement=null;
 97  }
 98  return null;
 99  }
100 }
JDBCHelper

1.4:数据库事务

事务的定义:访问并可能更新数据库中各种数据项的一个程序执行单元(笼统的将就是一段程序执行所有的sql要么同时成功,要么就全部失败回滚)

我们了解事务之前先看三个定义

脏读:一个事务正在修改某行数据但是并未提交,而另一个事务正好读取了这行数据,这就是脏读

不可重复读:一个事务读取了一行数据,在这个事务结束前另一个事务对这条数据进行修改,但是这种修改并没有提交数据库中,此时第一个事务再次读取这条数据时,出现了2次数据不一致这就是不可重复读

幻读:当一个事务读取满足条件的数据后,另一个事务却插入一条数据,当第一个事务再次读取时,发现多了一条数据。这就是幻读。

因为上面三种情况存在所以就出现了隔离级别,当然隔离级别越高效率会越低,下面是4中隔离级别

connection.TRANSACTION_READ_UNCOMMITTED:这种隔离级别最低三种情况都可能发生

connection.TRANSACTION_READ_COMMITTED:这种隔离级别避免脏读

connection.TRANSACTION_REPEATABLE_READ:这种隔离级别避免脏读和不可重读读

connection.TRANSACTION_SERIALIZABLE:这种隔离级别最高三种都可避免

当了解完这种情况以后我们就可开始进行事务处理,在默认的情况下是不执行事务的。

第一步是要开启事务:connection.setAutoCommit(false);//关闭自动提交功能(默认是true)

然后在设置隔离级别:connection.setTransactionIsolation(connection.TRANSACTION_REPEATABLE_READ);

ok有了上面的我们就可以进行事务了下面把代码贴出来,仅供参考

技术分享
 1 public void addUserAndRole(UserBean userbean,UserRoleBean userRoleBean) throws SQLException
 2  {
 3  connection.setAutoCommit(false);//关闭自动提交功能
 4  connection.setTransactionIsolation(connection.TRANSACTION_REPEATABLE_READ);
 5 
 6 
 7  String userSql="insert into b_user(name,password,level,des,tel)values"+
 8   "(?,?,?,?,?)";
 9  String roleSql="insert into b_user_role(userId,roleId)values(?,?)";
10  try {
11 
12  preparedStatement =connection.prepareStatement(userSql);
13  preparedStatement.setString(1, userbean.getName());
14  preparedStatement.setString(2, userbean.getPassword());
15  preparedStatement.setInt(3, userbean.getLevel());
16  preparedStatement.setString(4, userbean.getDes());
17  preparedStatement.setString(5, userbean.getTel());
18   preparedStatement.executeUpdate();
19  if (userRoleBean.getRoleId()==0) {
20   throw new Exception();
21   }
22  preparedStatement=connection.prepareStatement(roleSql);
23  preparedStatement.setInt(1, userRoleBean.getUserId());
24  preparedStatement.setInt(2, userRoleBean.getRoleId());
25   preparedStatement.execute();
26   connection.commit();
27  System.out.println("执行成功");
28  } catch (Exception e) {
29  System.out.println("执行失败");
30   connection.rollback();
31  }
32 }
Transaction 技术分享
 1 public static void main(String[] args)
 2  { 
 3  JDBCHelper jdbcHelper=new JDBCHelper();
 4  UserBean userBean=new UserBean();
 5  userBean.setName("张三");
 6  userBean.setPassword("123456");
 7  userBean.setLevel(1);
 8  userBean.setDes("...");
 9  userBean.setTel("123456");
10  
11  UserRoleBean userRoleBean=new UserRoleBean();
12  userRoleBean.setRoleId(0);
13  userRoleBean.setUserId(2);
14  
15  try {
16   jdbcHelper.addUserAndRole(userBean, userRoleBean);
17  } catch (SQLException e) {
18  // TODO Auto-generated catch block
19   e.printStackTrace();
20  }
21 }
main

经过测试发现技术分享

数据库中也不存在相应的数据。

1.5:数据库连接池

本人推荐看写的很详细http://www.cnblogs.com/xdp-gacl/p/4002804.html

 

基础知识回顾第三篇数据库访问

标签:

热心网友 时间:2022-05-01 08:35

随着数据库产品和技术的发展,数据库访问技术也从ODBC、DAO、RDO、OLE DB、ADO 和 RDS发展到今天的ADO.NET。以下内容由城市刀客整理编辑,旨在为你展示数据库访问技术的概貌。
<!--[if !supportEmptyParas]-->

ODBC<!--[endif]-->

ODBC 技术为访问不同的SQL 数据库提供了一个共同的接口。ODBC 使用 SQL 作为访问数据的标准。这一接口提供了最大限度的互操作性:一个应用程序可以通过共同的一组代码访问不同的 SQL 数据库管理系统 (DBMS)。开发人员可以添加数据库驱动程序,将应用程序与用户所选的 DBMS 联系起来。驱动程序管理器提供应用程序与数据库之间的中间链接。ODBC 接口包含一系列功能,由每个 DBMS 的驱动程序实现。当应用程序改变它的 DBMS 时,开发人员只使用新的 DBMS 驱动程序替代旧的驱动程序,并且应用程序可以无需修改代码照常运行。

<!--[if !supportEmptyParas]-->

DAO & RDO
DAO 是建立在 Microsoft Jet Microsoft Access 的数据库引擎基础之上的。Jet 是第一个连接到 Access 的面向对象的接口。使用 Access 的应用程序可以用 DAO 直接访问数据库。由于 DAO 是严格按照 Access 建模的,因此,使用 DAO 是连接 Access 数据库最快速、最有效的方法。DAO 也可以连接到非 Access 数据库,例如,SQL Server 和 Oracle。DAO 使用 ODBC,但是由于 DAO 是专门设计用来与 Jet 引擎对话的,Jet 将解释 DAO 和 ODBC 之间的调用。使用除 Access 之外的数据库时,这种额外的解释步骤导致较慢的连接速度。
<!--[if !supportEmptyParas]--> <!--[endif]-->

要克服这样的*,Microsoft 创建了 RDO。图 Application1 显示了 RDO 如何直接访问 ODBC API,而无需通过 Jet 引擎。不久之后,Microsoft 推出了 ODBCDirect,它是 DAO 的扩展,在后台使用 RDO。图 Application2 显示 ODBCDirect 如何允许现有的 DAO 应用程序访问数据库,而没有 Jet 引擎产生的性能损失。

OLE DB

OLE DB 建立于 ODBC 之上,并将此技术扩展为提供更高级数据访问接口的组件结构。此结构对企业中及 Internet 上的 SQL、非 SQL 和非结构化数据源提供一致的访问。(实际上,在访问基于 SQL 的数据时,OLE DB 仍使用 ODBC,因为对于 SQL 它是最优结构。)

OLE DB 由三个组件构成:数据使用者(例如,一个应用程序);包含并公开数据的数据提供程序以及处理并传输数据的服务组件(例如,查询处理器、游标引擎)。OLE DB 是一个针对 SQL 数据源和非 SQL 数据源(例如,邮件和目录)进行操作的 API。

OLE DB 为 C 和 C++ 程序员及使用其他包含 C 样式函数调用语言的程序员提供绑定。有一些语言(例如 VB 和 VBScript)不提供指针数据类型(地址变量)。因此,这些语言不能使用 C 样式绑定,而且不能直接调用 OLE DB。<!--[if !supportEmptyParas]--> <!--[endif]-->

在此基础上,Microsoft 推出了另一个数据访问对象模型:ADO。ADO 采用基于 DAO 和 RDO 的对象,并提供比 DAO 和 RDO 更简单的对象模型(尽管会产生一些冗余的功能,如现在进行一项操作时可以用不止一种方法)。ADO 中的对象层次结构比 DAO 中的更平缓。ADO 包含一些简化对数据存储区数据的访问任务的内置对象。

<!--[if !supportEmptyParas]-->

下图显示了应用程序连接到数据库可采取的许多途径。例如,VB 程序员可以使用 ADO 将应用程序连接到 OLE DB 提供程序。如果数据库不支持 OLE DB,应用程序可以通过 ODBC 连接。Visual C++ (VC++) 程序员可以使用 ADO 或直接通过 OLE DB 连接。

让我们看一个简单示例,它显示 ADO 是如何运行的。清单 1 显示可如何使用典型的记录集对象--ADO 中的核心对象。记录集对象表示一系列记录(很像一个表),并支持游标类型,例如,adOpenForwardOnly、adOpenKeyset、adOpenDynamic 和 adOpenStatic。游标可以在服务器端(默认情况下),也可在客户端。<!--[if !supportEmptyParas]--> <!--[endif]-->

清单 1

<!--#include file="adovbs.inc"-->
<%

Dim connStr, rs
connStr = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=pubs;Data Source=localhost"
SET rs= Server.CreateObject("ADODB.Recordset")
<!--[if !supportEmptyParas]-->rs.Open "Authors", connStr, adOpenForwardOnly, adLockOptimistic, adCmdTable
WHILE NOT rs.EOF
response.write rs("au_fname") & "," & rs("au_lname") & "<br>"
rs.moveNext
END
SET rs=nothing
%>

<!--[if !supportEmptyParas]-->

要访问一条记录,ADO 需要按顺序扫描记录集。要访问多个表,需要执行 JOIN 查询,并将返回的结果作为记录集。虽然记录集对象支持断开的数据访问,ADO 还是主要为连接的数据访问而设计。这种连接的访问模式占用服务器端的重要资源。另外,要传输记录集,必须使用 COM 封送处理。COM 封送处理是数据类型转换过程,这种转换占用额外的系统资源。<!--[if !supportEmptyParas]--> <!--[endif]-->

从 ADO 2.1 开始,Microsoft 将 XML 支持添加到 ADO 对象模型,这样就可将记录集保存为 XML 文档。然而,直到 ADO 2.5 出现,ADO 2.1 中 XML 支持的一些*(例如,分层记录集对象的保持)才被取消。虽然 ADO 可以将 XML 文档读入记录集,但它只能读取名为高级数据表图 (Advanced Data TableGram, ADTG) 的专用架构。<!--[if !supportEmptyParas]--> <!--[endif]-->

Microsoft 希望拥有断开的数据访问机制,它扩展了 ADO 并推出远程数据服务 (RDS)。RDS 是按照 ADO 建模的,无需实时连接就可以使记录集传输到客户端(例如,Web 浏览器)。然而,如同 ADO 一样,RDS 使用 COM 封送处理将记录集从服务器传输到客户端。

ADO.NET

在开始设计 .NET 框架时,Microsoft 就以此为契机重新设计了数据访问模型。Microsoft 没有进一步扩展 ADO,而是决定设计一个新的数据访问框架,但保留了缩写词。Microsoft 根据其成功的 ADO 对象模型经验设计了 ADO.NET。但 ADO.NET 满足了 ADO 无法满足的三个重要需求:提供了断开的数据访问模型,这对 Web 环境至关重要;提供了与 XML 的紧密集成;还提供了与 .NET 框架的无缝集成(例如,兼容基类库类型系统)。

下图显示了 ADO.NET 的结构。但缺少了能够在 ADO 中执行诸多功能的记录集对象。ADO.NET 具有几个专用对象以执行特定任务,用于代替记录集对象。表 1 描述了其中的三个专用对象:DataAdapter、DataReader 和 Dataset。

表一:
DataAdapter The DataAdapter object provides a bridge between the database and a DataSet. The key advantage of DataAdapter is that it can work with any data source. The data source might be a database or it might be an XML document.

//DataAdapter提供了一个数据库与DataSet之间的桥梁。它最大的优点在于能工作于不同的数据源,这些数据源可以是数据库,也可以是 XML文件。

DataReader The DataReader object provides an efficient way to retrieve records on the server side. DataReader is a connected, read-only, and forward-only data-access mode. This object is useful for Web applications, which use DataReader to display records on Web pages.

//DataReader对象提供了从服务器端高效获取数据的途径,它是在只读和只进的连接模式下从数据源读取数据的,这个对象对通过网页展示数据记录的Web应用程序开发很有用。

DataSet The DataSet object provides disconnected copies of records from a database. The DataSet object stores records from a table (or multiple tables) in memory without holding a connection to the server. When in memory, DataSet is a binary object. When the DataSet is remoted, transferred, or serialized, it''s represented as a DiffGram—an XML format. Because XML is plaintext, records can be exchanged easily over the Web, bypassing firewall restrictions(*性). DataSet also contains various objects—such as constraints(压缩), relationships, and views—that let you manipulate(操作) tables on the client side instead of working through one Recordset in ADO.

//DataSet对象在断开数据库连接的情况下提供了一个数据库内容的拷贝,它把记录从表中取出,以二进制对象的形式存放在内存中。当Dataset被调用的时候,它表现为DiffGram--一种XML格式。

热心网友 时间:2022-05-01 09:53

数据库是装数据的仓库
访问的意思
有时你要往里存东西(insert)
有时你要往出取东西(select)

有时你要点库(select)
有时你要清库(delete)

热心网友 时间:2022-05-01 11:27

对数据库进行增删改等操作!
为什么要使用数据库?

2、减少数据的冗余度 同文件系统相比,由于数据库实现了数据共享,从而避免了用户各自建立应用文件。减少了大量重复数据,减少了数据冗余,维护了数据的一致性。3、数据的独立性 数据的独立性包括逻辑独立性(数据库中数据库的逻辑结构和应用程序相互独立)和物理独立性(数据物理结构的变化不影响数据的逻辑...

区块链革命之路是什么?

2.无法分配,像比特币,早期的那几个人拿掉了它的很多的份额,所以将来怎么分配也是一个问题,大家也没分清楚,以至于它很难作为一个货币。因为它如果真的作为一个大家都使用的货币,也就相当于前几个人把全世界的很大一部分财产都拿走了。 3.交易成本高。打个比方,在美国星巴克喝一杯咖啡,平均是2.5美元。你平时在...

数据库一般有什么用? 怎么可以 让许多电脑 调用一个数据库?

我简单的说一下吧,数据库是为了存放数据的!万物皆数据,所以可以理解为一切皆为数据库,只是考虑的范围大小不同而已!为了方便理解,就不用束语约束了 1、太阳系是个数据库:数据库中存放的数据是水星,金星,地球等,2、地球是个数据库:数据有亚洲,欧洲等 3、电脑的硬盘也是数据库:硬盘可以存放...

...要用的时候再拿出来,不知道何时需要用数据库,何时不需

那就是当你有很多数据的时候,为了方便查找和统计,以及保证数据不会丢失的时候,就需要用到数据库了。拿上一条回答“一颗程序猿o_0”举的例子说明吧。当你手上只有十块钱的时候,你可能不会需要想到要存银行对吧,但是当你有几千块甚至几千万的时候,你就会想着放银行了,一方面能够很快的知道自己总...

学习数据库的意义

数据库,顾名思义,是存入数据的仓库。只不过这个仓库是在计算机存储设备上的,而且数据是按一定格式存放的。当人们收集了大量的数据后,应该把它们保存起来进入近一步的处理,进一步的抽取有用的信息。当年人们把数据存放在文件柜中,可现在随着社会的发展,数据量急剧增长,现在人们就借助计算机和数据库...

标题 配置两台数据库服务器,有什么好处?又会带来什么问题?

安全性:分开放置,可以提高数据的安全性,即使网站不幸有漏洞,被人拿站,但是不会影响数据的安全性。(网站访问数据库的部分进行加密,切用户权限设置合理。sa什么的话,安全就浮云了。)效率:数据库用于数据访问(废话),对磁盘读写、内存要求更高,如果是大型网站的话,数据库当然要一个专用的数据...

spring mvc里面,为什么要单独出来一个service层调用dao再传给controller...

因为访问数据库就那么几个需求.service层又叫做业务层,本来组织sql之类的都是在这层写,但是很多人会写在dao层,其实是不对的,但是也没人会在意,而且直接写在dao层会看起来简单,实则从长久看会麻烦,但是谁会在意呢,这只是个注重效率的时代,service层的目的是重用,就比如你要分页查询,就会分为3个方法,...

数据库具体是指哪种数据?具体用途是什么???

数据库是以某种文件结构存储的一系列信息表,这种文件结构使您能够访问这些表、选择表中的列、对表进行排序以及根据各种标准选择行。数据库通常有多个 索引与这些表中的许多列相关联,所以我们能尽可能快地访问这些表。 以员工记录为例,您可以设想一个含有员工姓名、地址、工资、扣税以及津贴等内容的表。让我们考虑...

"数据库大揭秘:从简介到工作原理,全面解析分类与应用"

数据库,这个数据管理的基石,是信息时代的数据仓库,通过其高效组织和处理能力,极大地推动了信息化进程。它主要分为以下几个方面:简介与功能:数据库是一种数据管理技术,通过结构化的表格形式,存储和检索海量信息。就像一本有序的电话簿,方便我们查找和管理数据。日常生活中的应用:无论是手机解锁的...

数据仓库与数据库有什么联系

例如,称数据库是一个“记录保存系统”(该定义强调了数据库是若干记录的集合)。又如称数据库是“人们为解决特定的任务,以一定的组织方式存储在一起的相关的数据的集合”(该定义侧重于数据的组织)。更有甚者称数据库是“一个数据仓库”。当然,这种说法虽然形象,但并不严谨。 严格地说,数据库是“按照数据结构来...

声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
形容呈现出的用"立"组成的词语 青岛市有哪些已列入国家级非遗名录的项目? ...就是黑屏放在黑暗中屏幕打开是墨绿接近黑灰的 童皓钥是适合男孩名还是女孩 神武 这个游戏 玩一天2小时左右 能不能玩好 校友会2024西安市高职院校排名,西安航空职业技术学院前三 去电影院看过《加勒比3》的进来! 校友会2024中国大学机械工程学科排名,清华大学、华中科技大学第一_百度... 2024西安公办大学有哪些? 2024年陕西排名前三的公办机械学校名单 几个软件算孕期,预产期都不同 窜和蹿的区分,速度拜托了 在访问范围说明符中,什么的含义是私有的 预产期计算器准确吗?手机下载的app里面计算预产期,都不知道准不准?_百... 爱的妇产科里面朱丹用的什么软件计算的预产期? 窜蹿如何区分使用呢?组词怎么样呢!? 求名侦探柯南TV版所有的主题曲的曲名,和奥特曼所有主题曲曲名。 好吃不好洗,车厘子的紫色汁液弄到衣服上怎么去除? 用什么办法能准确计算出预产期? 车厘子的汁在衣服上洗不掉 JAVA访问修饰符的含义? only you 的视频在哪下[高清晰,不卡,下栽速度快]?急需~火速~重金悬赏~ 衣服上时间长了的水果渍怎么除去? 所有中国播过的韩剧 有没有去水果渍或者水彩笔的好方法 百度推广的关键词设置的访问URL是什么意思? 娱乐圈无人敢惹大佬,洪金宝排第二,最后一位45秒KO拳王,他是谁? 深入访问的意义和目的 简述访问法的含义,它的具体表现形式有哪些? 在娱乐节目中经常说的KO和PK是什么意思? 访问深度和访问页数有什么区别_网站分析指标概念及意义 预产期计算器? 有没有谁的预产期在这软件给你算好了,但有没有和这上面出生时间一样的 怎么样把视频下载到手机中?大神们帮帮忙 求 预产期 百度云免费在线观看资源 微微一笑很倾城里ko和郝眉是什么关系 微单市场是不是索尼一家独大了 软件和医生算得预产期不一致,哪个更准 为什么一些软件和医生算的预产期不一样? 微单市场是不是索尼一家独大了? - 信息提示 现在微单相机市场主流的 APS-C 和 M43,到底孰优孰劣? 我想查从今天起往后280天是几号星期几,用什么软件能实现?? 播放器的问题~ 请问预产期怎么算的?为什么每个软件算的时间都不一样? 现在微单相机哪个性价比高? KO-STAR GG 注册过商标吗?还有哪些分类可以注册? 目前市场上微单相机哪个品牌哪一款最好? 微单已经把卡片机取代了吗?有什么可推荐的? 上海名下无房产登记证明
  • 焦点

最新推荐

猜你喜欢

热门推荐