.jpg)
一、外蒙古国用什么钱!物价如何
在那里待两个月的话已经到10月份了,很冷了,厚衣服要带,治疗感冒用的感冒药,那边的药也有卖的,不过你看不懂,乌兰巴托有几家中国人开的医院,如果吃药不管用或想好快点就直接去,费用也不贵,好像在国航售票处附近就有一家,到时候自己去找,尽量少接触外国人,这些人也不知道从什么地方游历到蒙古的,一定要小心。外蒙古使用蒙币,可以直接去乌兰巴托的外币兑换市场兑换,好像在台湾会馆附近,如果自己不方便就请蒙古朋友去换或者直接跟他们换,反正人民币对他们来说总是用的着的。比例也就是100人民币换21200图了吧,注意晚上付钱的时候看清楚2万面值的和5000面值的钱,颜色相近,不要给错了,日常吃饭购物的话就换个20万图吧,够用了,再多钱包就放不下了,先体验一把富翁的感觉,几万几万的挥霍。
至于生活用品就大可不必带了,全部在那边大市场买,质量不是很好但便宜,很多中国货,不怕不认识,想买好点的去百货大楼,成吉思汗超市,有很多外国货,不过不一定看得懂。
如果想上网的话,要看你去的地方,如果是乌兰巴托的话,电话拨号上网、宽带都有,前提是你要有一部座机,如果是旅馆,会很贵的,拨号上网的话是买卡,电话费和上网费分开算,宽带的话不影响打电话,没有电话费,但办理比较麻烦,还有你可以去网吧,那边的网吧也很多,费用大概折合人民币2元到3元,麻烦的是有的网吧没有QQ或者中文系统,去之前先打听清楚。还有一种是无线上网,在MOBICOM那里就有一家,费用比较贵,好处是不用受限制,只要是市区内都可以,好像是PCMCIA卡的,聊天时间不长的话或者你可以办理MOBICOM的GPRS。
还有,去那边不是去玩的就是去挣钱,安全是第一位,一定要保持低调,和国内不一样,有时偶尔会碰到酒鬼什么的,不要跟他吵,快速离开最好,到任何公共场合讲话不要大声,尤其是讲电话的时候,如果自己的习惯很大声就到人少的地方,或回家后再说。
去那边不用办理国际漫游,太贵没什么用,去的时候带个双卡手机,到那边就买张MOBICOM的卡,立即告诉家里人号码,充点钱在那边联系或接电话,打电话就买那种IP卡,很便宜,但条件是要有座机,而且座机是会产生费用的,如果你有免费电话的话,IP电话费是很便宜的,可以聊个半个小时。
好了,说了那么多废话,还是祝你旅途愉快,多去城市里转转,去牧区的话估计时间上有些迟了,一路顺风!!
二、什么牌子的木门好呢以下10大牌子任您挑选
门是保障我们人身财产安全的第一道防线,它的种类繁多,随着人们生活品味的提高,木门是人们装修门窗时的首选,因为它不仅看起来美观大方,而且还比较实用。但是市面上木门的品牌众多,哪些品牌的木门值得信赖呢?下面我来介绍几款业内口碑较不错的牌子,供大家作为参考。
木门十大品牌——欧派
江山欧派门业有限公司成立于2004年,位于“中国木门之都”——中国江山,是一家集生产、经营、研发、服务于一体的专业木门制造创新科技企业。公司占地面积500亩,员工2500余人,自有两个制造基地,制造基地拥有当今国际一流的高自动化生产设备、检验仪器及标准化大型厂房。公司专注于创新,专精于木门,主导产品是原木门、实木复合门、EPC生态门、钛铝合金门等多元产品,引领家居消费的时尚风向,各种木门消费需求在欧派均能得到满足。
木门十大品牌——美心
重庆美心家美木业有限公司是美心集团旗下集木材加工、销售,木制门窗、家具、工艺品及配套生产、销售和货物进出口为一体的大型企业,公司立足于木门、木制工艺品、木制家具生产与销售,发展家装木制产品“一站式”服务,经过多年的发展与积淀,公司被誉为中国木材流通协会木门专业委员会的“副会长单位”,中国木门行业“最具影响力品牌”企业,重庆木门行业协会执行会长单位,全国木门30强企业,中国《木质门》行业标准起草单位,首批授权使用“中国绿色材料标志”的木门企业,还通过了ISO9001:2008质量管理体系、ISO14001:2004环境管理体系和CTC产品质量认证。
木门十大品牌——星星
重庆星星套装门有限责任公司,位于刘伯承元帅的故乡——开县。公司占地面积800亩,主要产品是星星套装门,年生产能力120万套。星星套装门以竹代木为主要门材原料,2006年公司被中国木门专业委员会确认为“全国最大的室内装饰套装门生产企业”,并先后荣获“国家发明金奖”“泰国博览会金奖”“专利成就展金奖”“竹产品金奖”“中国居室门设计金奖”“中国优质产品金奖”等十四项大奖,产品畅销全国31个省市,并出口到爱尔兰、罗马尼亚、阿联酋、墨西哥、哈萨克斯坦、俄罗斯等十多个国家和地区。
木门十大品牌——王牌
浙江王牌门业有限公司位于中国建材之乡——浙江省江山市,公司自成立以来一直致力于各种室内门的生产和开发,先后引进美国、日本和韩国的先进生产线提高生产效率和生产质量,现已发展成为拥有五百多技术和办公人员的实力雄厚的领军企业。目前公司主要产品有:PVC免漆门、实木贴皮烤漆门、MDF模压门等,产品畅销中东、欧美、东南亚、非洲、北美等许多国家。
木门十大品牌——展志天华
展志天华是天华木业集团(香港)有限公司旗下品牌,天华木业集团是引领中国家居制造消费潮流的现代化企业,携19年精工制造木业产品经验,是目前国内唯一木门、定制衣柜产品多线生产的大型综合木业企业。集团全面引进德国、日本等国际先进生产设备,技术力量雄厚,配套设施完善。全面采用欧洲领先的生产工艺及检验标准,融汇中外家居文化和人机工学设计精髓,确保为消费者提供彰显个性、国际品质、绿色环保的产品。
木门十大品牌——开洋
开洋门业2001年成立于上海,总部设在上海,并于2007年在峡口工业园区建立占地面积70000平方米,厂区面积60000多平方米的大型木门生产基地,总投资约1.5亿元人民币,是一家集产品研发、生产、销售与服务为一体的木门现代化企业。产品为原木门、实木复合门、新型模压门、树脂漆门、PVC免漆门、橱柜门。公司2001年开始在红星美凯龙设立自营旗舰专卖店,并在全国已建立200多家开洋专卖店。
木门十大品牌——久聚
久聚木饰是一家生产及销售为一体的合资企业,在10余年的企业发展中,久聚秉承“以质量求生存,以信誉求发展”不断开拓,精益求精。公司集纳专业技术人员和高级技师生产和安装,让消费者买的放心,用的舒心。产品以中高档为标准,承接工程遍及各省市的大型酒店、商务楼、别墅、寓所。
木门十大品牌——紫微
上海紫微门业有限公司位于上海闵行区浦星公路1281号,厂房面积三千多平方米,是一家集研究、开发、销售、服务于一体的专业化生产套装门的企业,公司主要生产欧式、北美式、混水模压门、清水复合工艺门,从事木门加工十几年,经验丰富。
木门十大品牌——金美森
金美森门业有限公司是一家集研发、设计、制造、销售和服务为一体的专业强化木门、免漆套装门和三聚氰胺门的强化木门生产企业,公司地处“中国门都”浙江永康市,占地面积一万余平方米。“金美森”牌强化实木复合门绿色环保,严格按照ISO9001国际质量管理体系生产,门板面层采用优质原料(三聚氰胺)和先进工艺,高温、高模压而成,木纹清晰、自然、逼真,深受消费者喜爱。
木门十大品牌——康辉
浙江康辉木业有限公司是中国专业生产实木地板、实木复合地板、强化木地板、实木木门、复合木门、实木楼梯等的大型企业,公司创建于1995年,通过15年的发展,以生产、研发、销售实木地板、实木复合地板、生态地板、强化地板、木门、楼梯等为主营业务,公司旗下拥有康辉地板、康辉世家木门、康辉世家楼梯品牌产品,市场占有率、品牌美誉度、知名度在同行业中均名列前茅。
以上就是关于木门品牌的简单介绍,相信大家在阅读后有了一定的了解,木门是用来保障我们的安全,所以它的质量绝不容出现任何差错,那么我建议大家尽量选择知名品牌的木门,大家可以结合参考上文提到品牌哦,希望对您有所帮助。
三、什么是数据库
什么是数据库?
数据库是以某种文件结构存储的一系列信息表,这种文件结构使您能够访问这些表、选择表中的列、对表进行排序以及根据各种标准选择行。数据库通常有多个索引与这些表中的许多列相关联,所以我们能尽可能快地访问这些表。
以员工记录为例,您可以设想一个含有员工姓名、地址、工资、扣税以及津贴等内容的表。让我们考虑一下这些内容可能如何组织在一起。您可以设想一个表包含员工姓名、地址和电话号码。您希望保存的其它信息可能包括工资、工资范围、上次加薪时间、下次加薪时间、员工业绩评定等内容。
这些内容是否应保存在一个表格中?几乎可以肯定不应该如此。不同类别的员工的工资范围可能没有区别;这样,您可以仅将员工类型储存在员工记录表中,而将工资范围储存在另一个表中,通过类型编号与这个表关联。考虑以下情况:
Key Lastname SalaryType SalaryType Min Max
1 Adams 2 1 30000 45000
2 Johnson 1 2 45000 60000
3 Smyth 3 3 60000 75000
4 Tully 1
5 Wolff 2
SalaryType列中的数据引用第二个表。我们可以想象出许多种这样的表,如用于存储居住城市和每个城市的税值、健康计划扣除金额等的表。每个表都有一个主键列(如上面两个表中最左边的列)和若干数据列。在数据库中建立表格既是一门艺术,也是一门科学。这些表的结构由它们的范式指出。我们通常说表属于1NF、2NF或 3NF。
第一范式:表中的每个表元应该只有一个值(永远不可能是一个数组)。(1NF)
第二范式:满足 1NF,并且每一个非主键列完全依赖于主键列。这表示主键和该行中的剩余表元之间是 1对 1的关系。(2NF)
第三范式:满足 2NF,并且所有非主键列是互相独立的。任何一个数据列中包含的值都不能从其他列的数据计算得到。(3NF)
现在,几乎所有的数据库都是基于“第三范式(3NF)”创建的。这意味着通常都有相当多的表,每个表中的信息列都相对较少。
从数据库中获取数据
假设我们希望生成一个包含员工及其工资范围的表,在我们设计的一个练习中将使用这个表。这个表格不是直接存在在数据库中,但可以通过向数据库发出一个查询来构建它。我们希望得到如下所示的一个表:
Name Min Max
Tully$30,000.00$45,000.00
Johnson$30,000.00$45,000.00
Wolff$45,000.00$60,000.00
Adams$45,000.00$60,000.00
Smyth$60,000.00$75,000.00
我们发现,获得这些表的查询形式如下所示
SELECT DISTINCTROW Employees.Name, SalaryRanges.Min,
SalaryRanges.Max FROM Employees INNER JOIN SalaryRanges ON Employees.SalaryKey= SalaryRanges.SalaryKey
ORDER BY SalaryRanges.Min;
这种语言称为结构化查询语言,即 SQL,而且它是几乎目前所有数据库都可以使用的一种语言。SQL-92标准被认为是一种基础标准,而且已更新多次。
数据库的种类
PC上的数据库,如 dBase、Borland Paradox、Microsoft Access和 FoxBase。
数据库服务器:IBM DB/2、Microsoft SQL Server、 Oracle、Sybase、SQLBase和 XDB。
所有这些数据库产品都支持多种相对类似的 SQL方言,因此,所有数据库最初看起来好象可以互换。每种数据库都有不同的性能特征,而且每一种都有不同的用户界面和编程接口。
ODBC
如果我们能够以某种方式编写不依赖于特定厂商的数据库的代码,并且能够不改变自己的调用程序即可从这些数据库中得到相同的结果,那将是一件很好的事。如果我们可以仅为所有这些数据库编写一些封装,使它们具有相似的编程接口,这种对数据库编程独立于供应商的特性将很容易实现。
什么是 JDBC?
JDBC是对 ODBC API进行的一种面向对象的封装和重新设计,它易于学习和使用,并且它真正能够使您编写不依赖厂商的代码,用以查询和操纵数据库。尽管它与所有 Java API一样,都是面向对象的,但它并不是很高级别的对象集.
除 Microsoft之外,多数厂商都采用了 JDBC,并为其数据库提供了 JDBC驱动程序;这使您可轻松地真正编写几乎完全不依赖数据库的代码。另外,JavaSoft和 Intersolv已开发了一种称为 JDBC-ODBC Bridge的产品,可使您连接还没有直接的 JDBC驱动程序的数据库。支持 JDBC的所有数据库必须至少可以支持 SQL-92标准。这在很大程度上实现了跨数据库和平台的可移植性。
安装和使用 JDBC
JDBC的类都被归到 java.sql包中,在安装 Java JDK 1.4时会自动安装。然而,如果您想使用 JDBC-ODBC桥。JDBC-ODBC驱动程序可从 Sun的 Java网站()轻松地找到并下载。在您扩充并安装了这个驱动程序后,必须执行下列步骤:
将\jdbc-odbc\classes;路径添加到您的 PATH环境变量中。
将\jdbc-odbc\classes;路径添加到您的 CLASSPATH环境变量中。
JDBC驱动程序的类型
Java程序连接数据库的方法实际上有四种:
1. JDBC-ODBC桥和 ODBC驱动程序--在这种方式下,这是一个本地解决方案,因为 ODBC驱动程序和桥代码必须出现在用户的每台机器中。从根本上说这是一个临时解决方案。
2.本机代码和 Java驱动程序--它用另一个本地解决方案(该平台上的 Java可调用的本机代码)取代 ODBC和 JDBC-ODBC桥。
3. JDBC网络的纯 Java驱动程序--由 Java驱动程序翻译的 JDBC形成传送给服务器的独立协议。然后,服务器可连接任何数量的数据库。这种方法使您可能从客户机 Applet中调用服务器,并将结果返回到您的 Applet。在这种情况下,中间件软件提供商可提供服务器。
4.本机协议 Java驱动程序-- Java驱动程序直接转换为该数据库的协议并进行调用。这种方法也可以通过网络使用,而且可以在 Web浏览器的 Applet中显示结果。在这种情况下,每个数据库厂商将提供驱动程序。
如果您希望编写代码来处理 PC客户机数据库,如 dBase、Foxbase或 Access,则您可能会使用第一种方法,并且拥有用户机器上的所有代码。更大的客户机-服务器数据库产品(如 IBM的 DB2)已提供了第 3级别的驱动程序。
两层模型和三层模型
当数据库和查询它的应用程序在同一台机器上,而且没有服务器代码的干预时,我们将生成的程序称为两层模型。一层是应用程序,而另一层是数据库。在 JDBC-ODBC桥系统中通常是这种情况。
当一个应用程序或 applet调用服务器,服务器再去调用数据库时,我们称其为三层模型。当您调用称为“服务器”的程序时通常是这种情况。
编写 JDBC代码访问数据库
用 ODBC注册您的数据库
连接数据库
所有与数据库有关的对象和方法都在 java.sql包中,因此在使用 JDBC的程序中必须加入"import java.sql.*"。 JDBC要连接 ODBC数据库,您必须首先加载 JDBC-ODBC桥驱动程序
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
该语句加载驱动程序,并创建该类的一个实例。然后,要连接一个特定的数据库,您必须创建 Connect类的一个实例,并使用 URL语法连接数据库。
String url="jdbc:odbc:Northwind";
Connection con= DriverManager.getConnection(url);
请注意,您使用的数据库名是您在 ODBC设置面板中输入的“数据源”名称。
URL语法可能因数据库类型的不同而变化极大。
jdbc:subprotocol:subname
第一组字符代表连接协议,并且始终是 jdbc。还可能有一个子协议,在此处,子协议被指定为 odbc。它规定了一类数据库的连通性机制。如果您要连接其它机器上的数据库服务器,可能也要指定该机器和一个子目录:
jdbc:bark//doggie/elliott
最后,您可能要指定用户名和口令,作为连接字符串的一部分:
jdbc:bark//doggie/elliot;UID=GoodDog;PWD=woof
访问MSSQL Server方法:(驱动程序需要:msutil.jar,msbase.jar,mssqlServer.jar)
DBDriver=com.microsoft.jdbc.sqlserver.SQLServerDriver
URL=jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=demo
username=sa
password=
maxcon=10
mincon=1
poolName=SkyDev
利用我们开发的数据库类,使用方法如下:
DbObject DbO= new DbObject(new SqlServerConnectionFactory("localhost",
1433,"demo","sa",""));
Connection con= DbO.getConnection();
//类代码(不含连接工厂实现)
package skydev.modules.data;
public final class SqlServerConnectionFactory
extends ConnectionFactory{
private final String dbDriver=
"com.microsoft.jdbc.sqlserver.SQLServerDriver";
private String host;
private int port;
private String databaseName;
public SqlServerConnectionFactory(){
super.setDriverName(dbDriver);
}
/**
*
*@param host数据库所在的主机名:如"localhost"
*@param port SQL服务器运行的端口号,如果使用缺省值 1433,传入一个负数即可
*@param databaseName数据库名称
*@param userName用户名
*@param password口令
*/
public SqlServerConnectionFactory(String host,
int port,
String databaseName,
String userName,
String password){
this.setHost(host);
this.setPort(port);
this.setDatabaseName(databaseName);
this.setUserName(userName);
this.setPassword(password);
init();
}
private void init(){
super.setDriverName(dbDriver);
super.setUrl("jdbc:microsoft:sqlserver://"+ host.trim()+":"+
new Integer(port).toString()+";DatabaseName="+
databaseName.trim());
//super.setUrl("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=demo");
}
……
//------------------------------------------------------------------------------------
访问MySQL的方法:
DBDriver=com.mysql.jdbc.Driver
URL=jdbc:mysql://localhost/demo
username=
password=
maxcon=5
mincon=1
poolName=zhengmao
访问数据库
一旦连接到数据库,就可以请求表名以及表列的名称和内容等信息,而且您可以运行 SQL语句来查询数据库或者添加或修改其内容。可用来从数据库中获取信息的对象有:
DatabaseMetaData有关整个数据库的信息:表名、表的索引、数据库产品的名称和版本、数据库支持的操作。
ResultSet关于某个表的信息或一个查询的结果。您必须逐行访问数据行,但是您可以任何顺序访问列。
ResultSetMetaData有关 ResultSet中列的名称和类型的信息。
尽管每个对象都有大量的方法让您获得数据库元素的极为详细的信息,但在每个对象中都有几种主要的方法使您可获得数据的最重要信息。然而,如果您希望看到比此处更多的信息,建议您学习文档以获得其余方法的说明。
ResultSet
ResultSet对象是 JDBC中最重要的单个对象。从本质上讲,它是对一个一般宽度和未知长度的表的一种抽象。几乎所有的方法和查询都将数据作为 ResultSet返回。ResultSet包含任意数量的命名列,您可以按名称访问这些列。它还包含一个或多个行,您可以按顺序自上而下逐一访问。在您使用 ResultSet之前,必须查询它包含多少个列。此信息存储在 ResultSetMetaData对象中。
//从元数据中获得列数
ResultSetMetaData rsmd;
rsmd= results.getMetaData();
numCols= rsmd.getColumnCount();
当您获得一个 ResultSet时,它正好指向第一行之前的位置。您可以使用 next()方法得到其他每一行,当没有更多行时,该方法会返回 false。由于从数据库中获取数据可能会导致错误,您必须始终将结果集处理语句包括在一个 try块中。
您可以多种形式获取 ResultSet中的数据,这取决于每个列中存储的数据类型。另外,您可以按列序号或列名获取列的内容。请注意,列序号从 1开始,而不是从 0开始。ResultSet对象的一些最常用方法如下所示。
getInt(int);将序号为 int的列的内容作为整数返回。
getInt(String);将名称为 String的列的内容作为整数返回。
getFloat(int);将序号为 int的列的内容作为一个 float型数返回。
getFloat(String);将名称为 String的列的内容作为 float型数返回。
getDate(int);将序号为 int的列的内容作为日期返回。
getDate(String);将名称为 String的列的内容作为日期返回。
next();将行指针移到下一行。如果没有剩余行,则返回 false。
Close();关闭结果集。
getMetaData();返回 ResultSetMetaData对象。
ResultSetMetaData
您使用 getMetaData()方法从 ResultSet中获取 ResultSetMetaData对象。您可以使用此对象获得列的数目和类型以及每一列的名称。
getColumnCount();返回 ResultSet中的列数。
getColumnName(int);返回列序号为 int的列名。
getColumnLabel(int);返回此列暗含的标签。
isCurrency(int);如果此列包含带有货币单位的一个数字,则返回 true。
isReadOnly(int);如果此列为只读,则返回 true。
isAutoIncrement(int);如果此列自动递增,则返回 true。这类列通常为键,而且始终是只读的。
getColumnType(int);返回此列的 SQL数据类型。这些数据类型包括
BIGINT
BINARY
BIT
CHAR
DATE
DECIMAL
DOUBLE
FLOAT
INTEGER
LONGVARBINARY
LONGVARCHAR
NULL
NUMERIC
OTHER
REAL
SMALLINT
TIME
TIMESTAMP
TINYINT
VARBINARY
VARCHAR
DatabaseMetaData
DatabaseMetaData对象可为您提供整个数据库的信息。您主要用它获取数据库中表的名称,以及表中列的名称。由于不同的数据库支持不同的 SQL变体,因此,也有多种方法查询数据库支持哪些 SQL方法。
getCatalogs()返回该数据库中的信息目录列表。使用 JDBC-ODBC Bridge驱动程序,您可以获得用 ODBC注册的数据库列表。这很少用于 JDBC-ODBC数据库。
getTables(catalog, schema,tableNames, columnNames)返回表名与 tableNames相符而且列名与 columnNames相符的所有表的说明。
getColumns(catalog, schema,tableNames, columnNames)返回表名与 tableNames相符而且列名与 columnNames相符的所有表列说明。
getURL();获得您所连接的 URL名称。
getDriverName();获得您所连接的数据库驱动程序的名称。
获取有关表的信息
您可以使用 DataBaseMetaData的 getTables()方法来获取数据库中表的信息。这个方法有如下4个 String参数:
results=dma.getTables(catalog, schema, tablemask, types[]);
其中参数的意义是:
Catalog要在其中查找表名的目录名。对于 JDBC-ODBC数据库以及许多其他数据库而言,可将其设置为 null。这些数据库的目录项实际上是它在文件系统中的绝对路径名称。
Schema要包括的数据库“方案”。许多数据库不支持方案,而对另一些数据库而言,它代表数据库所有者的用户名。一般将它设置为 null。
Tablemask一个掩码,用来描述您要检索的表的名称。如果您希望检索所有表名,则将其设为通配符%。请注意,SQL中的通配符是%符号,而不是一般 PC用户的*符号。
types[]这是描述您要检索的表的类型的 String数组。数据库中通常包括许多用于内部处理的表,而对作为用户的您没什么价值。如果它是空值,则您会得到所有这些表。如果您将其设为包含字符串“TABLES”的单元素数组,您将仅获得对用户有用的表格。
一个简单的 JDBC程序
我们已经学习了 JDBC的所有基本功能,现在我们可以编写一个简单的程序,该程序打开数据库,打印它的表名以及某一表列的内容,然后对该数据库执行查询。此程序如下所示:
package skydevkit;
import java.sql.*;
public class JdbcOdbc_test{
ResultSet results;
ResultSetMetaData rsmd;
DatabaseMetaData dma;
Connection con;
public JdbcOdbc_test() throws SQLException{
String url="jdbc:odbc:Northwind";
try{
//加载 JDBC-ODBC桥驱动程序
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con= DriverManager.getConnection(url);//连接数据库
dma= con.getMetaData();//获取数据库的元数据
System.out.println("Connected to:"+ dma.getURL());
System.out.println("Driver"+ dma.getDriverName());
} catch(Exception e){
System.out.println(e);
}
try{
Statement stmt= con.createStatement();
results= stmt.executeQuery("select* from客户;");
ResultSetMetaData resultMetaData= results.getMetaData();
int cols= resultMetaData.getColumnCount();
String resultRow="";
for(int i= 1; i< cols; i++){
resultRow+= resultMetaData.getColumnName(i)+";";
}
System.out.println(resultRow);
while(results.next()){
resultRow="";
for(int i= 1; i< cols; i++){
try{
resultRow+= results.getString(i)+";";
} catch(NullPointerException e){
System.out.println(e.getMessage());
}
}
System.out.println(resultRow);
}
} catch(Exception e){
System.out.println("query exception");
} finally{
results.close();
}
}
}
补充高级内容
关于调用SQLServer存储过程的例子:(用到了我们开发的数据库连接类)
CREATE PROCEDURE [dbo].[sp_getStudentByName](@name char(10))
AS
Select* from Students where [Name]=@name
GO
DbObject DbO= new DbObject(new SqlServerConnectionFactory("localhost",
1433,"demo","sa",""));
Connection con= DbO.getConnection();
CallableStatement pstmt= null;
System.out.println("TestDB1()............");
/* try{
pstmt= con.prepareCall("{call sp_getStudentById(?)}");
pstmt.setInt(1, 1);
}*/
try{
pstmt= con.prepareCall("{call sp_getStudentByName(?)}");//注意参数如何传递
pstmt.setString(1,"Tom");
}
……
使用输出参数:
CREATE PROCEDURE [dbo].[sp_insertStudent](@name char(10),@age int,@id int OUTPUT) AS
insert into Students([Name],[Age]) values(@name,@age)
select@id=@@IDENTITY
GO
try{
pstmt= con.prepareCall("{call sp_insertStudent(?,?,?)}");
pstmt.setString(1,"zengqingsong");
pstmt.setInt(2, 22);
pstmt.registerOutParameter(3, Types.INTEGER);
pstmt.executeUpdate();
int id= pstmt.getInt(3);
System.out.println(id);
}
使用返回参数的例子:
CREATE PROCEDURE [dbo].[sp_insertStudent](@name char(10),@age int,@id int OUTPUT) AS
insert into Students([Name],[Age]) values(@name,@age)
select@id=@@IDENTITY–测试输出参数
return 30–测试返回30
GO
try{
pstmt= con.prepareCall("{?=call sp_insertStudent(?,?,?)}");
pstmt.setString(2,"zengqingsong");
pstmt.setInt(3, 22);
pstmt.registerOutParameter(4, Types.INTEGER);
pstmt.registerOutParameter(1, Types.INTEGER);
int ret= pstmt.executeUpdate();//执行影响的行数
int ret2= pstmt.getInt(1);//返回参数(输出参数)
int id= pstmt.getInt(4);//输出参数
System.out.println(ret);
System.out.println(ret2);
System.out.println(id);
本文来自用户投稿,不代表币大大立场,如若转载,请注明出处:https://czxurui.com/jys/151127.html


发表回复
评论列表(0条)