我知道如何获取标准表中列的类型(例如 SHOW FIELDS FROM ...),但是有什么方法可以从自定义表中获取返回数据的类型使用各种列选择和不同表的连接进行查询(例如 SELECT table1.var1,table2.var2 FROM table1 JOIN table2)?
最佳答案
MySQL 站点上标题为 Developing Database Applications Using MySQL Connector/C++ 的文章包含 the following subsection :
Accessing Result Set Metadata
When the SQL statement being processed is unknown until runtime, the
ResultSetMetaDatainterface can be used to determine the methods to be used to retrieve the data from the result set.ResultSetMetaDataprovides information about the structure of a given result set. Data provided by theResultSetMetaDataobject includes the number of columns in the result set, the names or labels and the types of those columns along with the attributes of each column and the names of the table, schema and the catalog the designated column's table belongs to.When
getMetaData()is called on aResultSetobject, it returns aResultSetMetaDataobject describing the columns of thatResultSetobject.Signatures of some of the relevant methods are shown below. For the complete list of methods supported by
ResultSetMetaDatainterface, check the resultset_metadata.h header in your Connector/C++ installation./* resultset.h */ ResultSetMetaData * ResultSet::getMetaData() const; /* prepared_statement.h */ ResultSetMetaData * PreparedStatement::getMetaData() const; /* resultset_metadata.h */ std::string ResultSetMetaData::getCatalogName(unsigned int columnIndex); std::string ResultSetMetaData::getSchemaName(unsigned int columnIndex); std::string ResultSetMetaData::getTableName(unsigned int columnIndex); unsigned int ResultSetMetaData::getColumnCount(); unsigned int ResultSetMetaData::getColumnDisplaySize(unsigned int columnIndex); std::string ResultSetMetaData::getColumnLabel(unsigned int columnIndex); std::string ResultSetMetaData::getColumnName(unsigned int columnIndex); int ResultSetMetaData::getColumnType(unsigned int columnIndex); std::string ResultSetMetaData::getColumnTypeName(unsigned int columnIndex); int ResultSetMetaData::isNullable(unsigned int columnIndex); bool ResultSetMetaData::isReadOnly(unsigned int columnIndex); bool ResultSetMetaData::isWritable(unsigned int columnIndex);The following code fragment demonstrates how to retrieve all the column names or labels, their data types and the sizes along with the table name and the schema names to which they belong.
ResultSet *rs; ResultSetMetaData *res_meta; res_meta = rs -> getMetaData(); int numcols = res_meta -> getColumnCount(); cout << "\nNumber of columns in the result set = " << numcols << endl; cout.width(20); cout << "Column Name/Label"; cout.width(20); cout << "Column Type"; cout.width(20); cout << "Column Size" << endl; for (int i = 0; i < numcols; ++i) { cout.width(20); cout << res_meta -> getColumnLabel (i+1); cout.width(20); cout << res_meta -> getColumnTypeName (i+1); cout.width(20); cout << res_meta -> getColumnDisplaySize (i+1) << endl; } cout << "\nColumn \"" << res_meta -> getColumnLabel(1); cout << "\" belongs to the Table: \"" << res_meta -> getTableName(1); cout << "\" which belongs to the Schema: \"" << res_meta -> getSchemaName(1) << "\"" << endl; //delete res_meta; delete rs;From release 1.0.5 onwards, the connector takes care of cleaning the
ResultSetMetaDataobjects automatically when they go out of scope. This will relieve the clients from deleting theResultSetMetaDataobjects explicitly. Due to the implicit destruction of the metadata objects, clients won't be able to delete theResultSetMetaDataobjects directly. Any attempt to delete theResultSetMetaDataobject results in compile time error. Similarly usingauto_ptrtemplate class to instantiate an object of typeResultSetMetaDataresults in compile time error. For example, compilation of the above code fails with Connector/C++ 1.0.5 and later versions, when the statementdelete res_meta;is uncommented.Prepared Statements and the Result Set Metadata
PreparedStatement::getMetaData()retrieves aResultSetMetaDataobject that contains information about the columns of theResultSetobject, which will be returned when thePreparedStatementobject is executed.Because a
PreparedStatementobject is precompiled, it is possible to know about theResultSetobject that it will return without having to execute it. Consequently, it is possible to invoke the methodgetMetaDataon aPreparedStatementobject rather than waiting to execute it and then invoking theResultSet::getMetaDatamethod on theResultSetobject that is returned.The method
PreparedStatement::getMetaDatais supported only in Connector/C++ 1.0.4 and later versions.
关于c++ - 获取MySQL查询返回数据的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13700751/
我正在用Ruby编写一个简单的程序来检查域列表是否被占用。基本上它循环遍历列表,并使用以下函数进行检查。require'rubygems'require'whois'defcheck_domain(domain)c=Whois::Client.newc.query("google.com").available?end程序不断出错(即使我在google.com中进行硬编码),并打印以下消息。鉴于该程序非常简单,我已经没有什么想法了-有什么建议吗?/Library/Ruby/Gems/1.8/gems/whois-2.0.2/lib/whois/server/adapters/base.
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
为什么4.1%2返回0.0999999999999996?但是4.2%2==0.2。 最佳答案 参见此处:WhatEveryProgrammerShouldKnowAboutFloating-PointArithmetic实数是无限的。计算机使用的位数有限(今天是32位、64位)。因此计算机进行的浮点运算不能代表所有的实数。0.1是这些数字之一。请注意,这不是与Ruby相关的问题,而是与所有编程语言相关的问题,因为它来自计算机表示实数的方式。 关于ruby-为什么4.1%2使用Ruby返
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
我可以得到Infinity和NaNn=9.0/0#=>Infinityn.class#=>Floatm=0/0.0#=>NaNm.class#=>Float但是当我想直接访问Infinity或NaN时:Infinity#=>uninitializedconstantInfinity(NameError)NaN#=>uninitializedconstantNaN(NameError)什么是Infinity和NaN?它们是对象、关键字还是其他东西? 最佳答案 您看到打印为Infinity和NaN的只是Float类的两个特殊实例的字符串
我不确定传递给方法的对象的类型是否正确。我可能会将一个字符串传递给一个只能处理整数的函数。某种运行时保证怎么样?我看不到比以下更好的选择:defsomeFixNumMangler(input)raise"wrongtype:integerrequired"unlessinput.class==FixNumother_stuffend有更好的选择吗? 最佳答案 使用Kernel#Integer在使用之前转换输入的方法。当无法以任何合理的方式将输入转换为整数时,它将引发ArgumentError。defmy_method(number)
我知道我可以指定某些字段来使用pluck查询数据库。ids=Item.where('due_at但是我想知道,是否有一种方法可以指定我想避免从数据库查询的某些字段。某种反拔?posts=Post.where(published:true).do_not_lookup(:enormous_field) 最佳答案 Model#attribute_names应该返回列/属性数组。您可以排除其中一些并传递给pluck或select方法。像这样:posts=Post.where(published:true).select(Post.attr
我有一个包含多个键的散列和一个字符串,该字符串不包含散列中的任何键或包含一个键。h={"k1"=>"v1","k2"=>"v2","k3"=>"v3"}s="thisisanexamplestringthatmightoccurwithakeysomewhereinthestringk1(withspecialcharacterslike(^&*$#@!^&&*))"检查s是否包含h中的任何键的最佳方法是什么,如果包含,则返回它包含的键的值?例如,对于上面的h和s的例子,输出应该是v1。编辑:只有字符串是用户定义的。哈希将始终相同。 最佳答案
有没有办法在这个简单的get方法中添加超时选项?我正在使用法拉第3.3。Faraday.get(url)四处寻找,我只能先发起连接后应用超时选项,然后应用超时选项。或者有什么简单的方法?这就是我现在正在做的:conn=Faraday.newresponse=conn.getdo|req|req.urlurlreq.options.timeout=2#2secondsend 最佳答案 试试这个:conn=Faraday.newdo|conn|conn.options.timeout=20endresponse=conn.get(url
有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳