ASP.NET 实用资料[转]
使用SqlBulkCopy类加载其他源数据到SQL表 在数据回发时,维护ASP.NET Tree控件的位置 vagerent的vs2005网站开发技巧 ASP.NET2.0小技巧--内部控件权限的实现 图片滚动代码。 css——之三行三列等高布局 Datagird TemplateColumn类型列中如何设定日期格式为yyyy-MM-dd格式? SQL Server各种日期计算方法 在sqlserver中如何根据字段名查找字段所在的表 [CommunityServer]看RBAC的一方景象 七招制胜ASP.NET应用程序开发 企业库之数据访问的一个小应用 SQL查找某一条记录的方法 简介微软发布的Data Access Application Block 把Excel表中的数据导入数据库(存储过程、数据库作业) 通过避免下列 10 个常见 ASP.NET 缺陷使网站平稳运行(转) 一个分组查询的SQL 常用算法(附源码可直接执行) 网络蜘蛛(crawlers) ,SEO,网络公关等相关资源与工具的收集与整理 最新版FreeTextBox(版本3.1.6)在ASP.Net 2.0中使用简解(提供博客园本地下载) 经典数据库记录分页代码 [GridView控件]自定义分页 Web C#2.0 DataSet和Reader封装组件实现自动多数据库切换(含组件源码和实例) 为GridView删除添加提示 扩展GridView(五)——固定表头、指定行或指定列 Asp.net 2.0 Treeview 无限级无刷新示例 运用JAVASCRIPT,写一个类,类名:student,他的属性:name,age,tall,他的方法:getName,getAge,getTall SQL IF..ELSE..在存储过程的使用规范 sql server日期时间函数 页面自动刷新 css的一些基础的东西 利用css和js实现firefox和IE都支持的页面局部打印 总结一些js自定义的函数 從無到有實現一個xml數據庫登錄驗証 图片保存到数据库和从数据库读取图片并显示(C#) [转]FreeTextBox使用详解 将上传图片打上防伪图片水印并写入数据库 asp.net 2.0中一次性更新所有GRIDVIEW的记录 VS2005 TreeView 的 CheckBox 被点击时的引发页面回发事件 扩展GridView(四)——每行复选框的全选与取消全选 [翻译]开发一个HTML在线编辑器(一) Castle ActiveRecord(一)概述 用sql 得到某表下的列名 一个二级域名转向类(转) sql 分页存储过程 sql2000下 分页存储过程 回归命令行 SQLServer的命令行工具们(2) – sqlcmd.exe(中篇) 分页及页码导航 用户控件 十分钟内学会:根据数据库生成站点导航 自己写的几个高效,简洁的字符处理函数 用一句SQL取出第 m 条到第 n 条记录的方法 老问题:js实现gridview中的全选和反选 js取得gridview中获取checkbox选中的值,郁闷了半天 JavaScript 经典代码大全:有 目录 及 编号 的哦 ! 深入DML JavaScript 網頁打印處理 HTML语言:经典笔记'800')this.width='800';if(this.height>'600')this.height='600';" border=0> 员工管理系统(数据库部分)--一个老师很久就布置的作业 CSS 实用笔记 数据仓库自动抽取:通过 SQL Server 企业管理器中的数据转换服务 (DTS) 设计器 创建 Analysis Services 处理任务 SQL Server各种日期计算方法 如何创建类型FreeTextBox的编辑器 MemberShip(图) 让你的ASP.NET虚拟主机也支持子网站 使用 SqlBulkCopy 大量复制文字文件之 C# 程序代码 Community Server 2.1 安装到远程虚拟主机上常见问题解决 (摘)开源AJAX开发框架 继续发布VS2005下DataGridView 的多种样式列控件 sql server作业用法 SQL2000 和 SQL2005 下 行列转换 示例 使用批处理产生日期(时间)文件、文件夹 ASP.NET 2.0 Security FAQs 效果直逼flash的Div+Css+Js菜单 一个二级域名转向类(转) ASP.NET分页系列转载 (转载)基于.net开发平台项目案例集锦 轻松学DIV教程(div+css布局) 如何让SELECT 查询结果额外增加自动递增序号 导出sql server 数据库为Excel的数据字典的小工具 使用Gridview和ObjectDataSource轻松实现自定义分页 在数据回发时,维护ASP.NET Tree控件的位置 除非迫不得已不要用游标 基于.NET的CMS软件的选择 搜索引挚项目(附源码) 重写GridView分页样式! 重写GridView 开源代码生成器:SmartCode 构建基于ListView(Win)的数据绑定对象 随心所欲的Web页面打印技术 扩展GridView控件(上) Gridview动态隐藏空字段 ASP.NET组件DataGrid的分页实用方法 基于角色-功能-资源的权限控制模型的设计与实现 asp.net 2.0 权限树的控制(多处转载) Castle ActiveRecord Hands On Lab(1):基本数据访问 如何在数据层分页以提高性能 为gridview添加删除提示。 解决ASP 2.0中GridView控件的删除、插入、编辑命令操作客户端确认问题的另一方法 基于.net开发平台项目案例集锦 EnterPrise应用(5) Security Application Block应用程序块 授权处理(VB.NET) Ajax实现无刷新三联动下拉框 ASP.NET 2.0打造购物车和支付系统之 一 ASP.NET 2.0打造购物车和支付系统之二 通过样式表实现固定表头和列 数字转换为大写人民币(附源码)_AX 使用RewritePath方法实现【不同路径+任意URL后缀重写到指定页面且URL地址不变】(附源码)_AX 基于.net开发平台项目案例集锦 效果直逼flash的Div+Css+Js菜单 一段非常简单的让图片自动切换js代码 ASP.NET弹出一个对话框 通过样式表实现固定表头和列 在VS2005中 GridView导入Excel的两点小技巧-附源码 asp.net 2.0 中GridView里设置日期格式 针对Enterprise Library 2.0的框架:OFrame预览(代码和工具全部开源) {asp.net2.0}##一个关于GridView的网站 障眼法--如何去掉动网新闻系统的版权信息 ASP.NET简单分页 NQL.NET 数据库对象查询语言简介 2 Asp.Net 学习资源列表 asp.net身份验证和授权 在VS2005中 GridView导入Excel的两点小技巧-附源码 [转载]Asp.Net 2.0 发布问题 权限树中Checkbox的操作[Asp.Net2.0] 如何于DataGridView控件中以跨数据行方式显示数据 asp.net2.0中,实现treeview中选择父级checkbox时,子级连动 整理转载 自定义DataGrid控件开源 [视频讲解]GridView里做链接实现新闻列表到详细内容页的跳转 『原创』以学论道之ASP.NET中的文件流操作 GridView控件自定义分页详解 3-tier Architecture with ASP.NET 2.0 : Tutorial By Scott Mitchell TreeViewVisitor: 一个快捷访问 TreeView 控件节点的帮助类 基于功能(代码)的权限管理 一步一步学习ObjectDataSource控件--自定义分页排序 自己编写的操作实体类的分页控件, 实现页码层与数据库的具体的信息隔离 Alexa世界排名原理+作弊源码,为网站赢得好排名 Ajax实现无刷新树 GridView 批量删除,自定义分页,定位页码 关于GridView中自定义分页、单选、多选、排序、自增列的简单应用 Ajax实现无刷新三联动下拉框 GridView模版列嵌套GirdView显示主从表数据 Ajax无刷新实现图片切换特效 asp.net 2.0 用户管理功能结构 Asp.Net2.0权限树中Checkbox的操作 Membership学习(二)membership入门[xgluxv] Membership学习(三)Membership Providers介绍[xgluxv] Membership学习(一) Membership介绍[xgluxv] Membership学习(四)-自定义MembershipProvider Gridview中当设置自动生成列时对列中字段使用 html代码显示 一点一点学ASP.NET之示例——HttpModule 示例 一个三层架构的WinForms程序的完整范例(.NET 1.1/Northwind) 发布XenoCode 2006 for DotNet 2.0破解程序 一个简单的存储过程 Css2快速参考 在b/s开发中经常用到的javaScript技术 NHibernate的灵活配置 搭建基于ASP.NET 2.0的DNN 4.X模块开发环境及模块实例(2) 搭建基于ASP.NET 2.0的DNN 4.X模块开发环境及模块实例(1) 发布一个支持大量文本打印的PrintDocument派生对象,公开源代码。 史上最全的Windows进程详解! PetShop4.0学习第一天 删除前的确认窗口 我对图形变换滤镜的收集(CSS渐变滤镜大全) 2006年it人士必去的10个网站 DataReader应用小示例(数据库访问操作的基本过程2.0通过) (收藏)抓取Web网页数据分析 GridView/DataGrid单元格不换行的问题 如何在GridView中使用DataFromatString VS2005新控件之GridView 使用高级技巧系列[一][视频] VS2005新控件之GridView 使用高级技巧 几个.Net开源的CMS、Portal系统 gridview中加弹出窗口用例 GridView&DetailsView对XML文件增删改 [译]Scott Mitchell 的ASP.NET 2.0数据教程之十一: 基于数据的自定义格式化 初谈ADO.NET中利用DataAdapter进行数据操作 单一登录 Web 应用程序的企业级安全系统 发布XenoCode 2006 for DotNet 2.0破解程序 IBatisNet+Castle构架开发指南 IBatisNet+Castle构架开发指南 (续) 附代码生成模板 GridView根据值的变化改变行列样式 使用ASP.NET 2.0中的GridView控件 我积累的数据库操作类(ASP.NET) 我积累的数据库操作类(ASP.NET) 我积累的数据库操作类(ASP.NET) GridView 控件编程的事件 css+div布局总结--新手入门 15分钟内快速构建数据访问层(翻译) Transact_SQL小手册(各种sql语句大集合) Exports datatable to CSV or Excel format [转贴]开发VS2005下ComboBoxTreeView(下拉列表框弹出树) 与ToolStripComboBoxTreeView(下拉列表框工具条弹出树) 使用配制文件定制身份验证和基于角色的安全 一句SQL得出表中重复的数据(TMP) SQL精妙语句 Asp.net2.0:如何使用ObjectDataSource(配合ORM) Sql Server数据库的备份和恢复措施 SQL Server2000数据库文件损坏时如何恢复 存储过程编写经验和优化措施 (转) 征集佳句-精妙SQL语句收集 利用WebBrowser彻底解决Web打印问题 各种sql语句大集合 自定义用户访问权限 DataGrid导出excel和word的例子 具有滚动条的div SQL Server 2005 Express 附加的数据库为“只读”的解决方法 Sql 导入/导出Excel 不走寻常路 设计ASP.NET应用程序的七大绝招 ASP.NET性能优化 ASP.NET性能优化 对数据库Sql Server常用操作类库SQLHelper 如何取出treeview中checkbox的值 海量数据库的查询优化及分页算法方案 使用配制文件定制身份验证和基于角色的安全 VS2005新控件之GridView 使用高级技巧系列[二][视频] 一条经典的汇总的sql sql Server 索引优化 (转) Log4Net使用指南 一些有用的sql语句实例 Enterprise Library 2.0 -- Data Access Application Block 在Excel中将连续多列相同数据项合并 执行SQL存储过程事事例 SQL宝典 SQL语句导入导出大全(轉,收藏用)
gridview中手工排序 Asp.net 项目中引入Nhibernate 入门(一) 利用asp.net 2.0的客户端回调功能制作下拉框无限级联动 一个 NHIBERNATE+GRIDVIEW 添加删除修改的例子(单表) IBatisNet基础组件 用javascript将数字转换为中文大写 asp.net的TextBox回车触发事件 利用Sql作业在asp.net 里面实现异步调用存储过程. 抓取Web网页数据分析 VS2005中如何动态设置数据库连接信息? GridView控件修改、删除示例(修改含有DropDownList控件) JavaScript有用的代码,摘抄自:http://bbs.tech.163.com/board/rep.jsp?b=tech10&i=1296&p=0[转] 一些sql语句的详细解释 DataGrid使用心得(附大量代码) [转] SQL Server中各个系统表的作用 使用 Web Services Enhancements 2.0 的基于角色的安全性 Flash+asp.net打造FLASH首页新闻发布 SQL存储过程事务和优化方法(包括查询方式语句结合) 小记存储过程中经常用到的本周,本月,本年函数 GridView Css ASP.NET 2.0 Language Swithcer and Theme Swiche ASP.net2.0学习资料汇总 触发器与约束的适用条件 GRIDVIEW 中当数据行数未满时,填充空白行 ComponentArt Web.UI for ASP.NET 2.X序列号 创建用于监视对student表进行插入和更新操作的触发器 20060516: 实现圆角div效果 .net绝对技术资料 sql server2000中使用convert来取得datetime数据类型样式(全) 一些sql 语句(行列转换等) [转载] Owc的使用---自己封装好的类可以实现14种分析图 非常經典的WEB列印方案 CuteEditor 5.0 的使用 ASP.NET 2.0构建动态导航的Web应用程序(TreeView和Menu ) MD5算法的T-SQL实现 ASP.NET2.0中数据源控件之异步数据访问 DotNetGrid 控件下载 DotNetGrid 介绍 WEB打印-------我的搜集 在校生数据导入范例 关于多极分类的几个存储过程 一个 NHIBERNATE+GRIDVIEW 添加删除修改的例子(单表) 树形数据查询示例 转 SQL Server 数据库管理常用的SQL和T-SQL语句 IIS状态代码的含义 .NET平台下带权限控制的TreeView控件节点生成算法(转载) 实现HTTP内容的抓取 给SQL Server存储过程,传送数组参数的变通办法 在.net中使用Fckeditor [转] SQL的3种连接查询 海量数据库的查询优化及分页算法方案 [转] transact---sql高级查询(下) [转] transact---sql高级查询(上) SQL Server数据库开发的二十一条军规 Excel编程 存储过程语法 SQL 语法参考手册 ASP.NET之精通弹出窗口 在网页中插入视频播放代码全集 无限级分类的实现 资源名称资源名称取得汉字字符串的拼音首字母的mssql函数 树_ajax 树_ajax GridView与DataGrid中的数据项访问差别 Gridview中onmouseover的效果 ASP.NET2.0+SQL Server2005构建多层应用(转载) 修正过的通用分页存储过程 [推荐]网络上通用的调查答卷系统-XML做数据库(将DataSet转化成字符串) MS-SQL数据库开发常用汇总 在visualStudio里面使用SqlServer2000作为数据源 获取影响行数和ID的存储过程 C# .Net中的类型转换 C#.net常用函数 SQL注入 FCKeditor2.2+ASP.NET2.0不完全攻略 FCKeditor2.2+ASP.NET2.0不完全攻略 【转贴】datagrid数据导出到excel文件给客户端下载的几种方法 GridView动态生成模板列 关于树形控件 asp.net 备份和恢复SQL SERVER 数据库 Asp.net(C#)实现验证码功能 Asp.NET程序中常用的三十三种代码 分割以逗号作为分割符号的字符串并插入到表中 列出一个表中的某个字段重复的记录 DataGrid系列技巧(导出excel,事件,多种方式呈现数据,全选全删)等等等 把以"文本文件(制表符分割)"保存的EXCEL文件导进SQLSERVER2000的DEMO! 总结:ADO.NET在开发中的部分使用方法和技巧 (转贴) DATAGRID的全选/取消全选控制(CHECKBOX) 使用SqlBulkCopy类加载其他源数据到SQL表 使用SqlBulkCopy类加载其他源数据到SQL表 使用SqlBulkCopy类加载其他源数据到SQL表 一个调查实例<主要训练向panel中添加控件>包括全部代码 ASP.NET 2.0客户端回调的实现分析(3)[ZT] [原创]把SQL的动态查询改成SQL查询 SQL Server实用经验技巧集 使用 DataAdapter 执行批量更新 treeview的建立,更新,删除 C#实现web信息自动抓取 [收藏].net关于企业Excel报表的生成 将 ASP.NET 2.0 应用程序服务配置为使用 SQL Server 2000 或 SQL Server 2005(转) .NET进销存系统开发笔记------之Gridview应用 .net 2.0中GridView无限级嵌套的实现 导入Excel电子表格数据到SQLSever数据库的另一种方法 一个购物车的简单实现(多层开发) ASP.NET2.0中 TreeView 和ORACLE 数据绑定的一种方法 ASP.NET2.0 ObjectDataSource的使用详解(2) ASP.NET2.0 ObjectDataSource的使用详解(1) 将DataSet更新自动提交到数据库工具类实现 超强扩展性的DNN-DotNetNuke模块功能分类列表(from 中国DNN) 世界上主要的一些搜索引擎 Survey Admin 示例:实现 Microsoft .NET 基于角色的安全性(转) NHibernate Step by Step (四)Session、Query及HQL NHibernate Step by Step (三) Configuration和Sessionfactory Microsoft .NET Pet Shop 4 架构与技术分析 PetShop的系统架构设计 Asp.Net 2.0 TreeView的Checkbox级联操作 无废话-SQL Server 2005新功能(1) - TSQL 导出导入Excel(DataSet,DataGrid) DNN开发中的一些细节(1) DNN开发中的一些细节(2) ASP.NET2.0: Ilungasoft.Framework.Web之基于Callback的无刷新上传进度条控件[带源码] TreeView 爱恨之间 Transact SQL 常用语句以及函数 Transact SQL 常用语句以及函数 ASP.NET 2.0 正式版中无刷新页面的开发 DNN开发中的一些细节(1) ASP.NET2.0快速入门--高级数据方案(3) 结合CodeSmith开发和调试DNN3模块 SqlDataSource WEB控件:当DeleteCommandType="storedProcedure"时 关于TreeView控件专题 利用Treeview做权限树的一种方法 利用Treeview做权限树的一种方法 (新)在ASP.NET中调用存储过程传参数 ASP.NET2.0快速入门系列--高级数据方案(上) ASP.NET2.0快速入门--高级数据方案(中) asp/asp.net中遍历树型结构. ASP.NET 2.0中使用multiview控件 ASP.NET2.0快速入门系列--高级数据方案(上) DataGrid,GridView和DetailsView中添加删除确认提示 VS2005中用Code Snippets提高开发效率 IIS和ASP.NET2.0 关于vs 2005的一个问题, 解决The path "xxxx' maps to a directory outside this application, which is not supported. VS2005第一天 Failed to access IIS metabase 无ASPX文件部署(续) ASP.NET 2.0构建动态导航的Web应用程序(TreeView和Menu ) ASP.NET 2.0基于SQLSERVER 2005的aspnetdb.mdf部署 对vs2005生成dll文件的一点疑惑 ASP.NET 2.0 新特性 WEB Service 下实现大数据量的传输 switch your web application project to use development machine's IIS server [ASP.NET 2.0 Security FAQs]如何设置SQL Server或SQL Express数据库,使其支持Membership、Profiles和Role 将 ASP.NET 2.0 应用程序服务配置为使用 SQL Server 2000 或 SQL Server 2005(转载) GridView 控件使用不完全指南! 【原创】asp/asp.net中遍历树型结构. .NET Pet Shop 4.0案例研究预览篇 关于树形结构的研究的资料收集 单点登录(SSO)的核心--kerberos身份认证协议技术参考(三) Gridview:在进入编辑模式后动态添加控件 ASP.NET中大结果集的分页[翻译] Asp.Net Forums研究文章集合(收藏) ASP.NET2.0中Gridview中数据操作技巧 SQL Server中利用存储过程来高性能地进行分页 关于二级域名Cookie的问题及解决方法 一步一步建网-2-DotNetNuke4-5/6-杂项/感! 通过系统配置来提高ASP.NET应用程序的稳定性 GridView 控件使用不完全指南!(续一) ASP.NET应用程序的部署--兼谈aspnet_compiler.exe命令 RDLC报表(一) RDLC报表(七) GridView 控件使用不完全指南! DNN皮肤制作 一个登陆页面,包含了初始化用户,输入检测,错误处理等 DNN皮肤制作 基于dotnetnuke的网站全新上线! [导入]DotNetNuke Skin 與 Container 設計介紹 CodeSmith3.0开发资料下载 CodeSmith开发系列资料总结 提高SQL执行性能方案:如何让你的SQL运行得更快zt Visual Studio 2005 的101个示例下载 网络数据库挖掘程序的设计 对联广告代码效果大全 网站生成静态页面,及网站数据采集的攻、防原理和策略 [原创]终极防范SQL注入漏洞! 【先锋海盗类】Ver2005 完美版 拿别人的新闻来用,虽然我知道这样不好,还是用了。。。 网页小偷程序ASP.net 数据采集程序(网页小偷)点滴心得 部署安装时写入SQL SERVER和Web.config 将博客园程序从Visual Studio 2003迁移到Visual Studio 2005的尝试 开篇:Nhibernat.Test项目分析之:ConfigurationTest 基于NHibernate的三层结构应用程序开发初步 15分钟内快速构建数据访问层(翻译) Asp.net 2.0专题二:本地化(Localization) 数据库应用基础系列 深入了解 SQL Server 2000 与 ADO.NET 中的事务隔离及数据锁定 第2章 并发操作的一致性问题 (2) 在asp.net 2.0中使用SqlBulkCopy类迁移数据 使用asp.net 2.0和SQL SERVER 2005构建多层应用 推荐个关于 team system教学的好站点 推荐个关于 team system教学的好站点 DataList控件也玩分页- - SQL Server 两个触发器例子,大家看看怎么样? 发布一个原创的基于Ajax的通用(组合)查询(续) 在IIS6.0下ASP .NET 的版本冲突问题 FCKeditor应用小记--起步篇 WEB Service 下实现大数据量的传输 55种网页常用小技巧(转载) [转]Microsoft PetShop 3.0 [转载]用WSE在Web服务中验证用户身份 一次SQL Server 2000修复实践的说明 新数据网格DataGridView简介(转自MSDN) [转贴]Visual Studio 2005常用插件搜罗 第 4 章 构建以数据为中心的应用程序 网 站 策 划 [转载] 在.net安装程序部署SQL Server数据库 [转载] 在.net安装程序部署SQL Server数据库 ASP.NET程序中常用代码汇总(一)(转载) ASP.NET程序中常用代码汇总(二)(转载) ASP.NET程序中常用代码汇总(三)(转载) ASP.NET程序中常用代码汇总(四)(转载) ASP.NET程序中常用代码汇总(五)(转载) 露雨资源库(第一个.net2.0软件)二 ADO.NET 2.0 大批量数据操作和多个动态的结果集 继续发布VS2005下DataGridView 的多种样式列控件 一个支持asp.net2.0和Sql server及Access的免费空间 FAQ:关于aspspider.net的申请与使用(逐渐整理中) ASP.NET 2.0中的成员管理与角色管理 ASP.NET中用哪种方式表格化数据 DotNet软件开发框架 知识管理系统分析之一:网络蜘蛛的分析 如何实现在Asp.net下XP风格的下拉菜单 CodeSmith基础(二) CodeSmith开发系列资料总结 利用 SharpZipLib方便地压缩和解压缩文件 GridView控件使用经验 一个支持asp.net2.0和Sql server及Access的免费空间 新版XNet.SqlHelper 使用ASP.NET 2.0 Profile存储用户信息[翻译] Level 200 FreeTextBox使用详解 (版本3.1.1) Web Services的身份验证 [小结]关于asp.net个性化站点的设置 网络数据库挖掘程序的设计 使用企业程序库的两点体会 ASP.NET 2.0构建动态导航的Web应用程序(TreeView和Menu ) 如何使网站基于CA认证访问 体验 .net2.0 的优雅(2) -- ASP.net 主题和皮肤 一完美的关于请求的目录不存在而需要url重写的解决方案! 如何建立有效的.Net软件注册保护机制 常用CSS ASP.NET程序中常用代码汇总(五) ADO.NET 2.0 大批量数据操作和多个动态的结果集 在Apache环境下成功的运行ASP.NET 使用ADO.net转换数据到Excel格式并提供下载 打开一个Excel模板文件填充数据另存为一个文件 一个关于DataGrid的打印类,分享,感谢作者 把excel 数据导入数据库 NHibernate文档翻译 第5章 集合类(Collections)映射 NHibernate文档翻译 第4 章 O/R Mapping基础 关于能自定义格式的、支持多语言的、支持多数据库的代码生成器的想法 自动代码生成器 Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇 Enterprise Library Step By Step系列(十):缓冲应用程序块——进阶篇 Asp.net中DataGrid利用DataRelation显示主从表信息(可控制从表信息隐藏和显示). Cookie 支持二级域名和FormsAuthentication 加强版 aspx->cs->dll 无aspx文件部署 无ASPX文件部署(续) asp.net报表解决方法(第一次使用cnblogs的blog) NHibernate文档翻译 第3章 持久化类(Persistent Classes) 《ASP.NET办公自动化系统开发实例导航》笔记三 人事管理模块 [转]Microsoft PetShop 3.0
《ASP.NET办公自动化系统开发实例导航》笔记二 系统管理模块设计 《ASP.NET办公自动化系统开发实例导航》笔记一 NHibernate文档翻译 第2章 ISessionFactory配置 TreeView常用操作 NHibernate文档翻译 第1章 体系结构 关于ASP.NET中调用Excel组件不能结束进程的解决方法 用ActiveX控件和JavaScript脚本实现基于Web的票据套打(源码下载) 搜索引擎, 请手下留情 我写的Asp.net操作Excel的一个类库ExcelHelper(源码下载) Enterprise Library Step By Step系列(八):日志和监测应用程序块——进阶篇 一个经典的ADO.NET入门例子(CSDN博客迁移) [源代码]系统框架NickLee.Framework.V1.X for asp.net asp.net利用OWC生成分析報表 把aspx文件编译成DLL文件 ADO.NET 2.0 大批量数据操作和多个动态的结果集 让.Text的搜索引擎支持二级域名 微软技术大会 Tech.Ed2005 所有讲义(ppt格式)下载地址 应用系统架构设计 应用系统架构设计-补全篇 简单实用的DATAGRID组件 .Text 支持二级域名之二 Cuyahoga的安装及结构 也nhibernate会遇到问题,还好找到原因了 [C#]NHibernate处理多帐套问题 滚动DataGrid 蛙蛙推荐:迎接web2.0:写一个RSS.HTC组件 分享:微软提供的一个开源控件treeview 的一小个用法 发布一个原创的基于Ajax的通用(组合)查询(续) 在ASP.NET页面中冻结DataGrid的列或头部 Cuyahoga代码的研究之一:Cuyahoga.Corel项目 Cuyahoga研究三:用户配置数据的处理 Cuyahoga研究之二:利用MD5CryptoServiceProvider返回字符串的MD5 Hash值 [精华&原创]可按任意字段排序的分页存储过程(不用临时表的方法,不看全文会后悔) Asp.net中把DataTable或DataGrid导出为Excel 技巧百问(5):打造超级浮动广告(不受屏幕限制) 使用HttpModule实现多个域名分别“绑定”到子目录 利用XML实现通用WEB报表打印 续:利用XML实现通用WEB报表打印(实现篇) 昨天的性能优化与今天的网站故障 一个关于DataGrid的打印类,分享,感谢作者 把文件上载到数据库中 .Text分页技术(1)分页的存储过程分析 Community Server专题十:MemberRole之RoleManager 构建动态导航的Web应用程序 SQL Server 用触发器实现表的历史记录 SQL Server 用触发器实现表的历史记录 WEB打印大全 asp.net操作Excel总结 VC++开发BHO插件——定制你的浏览器 作者 陆其明 如何实现在Asp.net下XP风格的下拉菜单 使用数据2分处理的通用分页存储过程 前半部分与后半部分数据访问时间相同(很久没来了 作为国庆礼物给大家了) Js控制ASPX页面刷新的土办法 代码生成工具之MyGeneration 初次体验.net Ajax无刷新技术 Community Server专题八:MemberRole之Membership 应用IBatisNet+Castle进行项目的开发 .Net PetShop3.0的数据访问技术及其改进 Community Server专题七: Job & Timer 使用企业库在某些站点会报试图执行安全策略不允许的操作异常的解决方法。 刚注册,先转发一片文章:在 ASP.NET 中执行 URL 重写 利用asp.net 2.0构建企业级门户平台(1、设计思想) 利用asp.net 2.0构建企业级门户平台(2、实现页面请求的调度) 报表的开发利器-ExcelQuicker ExcelQuicker模板功能的高级应用示例——薪资报表 SQL Server未公开的两个存储过程 WSE--简介(一) .net WebControl 处女作,用于导航的Tree控件(不敢说用起来最简单也算得上非常简单,呵呵) xml数据岛,xsl,javascript,asp.net 的结合使用 web 程序模仿 windows 资源管理器 用CodeSmith生成数据库实体类的代码 .NET中统一的存储过程调用方法(收藏) TreeView常用操作 NHibernate学习 NHibernate学习 给SQL Server存储过程,传送数组参数的变通办法 Community Server专题二:体系结构 权限设计(二) 通用分页存储过程 N-Tier Server/(Smart)Client 应用程序的设计和开发 基于身份验证票据的权限系统的实现之源代码篇 Enterprise LibraryV1.0-数据应用程序块 共享自动生成DTO/DataAccess/BizObject的CodeSmith模板 一个不错的SQL储存过程分页,储存过程+Repeater,如果只是浏览数据的话,快就一个字 Forms验证中的roles 跨页面的多选功能实现 简单说一下我对这个CRM系统的设计方案哦 把你的Access数据库嵌入到资源中发布 对象界面映射(UI Mapping)——Mustang1.0.0.0写完了!!! 蛙蛙推荐:利用OWC创建图表的完美解决方案 SQLServer 工具箱v1.3(SQL脚本排序,日志清除,数据导入导出)附完整源代码 从WEB SERVICE 上返回大数据量的DATASET 批量字符串替换程序 install shield X 打包 .net Framework ASP.NET直接下载一个文件,而不是在IE中打开它 实现GridView控件的删除多条记录功能系列(1) ComponentArt WebUI For asp.nET 2.1,So Good Asp.nET UI Control! 实现GridView控件的删除多条记录功能系列(2) 博客园 Google广告 开源项目 实现GridView控件的删除多条记录功能系列(3) ICSharpCode的SharpZipLib最新0.84版本 SmartDBForge-智能数据库工厂 2005预览版:自动化生成数据库文档、SQL脚本、实体类等,支持多种数据库 提供一个实体类生成工具. T-SQL 存储过程: (20050802修订版) 根据基本表结构及其数据生成 INSERT INTO ... 的 SQL 关于单点登陆的一些问题 蛙蛙推荐:微软MSDN导航菜单演示(Javascript+CSS2) 蛙蛙推荐:远程抓取网页到本地数据库.doc CuteEditor破解手记 [分享]FCKEDITOR范例及中文使用说明 [DNN模块开发]模块的文件结构及命名方法 用好CodeSmith,提高生产力,CodeSmith技术原理初探. Smart Client学习体会(一) 优秀.net 控件包介绍 应用系统架构设计 如何在删除并重新安装 IIS 之后修复 IIS 映射 五种常见的ASP.NET安全缺陷 “他说,你那样做,太累,而且如果字段变了,还要维护” 纯脚本搞掂DataGrid表表头不动,表身滚动。 DataGrid分页中文效果,与大家共享,顺便有能者把DropDownList的触发找到。我是放在呈现上。 基于文件格式的DataGrid多媒体播放示例(带表头自动排序,动态播放列表功能) Office自动化开发中的事件编程 ExcelQuicker模板功能的高级应用示例——薪资报表 抄:JavaScript实用技巧集锦 [分享]新封装的一个实现无刷新连动下拉列表类(最新版本) 新鲜出炉,几分钟以前刚刚完成,一个带自定义分页,排序功能的DATAGRID控件(公开源码) C#操作Excel,套用模板并对数据进行分页 Asp.Net Forums与现有系统整合方案示例 存储过程中的事务实现 基于Active Directory的用户验证 Sql server数据库记录修改追踪和恢复的解决方案 SQL Server最新补丁与工具大全--数据库管理员必看 介绍一种Web上打印技术 表单验证代码(转载) 在Webpart中以Post方式提交数据到SharePoint站点 ASP.NET2.0中用Gridview控件操作数据 一个有用的oracle数据库访问封装类 【经验分享】海量数据高性能分页新法 MSDN: 设计数据层组件并在层间传递数据 真的需要在.NET中使用WIN32 API的朋友,这里是你的宝库 服务器升级安装操作备忘[原创] WEB柱状图和折线图控件,大家应急时可以用用 RapidTier 1.0 beta2 发布 关于设置WebControls里的treeview控件的图片路径 两分钟让你明白什么是ERP! 权限控制理论及实现 纯脚本搞掂DataGrid表表头不动,表身滚动。 NHibernate 使用手迹(2nd) ASP.NET服务器控件开发简介: ComboBox [开放源代码] 用存储过程生成单据号 [开源论坛]StellaForum v 2.0 公开 NHibernate使用的问题 使用NHibernate时需要考虑的另一个问题 使用 DataAdapter 和 DataSet 更新数据库 绝对适合您的DataPropertyGrid! 关于BI Portal(一) 也谈log4net 1.2.9 beta的使用(web 项目) datagrid(webform)批量操作的一些思路。 将TreeView存储、写入数据库的扩展类TreeViewEx 一句SQL语句解决倒序数据分页提取 一个 TreeView 的派生类: TreeViewEx 实现 NodeShowToolTip、NodeDoubleClick 事件 解放程序员的验证输入(II) 用好CodeSmith,提高生产力,CodeSmith技术原理初探. 最近开发一个SQL server大数据量统计系统的经验总结 SQL语言高级技法演练 动态载入数据的无刷新TreeView控件(5) 动态载入数据的无刷新TreeView控件(4) 在ASP.Net中两种利用CSS实现多界面的方法. SQL Server数据汇总完全解析 asp.net学习资源列表 将TreeView存储、写入数据库的扩展类TreeViewEx .NET平台下WEB应用程序的部署(安装数据库和自动配置) 在sql语句中替换Not In 的方法 创建新的企业级模板 SQL Server游標應用技巧一例 送给所有还未买房的技术朋友们——住房按揭贷款计算器 基于Wiki的网络协作/知识积累试验平台 快过年回家了,发点实用的东西给大家 .NET商业应用架构所要解决的若干问题(原创) 企业设计模式读书笔记 Domain Model MAVERICK.NET初窥(原创) 再谈SQL Server表与Excel、Access数据互导 使用Singleton改善ASP.NET性能备注 石头.net [杨 云] 也来说说asp.net页面之间传递数据 Vs ColdFusion 一套可嵌入或独立使用的翻页控件: WebPager(附源码) Rainbow分页解决方案 我对多类型用户的设计想法...... 为什么叫“老师” 和 “学生” 生成工具-CodeSmith-享受编程的乐趣(三) 生成工具-CodeSmith-享受编程的乐趣(二) 生成工具-CodeSmith-享受编程的乐趣(一) 在ASP.NET中使用NHibernate 代码阅读总结之ASP.NET StartKit TimeTracker(角色权限之捉虫笔记) 一个NHibernate应用的实际例子(A good open source project to learn how to use NHibernate) 客户自行更改了aspnet用户权限,结果整个网站不能用。查找了资料记录下来 数据分页显示大搜索 CNBlogs引用第三方组(控)件明细^_^ 使用HttpContext的User属性来实现用户验证 近音搜索,比较输入Z就可以搜索到拼音Z开头的汉字,搜索"浙江",只要输入"ZJ"就可以了 看了下面那篇“Crack别人应用程序”的文章有感,简述.Net下的应用程序授权。 子查询基础知识 我用Rainbow做网站 将TreeView存储、写入数据库的扩展类TreeViewEx Dottext中的配置 提高ASP.NET应用程序性能的几招方法 一定要记住:Page.IsPostBack 不能忘。。。 log4net 配置与应用 浅析《ASP.Net Web 站点高级编程》的登录验证! 开源的数据库组件 代码阅读总结之ASP.NET StartKit TimeTracker(角色权限) 老猫的理想开源小范例 [精华&原创]可按任意字段排序的分页存储过程(不用临时表的方法,不看全文会后悔) IEWebcontrol webctrl_client目录配置 FMStocks7 , 不错的一个.NET 示例程序 感受DataGrid给数据操作带来的便利(4) 感受DataGrid给数据操作带来的便利(5) 中国DNN 的邀请 感受DataGrid给数据操作带来的便利(6) DotNetNuke(DNN)从入门到进阶(1)-怎样写自己的模块 如何实现文本框焦点自动跳转及通过回车键提交表单 如何使用一个不错的图表组件WebChart(免费) .NET下,你采用的是哪种方式进行数据操作? 两种不同情况的分页实现 .NET下,你采用的是哪种方式进行数据操作? 常用SQL说明 可以动态分页的存储过程 [专题]O/R 实体关系映射 我的IBatisNet的Demo DNN官方说明2 Duwamish代码分析篇 SQL Server数据库备份还原 通用分页SQL SQL过程自动C#封装,支持从表到基本存储过程生成, DNN的白皮书(官方说明) SQL Server自动备份的SP, 只要加上数据库名, 和路径即可. Rainbow中的不过期分页的文章Module 点击一个Button,来看Duwamish7的总体层次 我在研究的一些.net开源项目 回头看.Net的优点与进步 方便好用的 ASP.Net 错误记录发布模块 ELMAH (Error Logging Modules And Handlers) 我用Rainbow做网站 实现千万级数据的分页显示--整理资料并测试 小技巧之——服务器端变量与客户端JScript脚本变量的互操作。 Asp.net(C#)实现验证码功能 SQL 2000中的触发器使用 NHibernate 空气是哪么的清新,世界是多么的美好 NHibernate 做个小项目来试一下吧 三 NHibernate 做个小项目来试一下吧 四 (我们继续) 博客园的开源项目: Aop.NET DotNetAOP ibatis介绍[转贴] 使用open source产品组装你的web应用架构[转贴,只作为收藏,非本人原创] 发现不少免费、酷、强大组件(Win/Web) NHibernate 做个小项目来试一下吧 一 NHibernate 做个小项目来试一下吧 一 NHibernate 空气是哪么的清新,世界是多么的美好 用Nhibernate怎么实现数据的添加、删除、修改简单程序 利用webService做系统间数据整合 Rainbow的安装 我想问一下NHibernate的问题??? NHibernate学习第二天(在nhibernate中执行SQL语句 ) NHibernate学习第一天(数据的写入 Insert) 好久没有见到有人谈论代码生成器了 几个开源项目实体层实现方式比较 象使用DataGrid一样使用DataList(包含分页) 一个对众多CMS(内容管理系统)进行比较、评论的网站 在Windows下让不同用户使用不同的分辨率(C# 2005) 数据分页 DotNetNuke:如何创建自己的模块(FlashPlayer Module) SharpDevelop代码分析 (一、序+基本概念) 发布Asp.Net Forums V2 中文官方 10.1 国庆版 号外!激动人心的DotNetNuke(DNN)2.2x新特性最新汇报! DotNetNuke:制作属于我们自己的Skin sql server中分页获取数据的存储过程 轻量级的数据库访问类 DotNetNuke:自动升级功能(一) DNN第三方贡献 CodeProject上最近(2004-09-24)发现的几个好代码 使用Reflector工具解决问题 关于Rainbow的一些思考 FreeTextBox的ToolbarButton整理 web的用户验证方式 SqlServer通用存储过程的编写 我将msdn上一篇关于数据库打包的文章由vb改为cs拉,好久没发言了,希望这个东西对大家有用! DotNet(.Net)下构建高适应性的三层架构 DotNetNuke:自动升级功能(序) 关于PagedDataSource,非常好用的一个分页属性! IronPython的第一块鳞片 关于Rainbow的一些思考 柱状图改进版 CN.Text开发笔记—利用反射将数据读入实体类 布局和配色(Rainbow的Design目录) 存储过程编写经验三 存储过程经验二 扩展AdRotator控件,让它支持.SWF广告 (源码) 描述 Machine.Config 和 Web.Config(转载) sqlserver 海量数据导入的最快方法 Community 学习(C#版) DataGrid使用<2> 绑定checkbox [百万级]通用存储过程.分页存储过程. 实现千万级数据的分页显示! 今天把最近看DotNetNuke的心得写一些,希望对别人有所帮助 DNN(DotNetNuke)研究手札系列2-背景、现状 win2003优化大全 (转载) DNN(DotNetNuke)研究手札系列1-资源 DotNetNuke 2.1.2安装指南 DataGrid资料 DataGrid技巧大集合
asp.net速查手册
GridView/DataGrid单元格不换行的问题
如何在GridView中使用DataFromatString
VS2005新控件之GridView 使用高级技巧系列[一][视频]
VS2005新控件之GridView 使用高级技巧
几个.Net开源的CMS、Portal系统
gridview中加弹出窗口用例
GridView&DetailsView对XML文件增删改
[译]Scott Mitchell 的ASP.NET 2.0数据教程之十一: 基于数据的自定义格式化
初谈ADO.NET中利用DataAdapter进行数据操作
单一登录 Web 应用程序的企业级安全系统
发布XenoCode 2006 for DotNet 2.0破解程序
IBatisNet+Castle构架开发指南
IBatisNet+Castle构架开发指南 (续) 附代码生成模板
GridView根据值的变化改变行列样式
使用ASP.NET 2.0中的GridView控件
我积累的数据库操作类(ASP.NET)
我积累的数据库操作类(ASP.NET)
我积累的数据库操作类(ASP.NET)
GridView 控件编程的事件
css+div布局总结--新手入门
15分钟内快速构建数据访问层(翻译)
Transact_SQL小手册(各种sql语句大集合)
Exports datatable to CSV or Excel format
[转贴]开发VS2005下ComboBoxTreeView(下拉列表框弹出树) 与ToolStripComboBoxTreeView(下拉列表框工具条弹出树)
使用配制文件定制身份验证和基于角色的安全
一句SQL得出表中重复的数据(TMP)
SQL精妙语句
Asp.net2.0:如何使用ObjectDataSource(配合ORM)
Sql Server数据库的备份和恢复措施
SQL Server2000数据库文件损坏时如何恢复
存储过程编写经验和优化措施 (转)
征集佳句-精妙SQL语句收集
利用WebBrowser彻底解决Web打印问题
各种sql语句大集合
自定义用户访问权限
DataGrid导出excel和word的例子
具有滚动条的div
SQL Server 2005 Express 附加的数据库为“只读”的解决方法
Sql 导入/导出Excel
不走寻常路 设计ASP.NET应用程序的七大绝招
ASP.NET性能优化
ASP.NET性能优化
对数据库Sql Server常用操作类库SQLHelper
如何取出treeview中checkbox的值
海量数据库的查询优化及分页算法方案
使用配制文件定制身份验证和基于角色的安全
VS2005新控件之GridView 使用高级技巧系列[二][视频]
一条经典的汇总的sql
sql Server 索引优化 (转)
Log4Net使用指南
一些有用的sql语句实例
Enterprise Library 2.0 -- Data Access Application Block
在Excel中将连续多列相同数据项合并
执行SQL存储过程事事例
SQL宝典
SQL语句导入导出大全(轉,收藏用)
gridview中手工排序
Asp.net 项目中引入Nhibernate 入门(一)
利用asp.net 2.0的客户端回调功能制作下拉框无限级联动
给大家推荐一个我的开源项目: Permission Base
一个 NHIBERNATE+GRIDVIEW 添加删除修改的例子(单表)
IBatisNet基础组件
用javascript将数字转换为中文大写
asp.net的TextBox回车触发事件
利用Sql作业在asp.net 里面实现异步调用存储过程.
抓取Web网页数据分析
VS2005中如何动态设置数据库连接信息?
GridView控件修改、删除示例(修改含有DropDownList控件)
JavaScript有用的代码,摘抄自:http://bbs.tech.163.com/board/rep.jsp?b=tech10&i=1296&p=0
[转] 一些sql语句的详细解释
DataGrid使用心得(附大量代码)
[转] SQL Server中各个系统表的作用
使用 Web Services Enhancements 2.0 的基于角色的安全性
Flash+asp.net打造FLASH首页新闻发布
SQL存储过程事务和优化方法(包括查询方式语句结合)
小记存储过程中经常用到的本周,本月,本年函数
GridView Css
ASP.NET 2.0 Language Swithcer and Theme Swiche
ASP.net2.0学习资料汇总
触发器与约束的适用条件
GRIDVIEW 中当数据行数未满时,填充空白行
ComponentArt Web.UI for ASP.NET 2.X序列号
创建用于监视对student表进行插入和更新操作的触发器
20060516: 实现圆角div效果
.net绝对技术资料
sql server2000中使用convert来取得datetime数据类型样式(全)
一些sql 语句(行列转换等) [转载]
Owc的使用---自己封装好的类可以实现14种分析图
非常經典的WEB列印方案
CuteEditor 5.0 的使用
ASP.NET 2.0构建动态导航的Web应用程序(TreeView和Menu )
MD5算法的T-SQL实现
ASP.NET2.0中数据源控件之异步数据访问
DotNetGrid 控件下载
DotNetGrid 介绍
WEB打印-------我的搜集
在校生数据导入范例
关于多极分类的几个存储过程
一个 NHIBERNATE+GRIDVIEW 添加删除修改的例子(单表)
树形数据查询示例
转 SQL Server 数据库管理常用的SQL和T-SQL语句
IIS状态代码的含义
.NET平台下带权限控制的TreeView控件节点生成算法(转载)
实现HTTP内容的抓取
给SQL Server存储过程,传送数组参数的变通办法
在.net中使用Fckeditor
[转] SQL的3种连接查询
海量数据库的查询优化及分页算法方案
[转] transact---sql高级查询(下)
[转] transact---sql高级查询(上)
SQL Server数据库开发的二十一条军规
Excel编程
存储过程语法
SQL 语法参考手册
ASP.NET之精通弹出窗口
在网页中插入视频播放代码全集
无限级分类的实现
资源名称资源名称取得汉字字符串的拼音首字母的mssql函数
树_ajax
树_ajax
GridView与DataGrid中的数据项访问差别
Gridview中onmouseover的效果
ASP.NET2.0+SQL Server2005构建多层应用(转载)
修正过的通用分页存储过程
[推荐]网络上通用的调查答卷系统-XML做数据库(将DataSet转化成字符串)
MS-SQL数据库开发常用汇总
在visualStudio里面使用SqlServer2000作为数据源
获取影响行数和ID的存储过程
C# .Net中的类型转换
C#.net常用函数
SQL注入
FCKeditor2.2+ASP.NET2.0不完全攻略
FCKeditor2.2+ASP.NET2.0不完全攻略
【转贴】datagrid数据导出到excel文件给客户端下载的几种方法
GridView动态生成模板列
关于树形控件
asp.net 备份和恢复SQL SERVER 数据库
Asp.net(C#)实现验证码功能
Asp.NET程序中常用的三十三种代码
分割以逗号作为分割符号的字符串并插入到表中
列出一个表中的某个字段重复的记录
DataGrid系列技巧(导出excel,事件,多种方式呈现数据,全选全删)等等等
把以"文本文件(制表符分割)"保存的EXCEL文件导进SQLSERVER2000的DEMO!
总结:ADO.NET在开发中的部分使用方法和技巧 (转贴)
DATAGRID的全选/取消全选控制(CHECKBOX)
使用SqlBulkCopy类加载其他源数据到SQL表
使用SqlBulkCopy类加载其他源数据到SQL表
使用SqlBulkCopy类加载其他源数据到SQL表
一个调查实例<主要训练向panel中添加控件>包括全部代码
ASP.NET 2.0客户端回调的实现分析(3)[ZT]
[原创]把SQL的动态查询改成SQL查询
SQL Server实用经验技巧集
使用 DataAdapter 执行批量更新
treeview的建立,更新,删除
C#实现web信息自动抓取
[收藏].net关于企业Excel报表的生成
将 ASP.NET 2.0 应用程序服务配置为使用 SQL Server 2000 或 SQL Server 2005(转)
.NET进销存系统开发笔记------之Gridview应用
.net 2.0中GridView无限级嵌套的实现
导入Excel电子表格数据到SQLSever数据库的另一种方法
一个购物车的简单实现(多层开发)
ASP.NET2.0中 TreeView 和ORACLE 数据绑定的一种方法
ASP.NET2.0 ObjectDataSource的使用详解(2)
ASP.NET2.0 ObjectDataSource的使用详解(1)
将DataSet更新自动提交到数据库工具类实现
超强扩展性的DNN-DotNetNuke模块功能分类列表(from 中国DNN)
世界上主要的一些搜索引擎
SQL Server 数据库管理常用的SQL和T-SQL语句
Transact SQL 常用语句以及函数[个人推荐]
Survey Admin 示例:实现 Microsoft .NET 基于角色的安全性(转)
NHibernate Step by Step (四)Session、Query及HQL
NHibernate Step by Step (三) Configuration和Sessionfactory
Microsoft .NET Pet Shop 4 架构与技术分析
PetShop的系统架构设计
Asp.Net 2.0 TreeView的Checkbox级联操作
无废话-SQL Server 2005新功能(1) - TSQL
导出导入Excel(DataSet,DataGrid)
DNN开发中的一些细节(1)
DNN开发中的一些细节(2)
ASP.NET2.0: Ilungasoft.Framework.Web之基于Callback的无刷新上传进度条控件[带源码]
TreeView 爱恨之间
Transact SQL 常用语句以及函数
Transact SQL 常用语句以及函数
ASP.NET 2.0 正式版中无刷新页面的开发
DNN开发中的一些细节(1)
ASP.NET2.0快速入门--高级数据方案(3)
结合CodeSmith开发和调试DNN3模块
SqlDataSource WEB控件:当DeleteCommandType="storedProcedure"时
关于TreeView控件专题
利用Treeview做权限树的一种方法
利用Treeview做权限树的一种方法
(新)在ASP.NET中调用存储过程传参数
ASP.NET2.0快速入门系列--高级数据方案(上)
ASP.NET2.0快速入门--高级数据方案(中)
asp/asp.net中遍历树型结构.
ASP.NET 2.0中使用multiview控件
ASP.NET2.0快速入门系列--高级数据方案(上)
DataGrid,GridView和DetailsView中添加删除确认提示
VS2005中用Code Snippets提高开发效率
IIS和ASP.NET2.0
关于vs 2005的一个问题, 解决The path "xxxx' maps to a directory outside this application, which is not supported.
VS2005第一天 Failed to access IIS metabase
无ASPX文件部署(续)
ASP.NET 2.0构建动态导航的Web应用程序(TreeView和Menu )
ASP.NET 2.0基于SQLSERVER 2005的aspnetdb.mdf部署
对vs2005生成dll文件的一点疑惑
ASP.NET 2.0 新特性
WEB Service 下实现大数据量的传输
switch your web application project to use development machine's IIS server
[ASP.NET 2.0 Security FAQs]如何设置SQL Server或SQL Express数据库,使其支持Membership、Profiles和Role
将 ASP.NET 2.0 应用程序服务配置为使用 SQL Server 2000 或 SQL Server 2005(转载)
GridView 控件使用不完全指南!
【原创】asp/asp.net中遍历树型结构.
.NET Pet Shop 4.0案例研究预览篇
关于树形结构的研究的资料收集
单点登录(SSO)的核心--kerberos身份认证协议技术参考(三)
Gridview:在进入编辑模式后动态添加控件
ASP.NET中大结果集的分页[翻译]
Asp.Net Forums研究文章集合(收藏)
ASP.NET2.0中Gridview中数据操作技巧
SQL Server中利用存储过程来高性能地进行分页
关于二级域名Cookie的问题及解决方法
一步一步建网-2-DotNetNuke4-5/6-杂项/感!
通过系统配置来提高ASP.NET应用程序的稳定性
GridView 控件使用不完全指南!(续一)
ASP.NET应用程序的部署--兼谈aspnet_compiler.exe命令
RDLC报表(一)
RDLC报表(七)
GridView 控件使用不完全指南!
DNN皮肤制作
一个登陆页面,包含了初始化用户,输入检测,错误处理等
DNN皮肤制作
基于dotnetnuke的网站全新上线!
[导入]DotNetNuke Skin 與 Container 設計介紹
CodeSmith3.0开发资料下载
CodeSmith开发系列资料总结
提高SQL执行性能方案:如何让你的SQL运行得更快zt
Visual Studio 2005 的101个示例下载
网络数据库挖掘程序的设计
对联广告代码效果大全
网站生成静态页面,及网站数据采集的攻、防原理和策略
[原创]终极防范SQL注入漏洞!
【先锋海盗类】Ver2005 完美版
拿别人的新闻来用,虽然我知道这样不好,还是用了。。。
网页小偷程序ASP.net
数据采集程序(网页小偷)点滴心得
部署安装时写入SQL SERVER和Web.config
将博客园程序从Visual Studio 2003迁移到Visual Studio 2005的尝试
开篇:Nhibernat.Test项目分析之:ConfigurationTest
基于NHibernate的三层结构应用程序开发初步
15分钟内快速构建数据访问层(翻译)
Asp.net 2.0专题二:本地化(Localization)
数据库应用基础系列
深入了解 SQL Server 2000 与 ADO.NET 中的事务隔离及数据锁定
第2章 并发操作的一致性问题 (2)
在asp.net 2.0中使用SqlBulkCopy类迁移数据
使用asp.net 2.0和SQL SERVER 2005构建多层应用
推荐个关于 team system教学的好站点
推荐个关于 team system教学的好站点
DataList控件也玩分页- -
SQL Server 两个触发器例子,大家看看怎么样?
发布一个原创的基于Ajax的通用(组合)查询(续)
在IIS6.0下ASP .NET 的版本冲突问题
FCKeditor应用小记--起步篇
WEB Service 下实现大数据量的传输
菜单控件
55种网页常用小技巧(转载)
[转]Microsoft PetShop 3.0
[转载]用WSE在Web服务中验证用户身份
一次SQL Server 2000修复实践的说明
新数据网格DataGridView简介(转自MSDN)
[转贴]Visual Studio 2005常用插件搜罗
第 4 章 构建以数据为中心的应用程序
网 站 策 划
[转载] 在.net安装程序部署SQL Server数据库
[转载] 在.net安装程序部署SQL Server数据库
ASP.NET程序中常用代码汇总(一)(转载)
ASP.NET程序中常用代码汇总(二)(转载)
ASP.NET程序中常用代码汇总(三)(转载)
ASP.NET程序中常用代码汇总(四)(转载)
ASP.NET程序中常用代码汇总(五)(转载)
露雨资源库(第一个.net2.0软件)二
ADO.NET 2.0 大批量数据操作和多个动态的结果集
本文转自钢钢博客园博客,原文链接:http://www.cnblogs.com/xugang/archive/2008/01/20/1045957.html,如需转载请自行联系原作者
在数据库中能不能像用excel那样直接填表保存进数据库,而不是用SQL语句
如何在sql2005表中直接填写数据? 在数据库中能不能像用excel那样直接填表保存进数据库,而不是用SQL语句
2011-4-19 14:37
提问者:善良的噜噜修 | 悬赏分:20 | 浏览次数:372次
如图,我很郁闷,直接填表总是无法保存……每次想填点数据都只能用insert语句,太麻烦了……而且我还不知道用INSERT语句如何批量添加……
2011-4-19 15:10
最佳答案
下个SQL2005可视化界面 可以直接添加删除修改就更excel一样
这是下载地址http://www.microsoft.com/downloads/zh-cn/details.aspx?displaylang=zh-cn&FamilyID=c243a5ae-4bd1-4e3d-94b8-5a0f62bf7796
追问
谢了,是我SQL版本的问题,我的是VS2008自带的SQLserver2005最简版……所以没那功能……我还是写SQL语句去好了……
0
| 评论
向TA求助
回答者: 水煮你妹 | 二级采纳率:100%
擅长领域: C#/.NET 其他编程语言
参加的活动: 暂时没有参加的活动
相关内容
2009-1-24 sql2005怎么实现数据库或者表的导出,比如导出成excel 4
2010-6-30 Sql2005数据库——怎么把excel表导入到我指定的表中
2011-3-18 像这样的excel表怎么插入数据库(sql2005)呢?需要建表还是不要建... 1
2011-8-17 sql2005数据库,从A表删除2011年1月1日前的数据,现在硬盘没有空间...
2011-7-27 在sql2005怎样编写语句判断输入的数据是否在数据库的表中?比如库... 1
更多关于如何在 sql数据库中用excel 建立临时表的问题>>
等待您来回答
1回答10sql server 2005 在建立与服务器的连接时出错,不允许远程链接
0回答Miscrosft SQL Server 2005 如何安装?
2回答SQL 2005 批量设置自增列
0回答80Ruby怎么远程访问SQL 2005 server进行还原备份操作?其他方法亦可(cm...
1回答急急。。。在vs2010中连接不了sql2005怎么办?
0回答30不支持此服务器版本。仅支持Microsoft SQL Server 2005以下版本的服务...
0回答20我的电脑安装了SQL2005,现在有一个SQL+asp的源码,请问需要装什么软...
0回答20求JSP+SQL2005网上书店源码要MyEclipse能导入进去的运行的。数据库最...
更多等待您来回答的问题>>
其他回答 共3条
2011-4-19 15:09 呐疯籽 | 二级
通过前面几篇 SQL语言教程 中,我们已说到这一篇要介绍的是Insert Into的另一种用法,也就是把检索出来的数据,批量添加到数据库中,其语法是:
INSERT INTO 表格名1 (列名11,列名12, ...) SELECT 列名21, 列名22, ... FROM 表格名2
以上的语法是最基本的语法。在Select后,还可能含有 WHERE、 GROUP BY、 及 HAVING 等子句,以及表格连接及别名等等。与Select Into对比,Select Into中目标表名应该在数据库中是不存在的,而 Insert Into Select正好相反,其目标表名在数据库中一定要存在的。
下面的这个例子,是把出仓表中的所有的钢笔数据,添加到上一篇文章http://www.excelba.com/Art/Html/310.html 生成的临时表的数据库中,如果你没有看到上一篇文章,请运行上一篇文章的程序生成临时表后,再运行下面这段程序。
Sub 进销存表数据库中出仓表里检索的数据添加到已有的表()
'*******************************************
'时间:2008-10-21
'作者:bengdeng
'功能:在程序文件同一目录下进销存表数据库中出仓表里检索的数据生成新表
'注意:要在工具/引用中引用microsoft activex date objects x.x
' 其中x.x为版本号,可能会因为你安装的office的版本不同而不同,本例引用了2.5版
'发布:http://www.excelba.com
'*******************************************
Dim conn As ADODB.Connection
Dim WN As String
Dim OldTableName As String
Dim NewTableName As String
Dim sSql As String
Dim tStr As String
WN = "进销存表.mdb"
OldTableName = "出仓表"
NewTableName = "临时表"
tStr = "钢笔"
Set conn = New ADODB.Connection
conn.ConnectionString = "Provider=Microsoft.Jet.Oledb.4.0;" & _
"Data Source=" & ThisWorkbook.Path & "\" & WN
conn.Open
If conn.State = adStateOpen Then
sSql = "Insert Into " & NewTableName & " Select * From " & OldTableName & " Where 物品名称='" & tStr & "'"
conn.Execute sSql
MsgBox "成功把“" & OldTableName & "”中的所有的“" & tStr & "”记录汇总到“" & NewTableName & "”中!", , "http://excelba.com"
conn.Close
End If
Set conn = Nothing
End Sub
因为上一篇文章生成的临时表与出仓表的结构是完全相同的,因此正如上面的例子,我们不需要列出NewTableName中列明细资料,而OldTableName的列的资料,我们也可以用*来表示!
那么,如果列名不一样,能不能导入呢?当列的数据类型一致时,还是可以导入的,下面的这段操作Excel文件的程序,功能是把进仓表的毛笔数据,导入到临时表中,其中进仓表的进仓日期对应着临时表的出仓日期,进仓数量对应着出仓数量,代码如下:
Sub 进销存表文件中进仓表里检索的数据添加到已有的表()
'*******************************************
'时间:2008-10-21
'作者:bengdeng
'功能:在程序文件同一目录下进销存表文件中进仓表里检索的数据生成新表
'注意:要在工具/引用中引用microsoft activex date objects x.x
' 其中x.x为版本号,可能会因为你安装的office的版本不同而不同,本例引用了2.5版
'发布:http://www.excelba.com
'*******************************************
Dim conn As ADODB.Connection
Dim WN As String
Dim OldTableName As String
Dim NewTableName As String
Dim sSql As String
Dim tStr As String
WN = "进销存表.xls"
OldTableName = "进仓表"
NewTableName = "临时表"
tStr = "毛笔"
Set conn = New ADODB.Connection
conn.ConnectionString = "Provider=Microsoft.Jet.Oledb.4.0;" & _
"Extended Properties=Excel 8.0;" & _
"Data Source=" & ThisWorkbook.Path & "\" & WN
conn.Open
If conn.State = adStateOpen Then
sSql = "Insert Into [" & NewTableName & "$] (出仓日期,物品名称,出仓数量) " & _
"Select 进仓日期 As 出仓日期,物品名称,进仓数量 As 出仓数量 From [" & _
OldTableName & "$] Where 物品名称='" & tStr & "'"
conn.Execute sSql
MsgBox "成功把“" & OldTableName & "”中的所有的“" & tStr & "”记录汇总到“" & NewTableName & "”中!", , "http://excelba.com"
conn.Close
End If
Set conn = Nothing
End Sub
Insert Into Select就介绍完了,现在可以动手复制一下上面的代码,运行一下看一下效果吧*^_^*。
如果你不是从第一篇 SQL语言教程 看起,你需要到http://www.excelba.com/Soft/Html/119.html 下载文件,压缩文件包含三个文件,数据库文件——进销存表.mdb与Excel文件——进销存表.xls就是保存数据的文件,而主文件.xls就是主程序文件,以后大家的代码可以添加在这个文件的新模块里,然后再运行程序代码。
转载请注明:本文来自:Excel吧 (www.excelba.com) 详细出处参考:http://www.excelba.com/Art/Html/311.html
追问
= =!
谢了……我现在用的不是VB而是C#……
0
| 评论
2011-4-19 15:38 fxy6781349 | 三级
输入完成以后离开输入那行 鼠标移动到其他行 刷新或者按F5 或者按!号执行都可以 insert批量添加?貌似没有加过 因为值都不一样啊 怎么批量嘛 可以写一条SQL 复制粘贴嘛
0
| 评论
2011-4-19 15:54 cheriehenshao | 一级
直接填表保存是 你填完后 右击全选那个单元格(你这张表编号左边那个)-执行! 就保存好了。
insert批量添加是 insert into Table_1 values(111,222,333,444);
括号里按照你列的顺序依次填写,注意数据类型和约束等。
0
| 评论
本文转自9pc9com博客,原文链接: http://blog.51cto.com/215363/744809 如需转载请自行联系原作者
bboss自动代码生成工具使用指南
本文介绍bboss自动代码生成工具使用方法
工具在线试用:
http://gencode.bbossgroups.com
在介绍之前首先了解一下bboss自动代码生成工具能帮助我们做哪些事情。
通过自动代码生成框架,根据模板可以自动生成数据库表的增、删、改、分页查询、列表查询、国际化功能对应的java、jsp程序和配置文件,包括:
1.mvc控制器
2.业务组件
3.PO实体类
4.jsp文件 可以定制不同风格的界面模板,目前提供了一套bboss平台的基础ui风格和一套bboss普通ui风格模板
5.cxf webservice服务类文件
6.hessian服务类文件
7.sql配置文件
8.ioc/mvc组件装配部署和服务发布配置文件.
9.国际化属性文件和国际化配置
10.代码和配置文件集成配置部署readme说明文件
更多的介绍参考文档:
http://www.iteye.com/news/31078-bboss-gencode
下面介绍具体用法。
第一步 工具安装
从bboss官网下载安装包:下载
下安装包后直接解压,解压后的目录结构为:
运行解压目录下的startup.bat(linux下执行startup.sh)
然后在chrome或者火狐浏览器下访问地址:
http://localhost/gencode
如果需要定制一些配置,可以修改解压目录下的config.properties文件:
config.properties内容如下:
修改启动的端口和应用上下文
port=80
context=gencode
如果需要修改代码的存放目录(默认为运行目录下的sourcecode目录),就打开配置属性sourcepath并修改:
#sourcepath=d:/sourcecode
如果需要修改存放表单配置的sqlite数据库的路径(不设置的话默认为运行目录),就打开配置属性sqlitepath并修改:
#sqlitepath=d:/gencodedb
从github下载源码构建安装:
https://github.com/bbossgroups/bboss-gencode
svn源码下载地址:
https://github.com/bbossgroups/bboss-gencode/trunk
源码下载完毕,解压到目录d:/bboss-gencode(指定自己的目录即可),采用gradle进行构建:
1.安装gradle 并将gradle设置到环境变量
2.在命令行执行
cd d:/bboss-gencode
以war包方式发布版本(可以部署到tomcat等容器中运行工具),则执行指令:
gradle :gencode-web-app:releaseRuntimeWar
以zip包方式发布版本(内置jetty容器,解压zip包,linux/mac/unix等环节运行startup.sh,windows环境运行里面的startup.bat即可),则执行指令:
gradle :gencode-web-app:releaseRuntimeZip
3.构建成功后(gradle :gencode-web-app:releaseRuntimeZip):
windows环境下运行d:/bboss-gencode/gencode-web-app/build/dist/gencode/startup.bat
linux/unix/mac os环境下运行startup.sh
同时在d:/bboss-gencode/gencode-web-app/build/distributions会发布出一个带jetty容器独立运行的zip包和可以部署到tomcat的war包:
gencode-4.10.8.zip
gencode-4.10.8.war
4.10.8是版本号,会根据版本变动。
即可启动自动代码生成框架应用,在浏览器端(支持谷歌或者火狐浏览器)访问以下地址,可以在界面中配置数据源,配置表单,生成源代码并打包下载生成的源码文件,浏览源码部署集成说明:
http://localhost/gencode
如果看到以下界面说明安装成功:
以上都是在内置的jetty容器中运行自动代码生成工具,如果需要在tomcat等容器中运行,则需要将构建生成的gencode.war包部署到tomcat中即可,但是需要修改war包中文件WEB-INF/web.xml的相关内容:
<init-param>
<param-name>iocLifeCycleEventListenerParams</param-name>
<!-- 指定sqlite数据库文件路径参数sqlitepath和源代码存放目录路径参数sourcepath
sourcepath:如果没有设置sourcepath参数,那么需要在代码配置界面上或者代码生成组件上指定源码存放路径
-->
<param-value>sqlitepath=d:/gencodedb|sourcepath=d:/sourcecode</param-value>
</init-param>
参数iocLifeCycleEventListenerParams中维护了sqlitepath(sqlite数据库文件路径)和sourcepath(代码存放路径)两个参数,根据自己本机的路径修改即可。
第二步 添加数据源
为了能够对数据库中的表生成代码,需要配置相应的数据源,参考下图:
点击新增DS即可,然修改相关属性(注意数据源名称不能重复,不能使用gencode这个内置数据源名称)。
典型的数据源配置参考:
oradle
数据源驱动: oracle.jdbc.driver.OracleDriver
数据源地址:jdbc:oracle:thin:@202.197.40.177:1521:ora177
mysql
数据源驱动: com.mysql.jdbc.Driver
数据源地址:jdbc:mysql://localhost:3306/myproject?useUnicode=true&characterEncoding=utf-8
同时也可以修改和删除已有数据源。
第三步 选择数据库表并生成代码
选择数据源:
选择表
然后点击进入表单配置,即可
如果需要重新加载数据源中的表结构,可以点击刷新表结构
第四步 配置表单
选择好表并进入表单界面:
在表单配置界面可以配置三部分内容:
基本信息配置
模块名称 指定模块英文名称
模块中文名称 指定模块中文名称
包路径 指定java程序存放的包路径
jsp相对路径 指定jsp文件存放的相对路径
系统名称 指定模块对应的系统名称,一般不需要指定
界面风格 default|common 指定ui风格模块,default针对bboss平台(参考文档:基于bboss开发平台eclipse开发工程生成工具介绍搭建bboss平台开发环境),common针对bboss框架(可以将这种风格模块生成的代码集成到eclipse工程:bboss-gencode/commonstyle,然后按照自动生成部署说明文档部署运行代码即可。
代码控制参数 控制生成的代码范围,取值范围(可以根据需要进行选择配置):
geni18n 选中则生成国际化配置功能
clearSourcedir 生成代码时清除之前的文件
genRPC 生成webservice和hessian服务
autopk 自动生成主键 默认采用UUID生成主键,也可以结合tableinfo表中表主键生成
print 自定生成打印功能(暂未实现)
genwf 自动生成工作流功能(暂未实现)
excel版本号 设置excel导出功能,暂未实现
唯一标识字段 指定表的唯一标识字段
主键SEQ名称 tableinfo表中主键配置信息(针对bboss平台)
分页机制 提供两种分页机制选项:
【默认分页机制】适用数据库oracle,mysql,maradb,sqlite,postgres
【Rownumber Over(Order By)】适用数据库oracle,mysql,maradb,sqlite,postgres,derby,mssql server2005/2008,db2
指定DB操作数据源 可以设置服务组件中通用dao执行DB操作的数据源,不指定时在poolman中配置的第一个数据源上执行所有DB操作
版权信息配置
作者
公司
版本号
字段信息配置
字段信息配置可以指定每个字段的配置:
java类型
中文名称
日期格式
数字格式
查询条件
查询方式
日期范围查询
排序字段
默认排序字段:多个排序字段时,指定一个默认排序字段
排序方式
列表字段 控制字段在列表中显示、隐藏(作为隐藏域)、忽略(不在列表页面出现,也不隐藏)
编辑控制: 控制字段在编辑页面显示、隐藏、忽略、只读、可编辑、必填
添加控制: 控制字段在编辑页面显示、隐藏、忽略、只读、可编辑、必填
查看控制: 控制字段在编辑页面显示、隐藏、忽略
默认值
类型校验
显示长度 根据指定长度在列表页面对字段值进行截取
替换串 根据指定长度在列表页面对字段值进行截取,截取部分用替换串进行替换
字段注释:维护PO对象属性注释,默认采用表字段注释作为PO对象属性注释,如果不填写字段注释或者表字段没有注释,采用字段中文名称作为注释
字段列表中除了可以配置字段外,可以调整字段的顺序,只要鼠标拖拉字段到对应的位置就可以进行排序。
配置完毕后点击暂存和生成代码即可,代码生成好后立马可以查看部署说明、下载代码、在线浏览源码。
代码配置历史记录管理
在线浏览代码
jxl导入/导出Excel(Maven)
About
jxl is a pure java 5 super-project that includes Enclosure, Peermi, Enshell, and Xlp.
jxl && POIjxl是一个开源的Java Excel API项目,通过Jxl,Java可以很方便的操作微软的Excel文档。除了Jxl之外,还有Apache的一个POI项目,也可以操作Excel,两者相比之下:Jxl使用方便,但功能相对POI比较弱,很多时候,一个软件应用程序需要生成Microsoft Excel文件格式的报告。有时,一个应用程序甚至希望将Excel文件作为输入数据。例如,一个公司开发的应用程序将财务部门需要所有输出生成自己的Excel。Apache POI是一种流行的API,它允许程序员使用Java程序创建,修改和显示MS Office文件。这由Apache软件基金会开发使用Java分布式设计或修改Microsoft Office文件的开源库。它包含类和方法对用户输入数据或文件到MS Office文档进行解码。
使用jxl导出excel
使用jxl导出Excel 首先先在pom.xml添加依赖
<!--jxl-->
<dependency>
<groupId>net.sourceforge.jexcelapi</groupId>
<artifactId>jxl</artifactId>
<version>2.6.12</version>
</dependency>
前台界面
我们现在需要在页面上点击导出Excel按钮就可以把表格导出来
首先我们在JSP中定义这个按钮
<div id="div_export">
<a class="easyui-linkbutton" data-options="iconCls:'icon-export'" data-cmd="exportFile">导出excel</a>
</div>
接着需要在js文件实现exportFile函数
/*导出文件*/
exportFile: function () {
window.location.href = "/underwrite_export.do"
},
后台业务
这时js会跳转到url:underwrite_export.do
这时浏览器会根据域名查找 Spring会根据映射的url在Controller执行对应的方法
//==========导出Excel===========
@PermissionName("核保审核结果导出")
@RequestMapping("/underwrite_export")
@RequiresPermissions("underwrite:export")
@ResponseBody
public void exportFile(HttpServletResponse response) throws Exception {
// 1.文件下载响应头
response.setHeader("Content-Disposition", "attachment;filename=underwrite.xls");
// 2.响应到浏览器
WritableWorkbook workbook = Workbook.createWorkbook(response.getOutputStream());
// 创建工作簿sheet
WritableSheet sheet = workbook.createSheet("underwrite", 0);
// 3.设置column名
sheet.addCell(new Label(0, 0, "承保机构"));
sheet.addCell(new Label(1, 0, "申请单号"));
sheet.addCell(new Label(2, 0, "产品名称"));
sheet.addCell(new Label(3, 0, "投保人"));
sheet.addCell(new Label(4, 0, "申请时间"));
sheet.addCell(new Label(5, 0, "提交员工"));
sheet.addCell(new Label(6, 0, "提交状态"));
sheet.addCell(new Label(7, 0, "审核状态"));
sheet.addCell(new Label(8, 0, "额度"));
// 4.把核保的数据填充到工作簿中 service调用selectExport()查询数据库
List<UnderwriteWait> list = service.selectExport();
System.out.println(list.toArray());
try{
for (int i = 0, j = 1; i < list.size(); i++, j++) {
UnderwriteWait underwrite = list.get(i);
//System.out.println(underwrite);
//设置列宽
sheet.setColumnView(i, 16);
//重新设置部分列宽
sheet.setColumnView(3, 14);
sheet.setColumnView(6, 10);
sheet.setColumnView(7, 10);
//设置行高
sheet.setRowView(i, 350);
//设置字体的attribute
WritableFont font1=new WritableFont(WritableFont.createFont("楷体 _GB2312"), 12, WritableFont.NO_BOLD);
WritableCellFormat format1=new WritableCellFormat(font1);
System.out.println(underwrite.getId());
sheet.addCell(new Label(0, j, underwrite.getOrg().getName(),format1));
sheet.addCell(new Label(1, j, underwrite.getApplyordernumber(),format1));
sheet.addCell(new Label(2, j, underwrite.getCarinsuranc().getInsName(),format1));
sheet.addCell(new Label(3, j, underwrite.getClient().getName(),format1));
String applydate=underwrite.getApplydate().toLocaleString().substring(0,9);
sheet.addCell(new Label(4, j, applydate,format1));
sheet.addCell(new Label(5, j, underwrite.getEmployee().getRealname(),format1));
String stateApply=(underwrite.getStateApply().toString().equals("0")) ? "未审核":"已提交";
sheet.addCell(new Label(6, j,stateApply));
String stateAudit=(underwrite.getStateAudit().toString().equals("1")) ? "已提交":"已审核";
sheet.addCell(new Label(7, j, stateAudit));
sheet.addCell(new Label(8, j, underwrite.getAmount().toString(),format1));
}}catch (Exception e){
e.printStackTrace();
}
// 5.写入数据
workbook.write();
// 6.关闭资源
workbook.close();
}
这时我们就把jxl导出excel的功能做完了
jxl导入Excel
js文件
/*导入文件*/
importFile: function () {
/*清空表单*/
$("#underwrite_file").form("clear");
/*打开弹出框*/
$("#underwrite_file").dialog("open");
}
后台Controller
@PermissionName("资料导入")
@RequestMapping("/underwrite_import")
@RequiresPermissions("underwrite:import")
public String importFile(MultipartFile file) throws Exception {
// 1.获取用户上传的文件
Workbook workbook = Workbook.getWorkbook(file.getInputStream());
// 2.获取工作簿sheet
Sheet sheet = workbook.getSheet(0);
// 3.获取总行数
int rows = sheet.getRows();
for (int i = 1; i < rows; i++) {
Underwrite underwrite = new Underwrite();
underwrite.setXxx(sheet.getCell(0, i).getContents());
underwrite.setXxx(sheet.getCell(1, i).getContents());
employee.setXxx(sheet.getCell(2, i).getContents());
employee.setEmail(sheet.getCell(3, i).getContents());
// 4.添加到数据库中
service.insert(underwrite);
}
// 5.关闭资源
workbook.close();
return "underwrite";
}
jxl常用操作
a、数据格式化
在Excel中不涉及复杂的数据类型,能够比较好的处理字符串、数字和日期已经能够满足一般的应用。
字串格式化
字符串的格式化涉及到的是字体、粗细、字号等元素,这些功能主要由WritableFont和WritableCellFormat类来负责。假设我们在生成一个含有字串的单元格时,使用如下语句,为方便叙述,我们为每一行命令加了编号:
①WritableFont font1= new WritableFont(WritableFont.TIMES, 16, WritableFont.BOLD);
//或设置字体格式为excel支持的格式
WritableFont font3=new WritableFont(WritableFont.createFont("楷体 _GB2312"), 12, WritableFont.NO_BOLD);
② WritableCellFormat format1=new WritableCellFormat(font1);
③ Label label=new Label(0, 0, "data 4 test", format1);
其中
①指定了字串格式:字体为TIMES,字号16,加粗显示。
WritableFont有非常丰富的构造子函数,供不同情况下使用,jExcelAPI的java-doc中有详细列表,这里不再列出。
②处代码使用了WritableCellFormat类,这个类非常重要,通过它可以指定单元格的各种属性,后面的单元格格式化中会有更多描述。
③处使用了Label类的构造子,指定了字串被赋予那种格式。在WritableCellFormat类中,还有一个很重要的方法是指定数据的对齐方式,比如针对我们上面的实例,可以指定:
//把水平对齐方式指定为居中
format1.setAlignment(jxl.format.Alignment.CENTRE);
//把垂直对齐方式指定为居中
format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
//设置自动换行
format1.setWrap(true);
b、单元格操作
Excel中很重要的一部分是对单元格的操作,比如行高、列宽、单元格合并等,所幸jExcelAPI提供了这些支持。这些操作相对比较简单,下面只介绍一下相关的API。
1、合并单元格
//作用是从(m,n)到(p,q)的单元格全部合并
WritableSheet.mergeCells(int m, int n, int p, int q);
比如:
WritableSheet sheet=book.createSheet("第一页", 0);
//合并第一列第一行到第六列第一行的所有单元格
//合并既可以是横向的,也可以是纵向的。合并后的单元格不能再次进行合并,否则会触发异常。
sheet.mergeCells(0, 0, 5, 0);
c、行高和列宽
//作用是指定第i+1行的高度
WritableSheet.setRowView(int i, int height);
比如:将第一行的高度设为200
sheet.setRowView(0, 200);
//作用是指定第i+1列的宽度,
WritableSheet.setColumnView(int i,int width);
比如:将第一列的宽度设为30
sheet.setColumnView(0, 30);
a、jxl导出excel乱码问题,jxl导出excel乱码在导出excel时,发现中文的标题乱码,试了N种编码方式,开始总是试图转为utf-8、gb2312、gbk,没想到转为iso-8859-1中文乱码的问题解决了
fileName = new String(fileName.getBytes(),"iso-8859-1");
response.setCharacterEncoding("gb2312");response.reset();
response.setContentType("application/OCTET-STREAM;charset=gb2312");
response.setHeader("pragma", "no-cache");
response.addHeader("Content-Disposition", "attachment;filename=\""+ fileName + ".xls\"");// 点击导出excle按钮时候页面显示的默认名称
workbook = Workbook.createWorkbook(response.getOutputStream());
jasper在JSP中导出pdf和xls
环境配置
1 正确安装配置java的jdk
2 将ireport放到c:/ireport
3 将ant放到c:/ant(我用的是bea的ant路径是D:/bea/weblogic81/server/ant)
4 将jasperreports-1.2.0.jar 放置到当前classpath中(没有加,我使用的Ireport/lib下已经存在了)
5 将itext-1.3.1.jar放置到c:/ireport/lib(没有加,我使用的Ireport/lib下已经存在了)
6 修改ireport/ireport.bat文件,加入以下内容
set JAVA_HOME=C:/j2sdk1.4.2
set ANT_HOME=D:/bea/weblogic81/server/
set IREPORT_HOME=c:/ireport rem %ANT_HOME%/bin/ant javadocs %ANT_HOME%/bin/ant iReport
我修改的是:
set JAVA_HOME=C:/j2sdk1.4.2
set ANT_HOME=D:/bea/weblogic81/server/
set IREPORT_HOME=F:/backup/iReport-1.2.0 rem %ANT_HOME%/bin/ant javadocs %ANT_HOME%/bin/ant iReport
(不过对以上修改,感觉没有什么用处)
7 提供一个正常提供服务的数据库
现在高版本的ireport是不需要进行配置,可以直接使用的.
了解制作报表用的包
1 jasperreports-1.0.1.jar jasperreports是iReport的核心内容,jsperreport是一个报表制作程序,用它的规则制定一个xml文件,然后编译生成一个.jsper文件,这个.jsper文件是我们真正使用的,它很象.jsp文件,使用的是它编译后的servlet.
(http://jasperreports.sourceforge.net/)
2 itext-1.3.1.jar iText是一个开放源码的Java类库,是用来生成PDF文件的。如果要在生成的pdf文件显示中文等亚洲字符,还必须下载itext的亚洲字符包iTextAsian.jar (http://itextdocs.lowagie.com/downloads/iTextAsian.jar)
3 jfreechart-1.0.0-rc1.jar jfreechart是一款免费的、功能强大的统计图生成工具,可以直接生成PNG,JPG等各式的文件。 (http://www.jfree.org/jfreechart/)
4 jcommon-1.0.0-rc1.jar JCommon是一组有用的classes集合.它已经用在JFreeChart,JFreeReport与其它项目上. 这个类库包含了以下功能: 文本工具类(text utilities),
用来显示关于应用程序信息的用户界面类, 布局定制管理器, 一个日期选择面板, 序列化工具类, XML解析器支持类. (http://www.jfree.org/jcommon/)
5 poi-2.0-final-20040126.jar Apache的Jakata项目的POI子项目,目标是处理ole2对象。目前比较成熟的是HSSF接口,处理MS Excel(97-2002)对象。它不象我们仅仅是用csv生成的没有格式的可以由Excel转换的东西,而是真正的Excel对象,你可以控制一些属性如sheet,cell等等。直接调用poi包的不是ireport,而是jasperreport。
(http://www.apache.org/dyn/closer.cgi/jakarta/poi/)
使用介绍
1 启动:点击ireport/ireport.bat启动
2 修改语言环境:tools-option-general中language中更改-apply
3 创建报表 file-new document 输入名字-ok Portrait是纵向,Landscape是横向。
4 连接数据源 datasource-connection/datasource-new-connections porperties- 输入名字-选择jdbc Driver,jdbc url-输入username和password,-test测试通过表明数据源连接正确-save保存 (注意:必须保证数据库驱动在lib目录下)
5 基本域说明
title域用来放报表的总标题
pageHeaher域顾名思义页头
columnHeader域是用来放static text的,也就是不循环的部分。
detail域是用来放text field的,也就是循环部分。
pageFooter域是用来放本页的统计参数的。
summary域是用来放整个表的统计参数的。
可以直接调整每个域的长度,也可以通过Band properties来调整 (在我的项目中,只设置的title和detail,在title中显示报表的总标题和所有parameters字段,在detail中显示需要循环的列表字段)
6 在报表中添加字段static text edit-insert element -static text 鼠标拖拉添加在页面中双击或者右键properties在static text Tab 中输入字段名字,如果显示有乱码,font-font name中选择"中文GB2312" border 中可以设置表格边线样式
7 在报表中添加字段text field edit-insert element -text field 鼠标拖拉添加在页面中双击或者右键properties在text field 中输入字段名字, 样式如同$F{text_field_name},
f表示为field变量,是数据库中抽取出来的,你想在报表中显示的数据库内容,
p为parameter参数,是应用需要提供给报表的入口,比如想在报表被解释的时候提供where语句的条件值, 就可以用$P(parameterName)比如: select * from bugs where proname=$P{projectName}
order by proname,modulename
v为变量(显示字体颜色为绿色,表示格式正确) border 中可以设置表格边线样式
8 调整报表布局鼠标拖动各个字段,拼接想要的报表布局,如果鼠标点击字段, 显示为红色,说明该字段跨越了两个域显示为绿色,说明两个字段叠加显示为蓝色,说明该字段位置正确
9 报表添加SQL查询语句 资料来源->报表查询(datasource-report query) 在Report SQL query里填写SQl语句。如果语句正确,在下面的field里就会显示正常的表字段。 (可以从显示的所有字段中选取想用做field的字段,点击ok后,自动添加为field动态字段)
10 为报表添加动态字段预览->报表字段(view-Fields) 新建一个字段,字段名字必须和报表中Fields中添加名字一直,同时必须是sql结果集中存在的. (把fields里的字段直接拖到报表上也行)
11 为SQL语句添加参数 预览->报表参数(view-parameters) 在parameters里新增一个参数 paratemeter name 是参数名,在SQL语句里写成"$P{参数名}" paratemeter class type里选择参数类型。 注意:如果是int型的数据,最好在报表字段里将该字段的Class type改成java.lang.String型的。 另外一种办法,不管该字段原来是什么数据类型,直接在paratemeter class type里选择java.lang.String类型,
后在Default value expression 填写"Integer.toString(整数)"。
12 添加报表变量 预览->报表变量 $V{变量名}(没有用到过!)
13 处理字体 选中字段->右键->properties->font(双击也可以) Report font 选择全局的字体(仅限于该报表) Font name 选择在ireport里面显示的字体 Pdf font name 选择在pdf里面显示的字体 Rotation 选择内容是否旋转(很有用的选项) PDF Encoding 中文要用UniGB-UCS2-H,外部字体要选Identity-H
14 设定该报表的全局字体 预览->报表字型(view-font)
15 编译jrxml 建立->编译 (build-compile) 编译后生成一个后缀名为jasper的binary文件,可以直接给程序调用。
web项目应用
1 jsp输出PDF报表
需要放到项目里的包 itext-1.3.1.jar iTextAsian.jar jasperreports-1.0.1.jar jsp
输出PDF的例子
{
<%@ page import="java.sql.*" %>
<%@ page import="java.util.*" %>
<%@ page import="java.io.*" %>
<%@ page import="net.sf.jasperreports.engine.JasperFillManager"%>
<%@ page import="net.sf.jasperreports.engine.JasperPrint"%>
<%@ page import="net.sf.jasperreports.engine.JRException"%>
<%@ page import="net.sf.jasperreports.engine.JasperRunManager"%>
<%
String rowid = "1";//初始化变量
Connection conn= DriverManager.getConnection("proxool.test");//从数据源连接数据库
//装载jasper文件application
File exe_rpt = new File(application.getRealPath("/reports/test.jasper"));
//rowid就是iReport的变量$P{rowid}的名称
Map parameters = new HashMap();
parameters.put("rowid",rowid);
try{
// fill
JasperPrint jasperPrint = JasperFillManager.fillReport(exe_rpt.getPath(),parameters,conn);
// 生成pdf
byte[] bytes = JasperRunManager.runReportToPdf(exe_rpt.getPath(),parameters,conn);
response.setContentType("application/pdf");
response.setContentLength(bytes.length);
ServletOutputStream ouputStream = response.getOutputStream();
ouputStream.write(bytes,0,bytes.length);
ouputStream.flush();
ouputStream.close();
conn.close();
}catch(JRException ex){
out.print("Jasper Output Error:"+ex.getMessage());
}
%>
}
jsp输出EXCEL报表
需要放到项目里的包 jasperreports-1.0.1.jar poi-2.0-final-20040126.jar
输出excel要注意的:
(1) 输出excel报表必须fields的边界刚好填充满整个页面,不然会有大量的空白出现。
(2) 删除记录最下面的空行需要加上参数 exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,Boolean.TRUE);
(3) 删除多余的ColumnHeader需要加上参数 exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET,Boolean.FALSE);
(4) 在ireport里给fields加上border,那输出的excel就会有很黑的边框,跟excel默认的灰度边框就会很不协调。但是如果不加border,在输出的excel里就不会显示每个表格的边框。
解决方法是: 第一步 在选中字段->右键->properties->Common->Transparent 打上勾。 第二步 在输出的jsp页面加上参数 exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND,Boolean.FALSE);
2 jsp输出EXCEL的例子
{
<%@ page import="java.sql.*" %>
<%@ page import="java.util.*" %>
<%@ page import="java.io.*" %>
<%@ page import="net.sf.jasperreports.engine.JasperFillManager" %>
<%@ page import="net.sf.jasperreports.engine.JasperPrint"%>
<%@ page import="net.sf.jasperreports.engine.JRException"%>
<%@ page import="net.sf.jasperreports.engine.JRExporterParameter"%>//excel
<%@ page import="net.sf.jasperreports.engine.export.JRXlsExporterParameter"%>//excel
<%@ page import="net.sf.jasperreports.engine.export.JRXlsExporter"%>//excel
<%
String rowid = "1";
Connection conn= DriverManager.getConnection("proxool.test");
//装载jasper文件application
File exe_rpt = new File(application.getRealPath("/excel/test_excel.jasper"));
//rowid就是iReport的变量$P{rowid}的名称
Map parameters = new HashMap();
parameters.put("rowid",rowid);
try{
// fill
JasperPrint jasperPrint = JasperFillManager.fillReport(exe_rpt.getPath(),parameters,conn);
// excel输出
ByteArrayOutputStream oStream = new ByteArrayOutputStream();
JRXlsExporter exporter = new JRXlsExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, oStream);
exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,Boolean.TRUE); // 删除记录最下面的空行
exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET,Boolean.FALSE);// 删除多余的ColumnHeader
exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND,Boolean.FALSE);// 显示边框
exporter.exportReport();
byte[] bytes = oStream.toByteArray();
if(bytes != null && bytes.length > 0) {
response.reset();
response.setContentType("application/vnd.ms-excel");
response.setContentLength(bytes.length);
ServletOutputStream ouputStream = response.getOutputStream();
ouputStream.write(bytes,0,bytes.length);
ouputStream.flush();
ouputStream.close();
}else{
out.print("bytes were null!");
}
conn.close();
}catch(JRException ex){
out.print("Jasper Output Error:"+ex.getMessage());
}
%>
}
总结 ireport可以显示图表,饼图,曲线图等,也可以显示符合报表
JasperReports介绍:
使用JasperReports生成报表是非常简单的,仅仅使用net.sf.jasperreports.engine包中的几个类即可完成报表的生成、预览、打印、导出等各个功能。
1. net.sf.jasperreports.engine.JasperCompileManager类。
使用这个类的几个静态方法即可完成对报表的编译工作(具体参见api文档)
编译完成后可以JasperCompileManager有两种处理方式:
1> 返回一个JasperReport对象
2> 在.jrxml文件所在的目录生成一个.jasper文件
这两种方式是由程序员自己选择的。不过我比较倾向使用.jasper文件,毕竟报表的结构不是每天都在改动,所以每次重新编译报表并不是很划算。
2. net.sf.jasperreports.engine.JasperFillManager类
这个类的作用是用数据填充报表。它可以使用JasperReport对象也可以使用。jasper文件做为报表模板。
它同样有2中处理方式:
1> 返回一个JsaperPrint对象。
2> 在.jasper文件所在目录生成一个.jrprint文件
这个类使用net.sf.jasperreports.engine.JRDataSource接口的实现做为数据源。任何实现了JRDataSource的类均可做为数据源使用
在net.sf.jasperreports.engine.data包中定义了一些数据源,可根据自己的需要选择。这里我使用的是JRTableModelDataSource做为
数据源(因为我的报表还要显示在Table中)。
3. net.sf.jasperreports.engine.JasperPrintManager和net.sf.jasperreports.engine.JasperExportManager
者两个类的作用是打印、导出报表
他们使用 JasperPrint 和 .jrprint文件做为输入。
可以根据自己的需要使用里面的方法。
例:
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.view.*;
public class CompileReport {
public static void main(String args[]) {
try {
//编译report.jrxml并在report.jrxml所在的目录中生成report.jasper文件
JasperCompileManager.compileReportToFile("report.jrxml");
//填充数据,这里使用的是JREmptyDataSource
JasperFillManager.fillReportToFile("report.jasper", null, new JREmptyDataSource(50));
//预览报表,false代表不是使用xml文件。
JasperViewer view = new JasperViewer("reports.jrprint", false);
view.pack();
view.setVisible(true);
}
catch (Exception e) {
e.printStackTrace()
}
}
}http://www.heci.net 贺词网!]
JasperReports学习笔记
版本:jasperreports-0.6.7
学习资料来源:http://jasperreports.sourceforge.net
一、 需求(requirements)
JasperReports要用到的工具和类
1. JDK(java开发环境)
JDK 1.2.2 or higher
2. XML
JAXP 1.1 XML Parser(XML解析器)
Jakarta Commons Digester Component (version 1.1 or later)
http://jakarta.apache.org/commons/digester/
Jakarta Commons BeanUtils Component (version 1.1 or later)
http://jakarta.apache.org/commons/beanutils/
Jakarta Commons Collections Component (version 1.0 or later)
http://jakarta.apache.org/commons/collections/
Jakarta Commons Logging Component (version 1.0 or later)
http://jakarta.apache.org/commons/logging/
3. JDBC(连接数据库用)
JDBC 2.0 Driver
4. PDF(转换为PDF文件用到)
iText - Free Java-PDF library by Bruno Lowagie and Paulo Soares
(version 1.01 or later)
http://www.lowagie.com/iText/
5. XLS(转换为excel文件用)
Jakarta POI (version 2.0 or later)
http://jakarta.apache.org/poi/
二、快速了解(quick how to)
1. Main classes(主要的类)
用JasperReports 时,用到的主要类
net.sf.jasperreports.engine.JasperCompileManager
net.sf.jasperreports.engine.JasperFillManager
net.sf.jasperreports.engine.JasperPrintManager
net.sf.jasperreports.engine.JasperExportManager
这些类提供了很多静态方法,用来编译、填充、打印和导出报表。详细信息请参考JasperReports的javadoc文档。
net.sf.jasperreports.view.JasperViewer
此类用来预览生成的报表(generated reports.)。
net.sf.jasperreports.view.JasperDesignViewer
此类用来预览报表设计(view the report design)。
2. 编译报表设计Compiling a report design
xml文件定义报表设计(report design)。编译报表设计(report design)产生报表(generate reports)。网页http://jasperreports.sourceforge.net/quick.how.to.html中介绍用net.sf.jasperreports.engine.JasperCompileManager类的静态方法compileReportXXX()来编译报表设计(report
design)。但是JasperCompileManager不赞成使用此方法编译报表设计(report design),推荐使用JasperCompileManager的方法compileReportXXX()来代替。
编译报表设计(report design)时,jasperreports engine首先检查模板,确定是否一致,然后转换所有的报表表达式(report expressions),最后产生.jasper文件。 要想使编译工作尽可能灵活,你可以实现接口net.sf.jasperreports.engine.design.JRCompiler。
3.预览报表设计 Viewing a report design
使用net.sf.jasperreports.view.JasperDesignViewer的程序来预览。他的main()方法接受报表设计文件名(xml)或者编译后的.jasper文件。
4. 填充报表 Filling a report
编译报表设计(xml文件)得到报表文件(.jasper),再调用net.sf.jasperreports.engine.JasperFillManager类的方法fillReportXXX(),可以得到报表(JasperPrint)。
5. 预览报表 Viewing a report
Generated reports can be viewed using the net.sf.jasperreports.view.JasperViewer application.
In its main() method, it receives the name of the file which contains the report to view.
我没有测试成功。
6. Printing a report
Generated reports can be printed using the printReport(), printPage() or printPages() static methods exposed by the net.sf.jasperreports.engine.JasperPrintManager class.
7. Exporting to PDF, HTML, XLS, CSV or XML format
填充报表文件(.jasper文件)得到报表(JasperPrint)后,可以使用net.sf.jasperreports.engine.JasperExportManager类的方法exportReportXXX()导出为各种格式的文件PDF,HTML,XML。
After having filled a report, we can also export it in PDF, HTML or XML format using the exportReportXXX() methods of the net.sf.jasperreports.engine.JasperExportManager class.
三、JasperReports的工作流程:
根据上图的流程,JasperReports做报表有一下步骤:
1、 报表设计,可以用ireport可视化工具来实现,生成xml文件。完成后,可以直接到步骤3,直接编译xml文件。
2、 如果已经存在报表设计文件(xml文件),可以用net.sf.jasperreports.engine.xml.JRXmlLoader.load()方法载入报表设计,该方法返回JasperDesign对象,通过JasperDesign对象,可以修改报表设计,比如:添加、删除字段,添加、删除变量,添加、删除分组,等等。
3、 完成报表设计后,接下来就可以编译报设计,编译报表设计可以用类net.sf.jasperreports.engine.JasperCompileManager的compileReport()方法来实现,该方法可以编译xml文件或JasperDesign对象,产生JasperReport对象,JasperReport对象可序列化,能够保存为文件(通常是.jasper文件)。类net.sf.jasperreports.engine.JasperCompileManager还可以把报表转化为报表设计文件(xml文件)。得到JasperReport对象(可从.jasper文件实例化一个JasperReport对象)后,给报表填充数据产生JasperPrint对象。JasperPrint对象可序列化,保存为文件。有了JasperPrint对象后,可以打印、浏览、转换为其他格式的文件,如:PDF,HTML,XML,XLS,CSV等等,这些操作就是我们想得到的最终结果。尽管JasperPrintManager类可以导出为PDF,XML文件,但是不赞成使用JasperPrintManager类来导出,建议用JasperExportManager类来导出PDF,HTML,XML文件;要导出XLS和CSV文件,用专业的导出类net.sf.jasperreports.engine.export.JRXlsExporter类和net.sf.jasperreports.engine.export.JRCsvExporter类
导出为XLS的代码段:
JRXlsExporter exporter = new JRXlsExporter();//创建实例
//设计参数
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, strDestFile);
exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.FALSE);
exporter.exportReport();//导出
导出为CSV文件和XLS类似。
从CSDN搬家到博客园
2010年六月的时候就想从CSDN博客搬家到博客园了,当时还发了一个topic:博客搬家到博客园,想修改博客的发布时间。但是后来想要要讲200多篇文章一篇一篇复制过来,是在麻烦。现在对于想从CSND博客搬家到博客园的人,博客园提供一键搬家的功能。我测试了一下,从CSDN那边一共迁移了298片博客,不过对代码格式支持度不高。图片还是直接引用CSDN那边的图片。下面是搬家的文章列表。
成功导入298篇文章!
1 spket的安装使用以及加载ext-4.0.0.jsb2文件...导入成功 2 Redis快速入门...导入成功 3 JSONObject与JSONArray的使用...导入成功 4 mshup总结...导入成功 5 github使用总结...导入成功 6 使用Hibernate-tools中的hbm2java和hbm2ddl根据hbm文件自动生成pojo和数据库脚本...导入成功 7 PDF中添加页面/合并 PDF 内容...导入成功 8 java调用.net的webservice...导入成功 9 算法面试题总结...导入成功 10 java调用bat...导入成功 11 Extjs+JSON实例...导入成功 12 The server does not support version 3.0 of the J2EE Web module specification...导入成功 13 eclipse+webservice开发实例...导入成功 14 Apache Velocity实现模板化...导入成功 15 The Class Loader Architecture...导入成功 16 Hibernate之Configuration,SessionFactory,Session...导入成功 17 URLClassLoader使用方法及事例程序...导入成功 18 类装载器学习...导入成功 19 实用新型专利与发明专利有什么区别...导入成功 20 设计模式之代理模式Proxy...导入成功 21 ExtJS带验证码登录框[新增回车提交]...导入成功 22 无序hashset与hashmap让其有序...导入成功 23 一个ant的简单实例...导入成功 24 ant警告 “warning: 'includeantruntime' was not set”解决方法...导入成功 25 android资源下载...导入成功 26 设计模式之适配器模式...导入成功 27 Tomcat Manager配置...导入成功 28 ant 读取环境变量的值...导入成功 29 PermGen space错误解决方法...导入成功 30 多线程开发...导入成功 31 java native方法及JNI实例...导入成功 32 23种设计模式概述...导入成功 33 java static解析...导入成功 34 设计模式之单例模式Singleton...导入成功 35 线程安全...导入成功 36 将eclipse中项目的Text File Encoding设置成为GBK...导入成功 37 eclipse下修改项目名导致tomcat内发布名不一致的解决方法...导入成功 38 Spring Web Flow 2.0 入门详解...导入成功 39 Java中@Override的作用...导入成功 40 mysql数据库的备份与恢复...导入成功 41 设计模式之Iterator...导入成功 42 Hadoop中Partition解析...导入成功 43 更改远程桌面端口3389为其他的端口号...导入成功 44 解决“Eclipse中启动Tomcat后,http://localhost:8080/无法访问”的问题...导入成功 45 JBOSS 5.0与tomcat 6.0端口设置...导入成功 46 java下实现调用oracle的存储过程和函数...导入成功 47 Subversion Native Library Not Available...导入成功 48 解决Eclipse导入svn项目自动关闭...导入成功 49 C++中构造函数与析构函数的调用顺序...导入成功 50 面向对象的一些概念...导入成功 51 Ubuntu下安装可视化SVN客户端Rabbitvcs...导入成功 52 mapreduce调试查询System.out的结果...导入成功 53 JBOSS+EJB3+MYSQL开发...导入成功 54 JBoss中配置数据源出现错误:“Failed to register driver for: com.mysql.jdbc.Driver”的解决方法...导入成功 55 hadoop实例sort...导入成功 56 hadoop实例 RandomWriter...导入成功 57 学习junit和hamcrest的使用...导入成功 58 错误Name node is in safe mode的解决方法...导入成功 59 Oracle左连接,右连接...导入成功 60 order by 多个条件...导入成功 61 如何去掉打印网页时自带的网址以及页码等内容...导入成功 62 windows中administrator 和 administrators两个账户的区别...导入成功 63 oracle数据库中对varchar类型求max的解决方法...导入成功 64 完全开启计划任务...导入成功 65 使用注册表修改本地安全策略“帐户: 使用空密码的本地帐户只允许进行控制台登录”...导入成功 66 oracle服务器本地能够登录但是局域网内其他机器不能访问的解决方法...导入成功 67 安装oracle9i时提示找不到文件OCS4J.properties的解决方法...导入成功 68 ORACLE 9i卸载并重新安装...导入成功 69 ORACLE VARCHAR 排序问题...导入成功 70 SQL TOP 子句...导入成功 71 学习oracle中的PCTFREE和PCTUSED...导入成功 72 使用Oracle SQL Developer报错:Unable to find a Java Virtual Machine...导入成功 73 Address already in use: JVM_Bind(端口冲突)...导入成功 74 POI导出EXCEL经典实现...导入成功 75 eclipse生成boolean型变量的getter是is开头...导入成功 76 从百度空间到CSDN——博客搬家源码...导入成功 77 错误“ORA-12520: TNS: 监听程序无法找到需要的服务器类型的可用句柄”解决方法...导入成功 78 oracle exp出现"ORA-00302:必须说明SET_NO_OUTLINES 组件" 解决方法...导入成功 79 windows计划任务+批处理文件实现oracle数据库的定时备份与恢复...导入成功 80 普元平台初始化数据库...导入成功 81 使用Oracle SQLDeveloper连接数据库并创建用户...导入成功 82 oracle登录错误:ORA-28000: the account is locked 解决方法...导入成功 83 a2sd+状态下应用程序丢失的解决办法...导入成功 84 远程连接ORACLE服务的设置方法...导入成功 85 错误:ORA-28002: the password will expire within 7 days 解决方法...导入成功 86 使用sqlplus连接数据库...导入成功 87 错误”ORA-12560: TNS: 协议适配器错误“解决方法...导入成功 88 解决https://localhost:1158/em 页面无法打开的问题...导入成功 89 查看oralce的版本及安装了哪些选项...导入成功 90 oracle连接中出现错误ORA-12541,ORA-12514,ORA-01017的解决方法...导入成功 91 Navicat Premium 连接 Oracle 数据库...导入成功 92 判断这5个数值是否连续相邻...导入成功 93 解决Google code和Google group无法登录的问题...导入成功 94 编辑距离...导入成功 95 经典算法解析...导入成功 96 Prim算法求最小生成树MST以及和kruskal算法的对比...导入成功 97 进程与线程...导入成功 98 快速排序算法QuickSort(二)...导入成功 99 快速排序算法QuickSort...导入成功100 Kurskal算法生成最小生成树MST...导入成功101 含有负边的图的最短路径(Bellman_ford算法)...导入成功102 Dijkstra算法求单源最短路径(二)(BFS的改版)...导入成功103 Dijkstra算法求单源最短路径(一)...导入成功104 visual studio 自动整理代码...导入成功105 图的广度优先遍历BFS(邻接矩阵表示法)...导入成功106 STL中stack和queue的用法...导入成功107 判断一个图是否有环 无向图 有向图...导入成功108 图的深度优先遍历DFS(邻接矩阵表示法)...导入成功109 经典Hadoop书籍介绍...导入成功110 Hadoop平台实验报告...导入成功111 Reflector7及破解...导入成功112 WF4教程第一弹...导入成功113 安装Microsoft? SQL Server? 2008 Management Studio Express...导入成功114 【转载】软件工程的发展历史概论...导入成功115 WF(Workflow foundation)与Asp.net结合(二)...导入成功116 错误:每个配置文件中只允许存在一个 元素,并且,如果存在该元素,它还必须是根 元素的第一个子元素...导入成功117 WF(Workflow foundation)与Asp.net结合...导入成功118 visual studio繁体中文乱码解决方法...导入成功119 安装win7并不出现100M隐藏分区的方法...导入成功120 C#中读取xml文件指定节点...导入成功121 ASP.NET中读取XML文件4种方法...导入成功122 在C#中创建和读取XML文件...导入成功123 IIS服务寄宿...导入成功124 构建一个简单的WCF应用...导入成功125 抽象工厂模式(Abstract Factory)...导入成功126 C#中错误:不包含适合于入 口点的静态“Main”方法 的解决方法...导入成功127 有向图的邻接表表示法...导入成功128 Java文件操作...导入成功129 错误:”未能加载文件或程序集“System.Web.Mvc, Version=2.0.0.0” 解决方法...导入成功130 错误:“未安装全文搜索或无法加载某一全文组件”的解决方法...导入成功131 Windows 7远程桌面 重启 关机 任务管理器 命令...导入成功132 开始整理资料...导入成功133 摩根IT实习经验谈及其他...导入成功134 基于AKS素性检测的素数生成器...导入成功135 NTL使用方法(VS2008环境下)...导入成功136 vs2008生成lib文件...导入成功137 vs2008添加头文件路径(vs2008 add directories)...导入成功138 生成指定位数的随机数...导入成功139 筛法求素数...导入成功140 AES算法介绍...导入成功141 数据库弱一致性四个隔离级别...导入成功142 Hadoop下进行反向索引(Inverted Index)操作...导入成功143 Hadoop WordCount改进实现正确识别单词以及词频降序排序...导入成功144 System.exit(0)和System.exit(1)区别...导入成功145 eclipse安装hadoop插件...导入成功146 editor does not contain a main type" 错误解决方...导入成功147 Hadoop示例程序WordCount详解及实例...导入成功148 MyEclipse生成WAR包并在Tomcat下部署发布...导入成功149 两个栈实现一个队列...导入成功150 使用数组实现栈stack功能...导入成功151 java.lang.ClassNotFoundException: org.apache.commons.collections.map.ListOrderedMap解决方法...导入成功152 Ext.grid.EditorGridPanel使用方法...导入成功153 Ext.ux.form.SearchField使用方法...导入成功154 subString用法...导入成功155 sql关系型运算符优先级高到低为:not >and> or...导入成功156 mysql数据库中实现内连接、左连接、右连接...导入成功157 ubuntu下设置文件权限...导入成功158 Ubuntu技巧之"xxx is not in the sudoers file"解决方法...导入成功159 ubuntu中pdf中文乱码解决方法...导入成功160 ubuntu下安装JDK并配置java环境...导入成功161 [转]JSP中request.getParameter()乱码问题...导入成功162 FireFox中使用ExtJs日期控件错误的解决方法...导入成功163 hibernate中many-to-one实例一...导入成功164 hibernate中one-to-many实例一...导入成功165 [转]Apache Commons工具集简介...导入成功166 找不到"org.apache.commons.dbcp.BasicDataSource"的解决方法...导入成功167 MyEclipse发布项目更改项目名...导入成功168 com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Unknown column"错误解决方...导入成功169 Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/helpers/NOPLoggerFactory"错误解决方...导入成功170 [转载]MyEclipse插件菜单 add hibernate capabilities 不可用的解决办法...导入成功171 oogle code svn+TortoiseSVN使用方法...导入成功172 MyEclipse 8.6 安装 SVN 插件...导入成功173 找不到"javax.servlet.annotation.WebServlet"解决方法...导入成功174 [转]删除Windows 7 C:/Users/用户名/AppData里面的文件...导入成功175 [转]hibernate------HQL总结...导入成功176 错误:“已有打开的与此命令相关联的 DataReader,必须首先将它关闭”的解决方法。...导入成功177 使用快照隔离snapshot isolation实例(二)...导入成功178 使用快照隔离snapshot isolation实例(一)...导入成功179 快照隔离(Snapshot Isolation)简单介绍和例子...导入成功180 Target runtime Apache Tomcat v6.0 is not defined.错误解决方法...导入成功181 ServletActionContext.getRequest().getServletPath()错误的解决方法...导入成功182 为什么说Tomcat是servlet容器?...导入成功183 eclipse+tomcat开发web程序...导入成功184 https://code.google.com/hosting/settings被墙的解决方法...导入成功185 MyEclipse环境下Hibernate入门实例...导入成功186 MySql与oracle的JDBC测试程序...导入成功187 错误:“Cannot load JDBC driver class 'com.mysql.jdbc.Driver”的解决方法...导入成功188 Struts入门实例...导入成功189 “HTTP Status 404 - No result defined for action ****** and result result”错误解决方法...导入成功190 Spring装配构造方法...导入成功191 Spring装配集合属性...导入成功192 Spring属性装配之属性类型是另外一个被装载的类...导入成功193 Spring第一个程序...导入成功194 winrar解压spring出现“路径和文件名总长度必须不能超过 260 个字符!”错误的解决方法...导入成功195 tomcat/webapps目录下必须存放project而不能是文件...导入成功196 [转]classpath、path、JAVA_HOME的作用...导入成功197 [转]如何度过硕士研究生阶段——浅谈硕士期间时间规划问题...导入成功198 [转]研究生阶段为人处事注意点...导入成功199 [转]研究生阶段学习规划指导随笔...导入成功200 给自制htc desire ROM签名的方法...导入成功201 Project has no default.properties file! Edit the project properties to set one.错误解决方法...导入成功202 HTC Desire 金卡制作方法...导入成功203 ubuntu-基本命令篇-18-压缩包管理...导入成功204 ubuntu正确输入用户名密码后重复登录界面...导入成功205 Ubuntu下搭建Android开发环境...导入成功206 XP于Ubuntu双系统时开机默认启动顺序到设定...导入成功207 ubuntu-基本命令篇-15-系统管理-time命令中Real,User,Sys概念...导入成功208 ubuntu-学习笔记之1-9...导入成功209 ubuntu-基本命令篇-10-文件管理...导入成功210 ubuntu-基本命令篇-12-磁盘管理...导入成功211 ubuntu-基本命令篇-11-目录管理...导入成功212 ubuntu-基本命令篇-13-用户管理...导入成功213 ubuntu-基本命令篇-14-进程管理...导入成功214 ubuntu-基本命令篇-16-网络管理...导入成功215 Ubuntu 需要输入密钥环解锁密码的解决办法...导入成功216 Ubuntu 10.04下解压RAR文件...导入成功217 windows7下安装ACHI驱动...导入成功218 Ubuntu 10.04的安装...导入成功219 Ubuntu 10.04下安装Google拼音输入法...导入成功220 windows 7关闭休眠...导入成功221 如何去除QQ广告?...导入成功222 域名不区分大小写...导入成功223 DNN读书摘录5-Starter Kit Template...导入成功224 测试我用WLW在CSDN上的第一篇博客...导入成功225 DotNetNuke模块开发(一)...导入成功226 DNN中手动插入01.00.00.SqlDataProvider脚本错误的问题...导入成功227 DNN模块安装(source版本和install版本)...导入成功228 如何成为微软实习生[转载]...导入成功229 网易邮箱繁体字信件乱码解决...导入成功230 VS2008无法正确打开项目/解决方案...导入成功231 Parser Error Message: Could not load file or assembly 'Telerik.Web.UI' or one of its dependencies.解决方法...导入成功232 DotNetNuke media module使用方法...导入成功233 Sybase PowerDesigner 12通用的破解方法...导入成功234 DotNetNuke网站发布操作过程...导入成功235 DotNetNuke中Membership Provider机制...导入成功236 nchar,nvarchar,text,ntext,char,varchar的区别...导入成功237 MS-SQL中Insert操作插入的中文变成问号"???"的解决办法...导入成功238 错误:CS0234: 命名空间“System”中不存在类型或命名空间名称“Linq”的解决方法...导入成功239 FreeTextBox设置编辑页面...导入成功240 获取GridView中RowCommand的当前选中行的索引或主键Id...导入成功241 asp.net中使用FreeTextBox控件...导入成功242 解决asp.net中“从客户端(......)中检测到有潜在危险的 Request.Form 值。”错误...导入成功243 将FreeTextBox做成控件添加到工具箱中...导入成功244 Login控件在浏览器中打开时显示英文...导入成功245 使用 Membership.ValidateUser(Login1.UserName, Login1.Password)验证用户...导入成功246 DataSet.Tables[].Rows[][]的用法...导入成功247 DNN中配置SMTP以及管理员充值密码的设定...导入成功248 使用DataBinder.Eval(Object, String, String)和string.Fromat()的时间设定...导入成功249 解决异常“SqlParameterCollection 只接受非空的 SqlParameter 类型对象。”...导入成功250 recordset.Open strSql, Conn, 3,3...导入成功251 ASP转ASP.NET(1)...导入成功252 c/c++笔试题目(林锐)...导入成功253 Sql Server 2005 Express数据库导入导出功能的实现...导入成功254 使用inner join实现多表连接查询...导入成功255 eWebEditor的数据库连接字符串...导入成功256 DNN中自定义密码验证...导入成功257 DNN中代码创建用户的CreateUser()方法的疑问...导入成功258 配置DNN站点日志...导入成功259 [转]asp.net中get和set用法...导入成功260 [转]毕业5年决定人的一生-- 大家千万不要错过这篇文章...导入成功261 如何下载网页中的flash文件...导入成功262 自定义注册模块备忘...导入成功263 在WINDOWS 下删除EISA配置的隐藏分区...导入成功264 win7安装AHCI驱动...导入成功265 win7安装iis错误解决方法汇总...导入成功266 Membership.CreateUser方法与web.config中的membership defaultProvider相关联...导入成功267 DNN使用升级包升级...导入成功268 DotNetNuke: System.Security.Cryptography.CryptographicException: Bad Data...导入成功269 自定义SqlMembershipProvider方法...导入成功270 App_Code目录中存放不同语言的类文件导致错误的解决方案...导入成功271 DNN源码安装方法...导入成功272 命名空间"system.web"中不存在类型或命名空间名称security"错误解决方...导入成功273 SqlMembershipProvider.ChangePassword 方法(已测试)...导入成功274 SqlMembershipProvider.CreateUser 方法(测试已通过)...导入成功275 SqlMembershipProvider中的PasswordFormat 属性...导入成功276 aspnet_Users中LastActiveDate的问题...导入成功277 dnn的域名绑定...导入成功278 dnn中属性值的添加与删除...导入成功279 md5编码的两个程序...导入成功280 AppSettings和ConnectionStrings的使用。...导入成功281 DNN重置host密码...导入成功282 纪念-今天DNN密码破解...导入成功283 Can't create table './store/#sql-b2c_1a.frm' (errno: 150)解决方法...导入成功284 DotNetNuke 5 User's Guide Get Your Website Up and Running读书摘录4...导入成功285 DotNetNuke 5 User's Guide Get Your Website Up and Running读书摘录3...导入成功286 DotNetNuke 5 User's Guide Get Your Website Up and Running读书摘录2...导入成功287 DotNetNuke 5 User's Guide Get Your Website Up and Running读书摘录1...导入成功288 sql server 2005 express附加数据库出错解决方法...导入成功289 悲剧到教育网,接了宽带畅通无阻得上CSDN...导入成功290 IIS5.1 站点发布的问题...导入成功291 解决用户"sa"登录失败。该用户与可信 sql server 连接无关联。...导入成功292 找不到aspnet用户权限的解决方法...导入成功293 IIS发生意外错误0x8ffe2740...导入成功294 SQL Server Express的使用...导入成功295 unbunt下刻录光盘...导入成功296 关于ubuntu 是否需要使用std::到问题。...导入成功297 在CSDN上的第一篇博客...导入成功298 acm题...导入成功
本文转自xwdreamer博客园博客,原文链接:http://www.cnblogs.com/xwdreamer/archive/2011/12/22/2315734.html,如需转载请自行联系原作者
使用Apache Solr对数据库建立索引(包括处理CLOB、CLOB)
以下资料整理自网络,觉的有必要合并在一起,这样方便查看。主要分为两部分,第一部分是对《db-data-config.xml》的配置内容的讲解(属于高级内容),第二部分是DataImportHandler(属于基础),第三部分是对db-data-config.xml的进阶(这个国内可能还没有人写过啊,我在google、baidu上都没有搜索到,最后可是拔代码,看solr的英文文档找的)
第一部分是对《db-data-config.xml》
query是获取全部数据的SQLdeltaImportQuery是获取增量数据时使用的SQLdeltaQuery是获取pk的SQLparentDeltaQuery是获取父Entity的pk的SQL
Full Import工作原理:执行本Entity的Query,获取所有数据;针对每个行数据Row,获取pk,组装子Entity的Query;执行子Entity的Query,获取子Entity的数据。
Delta Import工作原理:查找子Entity,直到没有为止;执行Entity的deltaQuery,获取变化数据的pk;合并子Entity parentDeltaQuery得到的pk;针对每一个pk Row,组装父Entity的parentDeltaQuery;执行parentDeltaQuery,获取父Entity的pk;执行deltaImportQuery,获取自身的数据;如果没有deltaImportQuery,就组装Query
限制:子Entity的query必须引用父Entity的pk子Entity的parentDeltaQuery必须引用自己的pk子Entity的parentDeltaQuery必须返回父Entity的pkdeltaImportQuery引用的必须是自己的pk
第二部分是DataImportHandler
关于DataImportHandler的具体使用方法,详见下文,如果你英文超级好,那看这个链接吧:http://wiki.apache.org/solr/DataImportHandler
大多数的应用程序将数据存储在关系数据库、xml文件中。对这样的数据进行搜索是很常见的应用。所谓的DataImportHandler提供一种可配置的方式向solr导入数据,可以一次全部导入,也可以增量导入。
概览
目标
能够读取关系数据库中的数据。
通过可配置的方式,能够将数据库中多列、多表的数据生成solr文档
能够通过solr文档更新solr
提供 通过配置文件就能够导入所有数据的能力
能够发现并处理 由insert、update带来的变化(我们假定在表中有一个叫做“last-modified的列”)
能够配置 “完全导入”和“增量导入”的时间
让读取xml文件,并建立索引成为可配置。
能够将 其他的数据源(例如:ftp,scp,etc)或者其他格式的文档(Json,csv)以插件的形式集成到项目中。
设计思路
这个Handler首先要在solrconfig.xml文件中配置下,如下所示。
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> <lst name="defaults"> <str name="config">/home/username/data-config.xml</str> </lst> </requestHandler>
从它的名字上,我们或许也可以猜到,
DataImportHandler正是requestHandler的实现。我们一共需要在两个地方配置文件中进行一些配置。
solrconfig.xml 。 data-config.xml必须在这个文件中配置,datasource也可以。不过,一般将datasource放在data-config.xml文件中。
data-config.xml
怎样获取数据?(查询语句、url等等)
要读什么样的数据(关系数据库中的列、或者xml的域)
做什么样的处理(修改/添加/删除)
跟关系数据库一起使用
下面几个步骤是必要的.
定义一个data-config.xml 文件,并这个它的路径配置到solrconfig.xml 中关于DataImportHandler的配置中。
给出Connection的信息(假设你选择在solrconfig中配置datasource)
打开DataImportHandler页面去验证,是否该配置的都配置好了。http://localhost:8983/solr/dataimport
使用“完全导入”命令将数据从数据库中导出,并提交给solr建立索引
使用“增量导入”命令对数据库发生的变化的数据导出,并提交给solr建立索引。
配置数据源
将dataSource标签直接添加到dataConfig下面,即成为dataConfig的子元素.
<dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/dbname" user="db_username" password="db_password"/>
数据源也可以配置在solrconfig.xml中
属性type 指定了实现的类型。它是可选的。默认的实现是JdbcDataSource。
属性 name 是datasources的名字,当有多个datasources时,可以使用name属性加以区分
其他的属性都是随意的,根据你使用的DataSource实现而定。
当然 你也可以实现自己的DataSource。
多数据源
一个配置文件可以配置多个数据源。增加一个dataSource元素就可以增加一个数据源了。name属性可以区分不同的数据源。如果配置了多于一个的数据源,那么要注意将name配置成唯一的。
例如:
<dataSource type="JdbcDataSource" name="ds-1" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://db1-host/dbname" user="db_username" password="db_password"/>
<dataSource type="JdbcDataSource" name="ds-2" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://db2-host/dbname" user="db_username" password="db_password"/>
然后这样使用
..
<entity name="one" dataSource="ds-1" ...>
..
</entity>
<entity name="two" dataSource="ds-2" ...>
..
</entity>
..
配置JdbcDataSource
JdbcDataSource中的属性有
driver(必需的):jdbc驱动名称
url(必需的):jdbc链接
user:用户名
password:密码
批量大小:jdbc链接中的批量大小
任何其他的在JdbcDataSource中配置的属性,都会被直接传给jdbc driver
配置data-config.xml
solr document是schema,它的域上的值可能来自于多个表.
data-config.xml的根元素是document。一个document元素代表了一种文档。一个document元素中包含了一个或者多个root实体。一个root实体包含着一些子实体,这些子实体能够包含其他的实体。实体就是,关系数据库上的表或者视图。每个实体都能够包含多个域,每个域对应着数据库返回结果中的一列。域的名字跟列的名字默认是一样的。如果一个列的名字跟solr field的名字不一样,那么属性name就应该要给出。其他的需要的属性在solrschema.xml文件中配置。
为了能够从数据库中取得想要的数据,我们的设计支持标准sql规范。这使得用户能够使用他任何想要的sql语句。root实体是一个中心表,使用它的列可以把表连接在一起。
dataconfig的结构
dataconfig的结构不是一成不变的,entity和field元素中的属性是随意的,这主要取决于processor和transformer。
以下是entity的默认属性
name(必需的):name是唯一的,用以标识entity
processor:只有当datasource不是RDBMS时才是必需的。默认值是SqlEntityProcessor
transformer:转换器将会被应用到这个entity上,详情请浏览transformer部分。
pk:entity的主键,它是可选的,但使用“增量导入”的时候是必需。它跟schema.xml中定义的uniqueKey没有必然的联系,但它们可以相同。
rootEntity:默认情况下,document元素下就是根实体了,如果没有根实体的话,直接在实体下面的实体将会被看做跟实体。对于根实体对应的数据库中返回的数据的每一行,solr都将生成一个document。
一下是SqlEntityProcessor的属性
query (required) :sql语句
deltaQuery : 只在“增量导入”中使用
parentDeltaQuery : 只在“增量导入”中使用
deletedPkQuery : 只在“增量导入”中使用
deltaImportQuery : (只在“增量导入”中使用) . 如果这个存在,那么它将会在“增量导入”中导入phase时代替query产生作用。这里有一个命名空间的用法${dataimporter.delta.}详情请看solr1.4.
Commands
The handler 通过httprequest 向外界提供它的API . 以下是一些或许你会用到的操作
full-import : "完全导入"这个操作可以通过访问URL http://:/solr/dataimport?command=full-import 完成。
这个操作,将会新起一个线程。response中的attribute属性将会显示busy。
这个操作执行的时间取决于数据集的大小。
当这个操作运行完了以后,它将在conf/dataimport.properties这个文件中记录下这个操作的开始时间
当“增量导入”被执行时,stored timestamp这个时间戳将会被用到
solr的查询在“完全导入”时,不是阻塞的
它还有下面一些参数:
clean : (default 'true'). 决定在建立索引之前,删除以前的索引。
commit: (default 'true'). 决定这个操作之后是否要commit
optimize: (default 'true'). 决定这个操作之后是否要优化。
debug : (default false). 工作在debug模式下。详情请看 the interactive development mode (see here)
delta-import : 当遇到一些增量的输入,或者发生一些变化时使用` http://:/solr/dataimport?command=delta-import . 它同样支持 clean, commit, optimize and debug 这几个参数.
status : 想要知道命令执行的状态 , 访问 URL http://:/solr/dataimport .它给出了关于文档创建、删除,查询、结果获取等等的详细状况。
reload-config : 如果data-config.xml已经改变,你不希望重启solr,而要重新加载配置时,运行一下的命令http://:/solr/dataimport?command=reload-config
abort : 你可以通过访问 url http://:/solr/dataimport?command=abort 来终止一个在运行的操作
Full Import 例子
让我们来看下面的例子. 假设我们数据库中的表结构如下:
This is a relational model of the same schema that Solr currently ships with. 我们使用这个例子来为我们的DataImportHandler建data-config.xml。 我们已经使用这个结构在HSQLDB上建立了一个数据库. 好,现在开始了, 跟着下面的步骤走:
下载 example-solr-home.jar 并使用 jar解压 jar -xvf example-solr-home.jar ,解压到你的本地系统. 这个jar文件包含了一个完整的solrhome(里面的配置文件很齐全了)和一个RSS的例子。它也包含了一个hssqldb数据库的例子.
在 example-solr-home目录, 这里有一个 solr.war. 拷贝 这个 war 文件到你的 tomcat/jetty webapps 文件夹. 这个 war file 也包含了hsqldb的JDBC driver. 如果你想在你已经有了的solr项目中部署,你只需要将 'dataimport.jar' 拷贝到 你的solr项目的 WEB-INF/lib 目录下。
使用example-data-config目录下的solr目录作为你solrhome
访问 http://localhost:8983/solr/dataimport 验证一下配置
访问 http://localhost:8983/solr/dataimport?command=full-import 执行一个“完全导入”
上面给出的solr目录是一个多核的solr home。它有两个核,一个是DB example,一个是RSSexample(新属性)。
这个例子的data-config.xml 如下:
<dataConfig>
<dataSource driver="org.hsqldb.jdbcDriver" url="jdbc:hsqldb:/temp/example/ex" user="sa" />
<document name="products">
<entity name="item" query="select * from item">
<field column="ID" name="id" />
<field column="NAME" name="name" />
<field column="MANU" name="manu" />
<field column="WEIGHT" name="weight" />
<field column="PRICE" name="price" />
<field column="POPULARITY" name="popularity" />
<field column="INSTOCK" name="inStock" />
<field column="INCLUDES" name="includes" />
<entity name="feature" query="select description from feature where item_id='${item.ID}'">
<field name="features" column="description" />
</entity>
<entity name="item_category" query="select CATEGORY_ID from item_category where item_id='${item.ID}'">
<entity name="category" query="select description from category where id = '${item_category.CATEGORY_ID}'">
<field column="description" name="cat" />
</entity>
</entity>
</entity>
</document>
</dataConfig>
这里, 根实体是一个名叫“item”的表,它的主键是id。我们使用语句 "select * from item"读取数据. 每一项都拥有多个特性。看下面feature实体的查询语句
<entity name="feature" query="select description from feature where item_id='${item.id}'">
<field name="feature" column="description" />
</entity>
feature表中的外键item_id跟item中的主键连在一起从数据库中取得该row的数据。相同地,我们将item和category连表(它们是多对多的关系)。注意,我们是怎样使用中间表和标准sql连表的
<entity name="item_category" query="select category_id from item_category where item_id='${item.id}'"> <entity name="category" query="select description from category where id = '${item_category.category_id}'"> <field column="description" name="cat" /> </entity> </entity>
短一点的 data-config
在上面的例子中,这里有好几个从域到solr域之间的映射。如果域的名字和solr中域的名字是一样的话,完全避免使用在实体中配置域也是可以的。当然,如果你需要使用转换器的话,你还是需要加上域实体的。
下面是一个更短的版本
<dataConfig>
<dataSource driver="org.hsqldb.jdbcDriver" url="jdbc:hsqldb:/temp/example/ex" user="sa" />
<document>
<entity name="item" query="select * from item">
<entity name="feature" query="select description as features from feature where item_id='${item.ID}'"/>
<entity name="item_category" query="select CATEGORY_ID from item_category where item_id='${item.ID}'">
<entity name="category" query="select description as cat from category where id = '${item_category.CATEGORY_ID}'"/>
</entity>
</entity>
</document>
</dataConfig>
使用“增量导入”命令
你可以通过访问URL http://localhost:8983/solr/dataimport?command=delta-import 来使用增量导入。操作将会新起一个线程,response中的属性statue也将显示busy now。操作执行的时间取决于你的数据集的大小。在任何时候,你都可以通过访问 http://localhost:8983/solr/dataimport 来查看状态。
当 增量导入被执行的时候,它读取存储在conf/dataimport.properties中的“start time”。它使用这个时间戳来执行增量查询,完成之后,会更新这个放在conf/dataimport.properties中的时间戳。
Delta-Import 例子
我们将使用跟“完全导入”中相同的数据库。注意,数据库已经被更新了,每个表都包含有一个额外timestamp类型的列 叫做last_modified。或许你需要重新下载数据库,因为它最近被更新了。我们使用这个时间戳的域来区别出那一行是上次索引以来有更新的。
看看下面的这个 data-config.xml
<dataConfig>
<dataSource driver="org.hsqldb.jdbcDriver" url="jdbc:hsqldb:/temp/example/ex" user="sa" />
<document name="products">
<entity name="item" pk="ID" query="select * from item"
deltaQuery="select id from item where last_modified > '${dataimporter.last_index_time}'">
<entity name="feature" pk="ITEM_ID"
query="select description as features from feature where item_id='${item.ID}'">
</entity>
<entity name="item_category" pk="ITEM_ID, CATEGORY_ID"
query="select CATEGORY_ID from item_category where ITEM_ID='${item.ID}'">
<entity name="category" pk="ID"
query="select description as cat from category where id = '${item_category.CATEGORY_ID}'">
</entity>
</entity>
</entity>
</document>
</dataConfig>
注意到item实体的 属性deltaquery了吗,它包含了一个能够查出最近更新的sql语句。注意,变量{dataimporter.last_index_time} 是DataImporthandler传过来的变量,我们叫它时间戳,它指出“完全导入”或者“部分导入”的最后运行时间。你可以在data-config.xml文件中的sql的任何地方使用这个变量,它将在processing这个过程中被赋值。
注意
上面例子中deltaQuery 只能够发现item中的更新,而不能发现其他表的。你可以像下面那样在一个sql语句中指定所有的表的更新。这里要特别说明一下的就是,它的细节对于一个使用者来说是一个不错的练习。
deltaQuery="select id from item where id in
(select item_id as id from feature where last_modified > '${dataimporter.last_index_time}')
or id in
(select item_id as id from item_category where item_id in
(select id as item_id from category where last_modified > '${dataimporter.last_index_time}')
or last_modified > '${dataimporter.last_index_time}')
or last_modified > '${dataimporter.last_index_time}'"
写一个类似上面的庞大的deltaQuery 并不是一件很享受的工作,我们还是选择其他的方法来达到这个目的
<dataConfig>
<dataSource driver="org.hsqldb.jdbcDriver" url="jdbc:hsqldb:/temp/example/ex" user="sa" />
<document>
<entity name="item" pk="ID" query="select * from item"
deltaQuery="select id from item where last_modified > '${dataimporter.last_index_time}'">
<entity name="feature" pk="ITEM_ID"
query="select DESCRIPTION as features from FEATURE where ITEM_ID='${item.ID}'"
deltaQuery="select ITEM_ID from FEATURE where last_modified > '${dataimporter.last_index_time}'"
parentDeltaQuery="select ID from item where ID=${feature.ITEM_ID}"/>
<entity name="item_category" pk="ITEM_ID, CATEGORY_ID"
query="select CATEGORY_ID from item_category where ITEM_ID='${item.ID}'"
deltaQuery="select ITEM_ID, CATEGORY_ID from item_category where last_modified > '${dataimporter.last_index_time}'"
parentDeltaQuery="select ID from item where ID=${item_category.ITEM_ID}">
<entity name="category" pk="ID"
query="select DESCRIPTION as cat from category where ID = '${item_category.CATEGORY_ID}'"
deltaQuery="select ID from category where last_modified > '${dataimporter.last_index_time}'"
parentDeltaQuery="select ITEM_ID, CATEGORY_ID from item_category where CATEGORY_ID=${category.ID}"/>
</entity>
</entity>
</document>
</dataConfig>
除了根实体(有两个)以外,这里一共有三个查询,每个实体个一个。
查询语句,为我们取得需要建立索引的数据。
deltaQuery 取得从上次索引更新时间以来有更新的实体的主键。
parentDeltaQuery 从deltaQuery中取得当前表中更新的行,并把这些行提交给父表。因为,当子表中的一行发生改变时,我们需要更新它的父表的solr文档。
下面是一些值得注意的地方:
对于query语句返回的每一行,子实体的query都将被执行一次
对于deltaQuery返回的每一行,parentDeltaQuery都将被执行。
一旦根实体或者子实体中的行发生改变,我们将重新生成包含该行的solr文档。
XML/HTTP Datasource使用指南
DataImportHandler 能够帮我们为基于HTTP的数据源建立索引. 目前支持REST/XML APIs 和RSS/ATOM Feeds.
配置HttpDataSource
HttpDataSource在dataconfig.xml中的配置看起来应该像这样:
<dataSource type="HttpDataSource" baseUrl="http://host:port/" encoding="UTF-8" connectionTimeout="5000" readTimeout="10000"/>
属性:
baseUrl (可选): 在Dev/QA/Prod 环境中,host/port改变时,你会用到它。使用这个属性,你可以找出配置到solrconfig.xml的变化。
encoding(可选): 默认情况下,encoding是response 头使用的encoding.你可以使用这个属性去覆盖默认值。
connectionTimeout (可选):默认值是5000ms
readTimeout (可选): 默认值是10000ms
在 data-config.xml中的配置
一个 xml/http data source中的实体有下面一些属性,也可以有上面提到的默认属性。
processor (必需的) : 它的值应该是"XPathEntityProcessor"
url (必需的) : REST API要使用这个api. (能够被模板化). 假设数据源是一个文件,那么url应该是这个文件的位置。
stream (可选) : 如果xml很大,那么它应该设为true
forEach(必需的) : xpath表达式,通过这个表达式可以取得想要的值。 如果这里有多个想要的值,那么将xpath表达式用“|”分开。如果useSolrAddSchema设为true的话,这个是可以被忽略的。
xsl(可选):使用xsl对xml进行预处理。你需要提供一个文件系统的全路径,或者一个url。
useSolrAddSchema(可选): Set it's value to 'true' if the xml that is fed into this processor has the same schema as that of the solr add xml. No need to mention any fields if it is set to true.
域能够有以下这些属性 (此外还有那些默认值):
xpath (必需的) : 记录中的一列,也就是域的xpath表达式 . 如果 该域并不来自任何的一个单一的xml属性,xpath是可以被忽略的. 我们可以通过转化器来使用多个xml属性来合成该域。如果一个域被声明成多值的,如果xpath表达式生成的也是多值的,那么XPathEntityProcessor将会自动处理它,而不需要我们做额外的工作。
commonField : 能够被设为 (true或者false),假设这个是true值,一旦一个记录中有这样的域,那么其他记录被写索引的时候,这个域也会跟着记录被写到索引里面。
如果 一个API支持分块数据(当一个数据集太大时),可能需要多次调用才能完成这个处理过程。XPathEntityprocessor 通过转换器支持这个特性。如果转换器返回的的行带有属性“hasMore”,并且这个属性的值等于true,那么Processor 将会使用同样的url模板发出令一次请求(实际的url是需要重新计算的)。一个转换器也可以传递一个完整的url路径,这个url被包含在属性“nextUrl”中,nextUrl的值必需是一个完整的url。
XPathEntityProcessor 通过实现streaming parser来支持取得xpath子集的操作。完整的xpath是不被支持的,但是常见的应用都是受支持的。
HttpDataSource 例子
下载 在DB 部分中的“完全导入”例子,试着去体验一下。我们将在这里例子中为slashotRSS建立索引。
这个例子的data-config配置看起来像这样。
<dataConfig>
<dataSource type="HttpDataSource" />
<document>
<entity name="slashdot"
pk="link"
url="http://rss.slashdot.org/Slashdot/slashdot"
processor="XPathEntityProcessor"
forEach="/RDF/channel | /RDF/item"
transformer="DateFormatTransformer">
<field column="source" xpath="/RDF/channel/title" commonField="true" />
<field column="source-link" xpath="/RDF/channel/link" commonField="true" />
<field column="subject" xpath="/RDF/channel/subject" commonField="true" />
<field column="title" xpath="/RDF/item/title" />
<field column="link" xpath="/RDF/item/link" />
<field column="description" xpath="/RDF/item/description" />
<field column="creator" xpath="/RDF/item/creator" />
<field column="item-subject" xpath="/RDF/item/subject" />
<field column="date" xpath="/RDF/item/date" dateTimeFormat="yyyy-MM-dd'T'hh:mm:ss" />
<field column="slash-department" xpath="/RDF/item/department" />
<field column="slash-section" xpath="/RDF/item/section" />
<field column="slash-comments" xpath="/RDF/item/comments" />
</entity>
</document>
</dataConfig>
这个data-config有很多值得借鉴的地方。 我建议你看下SlashdotRSS的结构图,它有一些头部元素,例如title、link、subject。这些元素将分别通过xpath语法映射到source、source-link、subject这些solr域。这个种子有多个item元素,这些元素包含了真正的新闻信息。所以,我们希望做得是,为每一个item元素建立一个文档。
XPathEntityprocessor 是一行一行的读取xml文件的(这里的行指的是一个xml元素)。它使用属性“forEach”去识别每一行 。在这个例子一种“forEach”的值是'/RDF/channel | /RDF/item'。也就是说这个xml有两种类型的行(这里使用一个OR的xpath语法,用以支持多个类型) 。当遇到一个行的时候,它会在行的域声明中读取尽量多的域。在这个例子中,当它读到行“/RDF/channel”时,它将会得到3个域。它处理完这个行的时候,它就会意识到,这个行并没有pk这个域的值,于是它并不会试图去建立一个solr文档(即使它去做,它也会失败)。但是这个三个域都有一个属性commonField ,并且它的值是true,所以它将会保留这个域的值,以便后面的行可以使用
它继续前进,然后遇到/RDF/item ,接着一个个处理这些行。它将会取得除了那个三个域之外的所有域。但是因为他们是common field。处理器会把公共域也加到这个记录中,然后写入索引。
transformer=DateFormatTransformer 又是什么呢?你可以看一下DateFormatTransformer有关部分。
你可以使用这些特性来从REST API ,例如 rss、atom、xml、其他solr服务器、甚至是格式良好的xhtml文档,建立索引。我们的xpath语法有它自己的限制(不支持通配符,只可以是全路径),但是一般的应用是绝对没有问题的,而且它是基于streaming parser的,它非常快,并且在读取非常大的xml文件的时候,它的内存消耗始终保持如一。它不支持命名空间,它却可以处理带有命名空间的xml文件。当你处理带有命名空间的xpath的时候,你需要做的是,丢弃命名空间部分,只留下其他的部分(例如,这个标签,相对应的xpath部分是subject)。很容易,是吧?而且你不需要写一行代码,好好享受吧。
注意 : 不像数据库,如果你使用XPathEntityProcessor,想忽略域声明是不可能。域通过你声明的xpaths来从xml中解析相应的数据。
例子: 索引 wikipedia
利用下面的data-config.xml文件可以对wikipedia的数据建立索引。从wikipedia下载下来的pages-articles.xml.bz2文件解压之后大概有18g。
<dataConfig>
<dataSource type="FileDataSource" encoding="UTF-8" />
<document>
<entity name="page" processor="XPathEntityProcessor" stream="true" forEach="/mediawiki/page/" url="/data/enwiki-20080724-pages-articles.xml">
<field column="id" xpath="/mediawiki/page/id" />
<field column="title" xpath="/mediawiki/page/title" />
<field column="revision" xpath="/mediawiki/page/revision/id" />
<field column="user" xpath="/mediawiki/page/revision/contributor/username" />
<field column="userId" xpath="/mediawiki/page/revision/contributor/id" />
<field column="text" xpath="/mediawiki/page/revision/text" />
<field column="timestamp" xpath="/mediawiki/page/revision/timestamp" />
</entity>
</document>
</dataConfig>
schema.xml中有关的部分如下所示:
<field name="id" type="integer" indexed="true" stored="true" required="true"/>
<field name="title" type="string" indexed="true" stored="false"/>
<field name="revision" type="sint" indexed="true" stored="true"/>
<field name="user" type="string" indexed="true" stored="true"/>
<field name="userId" type="integer" indexed="true" stored="true"/>
<field name="text" type="text" indexed="true" stored="false"/>
<field name="timestamp" type="date" indexed="true" stored="true"/>
<field name="titleText" type="text" indexed="true" stored="true"/>
...
<uniqueKey>id</uniqueKey>
<copyField source="title" dest="titleText"/>
为7278241个文章建立索引大概花了2个小时40分,内存使用量的峰值在4G左右。
使用“增量导入”命令
只有SqlEntitiProcessor支持增量数据!XPathEntityProcessor还没有实现它。所以,不幸运的是,现在还不能为“增量导入”提供支持。如果你想要在XPathEntityProcessor中实现这些方法,你可以在EntityProcessor.java中看看这些方法的解释。
Extending the tool with APIs
我们所展现的例子确实没有多大价值,单靠配置xml文件就满足所有的需求是不可能的。所以我们提供了一些抽象类,可以通过这些方法来提高功能。
Transformer
每一条从数据库中取得的数据能够被直接处理掉,或者通过它创建一个全新的域,它设置能够返回多行数据。配置文件必须像下面那样设置。
<entity name="foo" transformer="com.foo.Foo" ... />
注意-- trasformer的值必须是一个可以使用的classname。如果class包是'org.apache.solr.handler.dataimport' ,包名可以被忽略。solr.也是可以使用的,如果这个class在solr的一个包下的话。这个规则适应所有的可插入的类,像DataSource、EntityProcessor、Evaluator。
类Foo必须继承抽象类org.apache.solr.hander.dataimport.Transformer.这个类只有一个抽象方法。
transformer这个属性可以有多个transformers()(比如 transformer="foo.X,foo.Y") 之间用逗号隔开。 transformers 会形成一条处理链。它们将会按照它们的排列顺序起作用。
public abstract class Transformer {
/**
* The input is a row of data and the output has to be a new row.
*
* @param context The current context
* @param row A row of data
* @return The changed data. It must be a Map if it returns
* only one row or if there are multiple rows to be returned it must
* be a List>
*/
public abstract Object transformRow(Map row, Context context);
}
Context 是一个抽象的类,它提供上下文关系,这可能在处理数据的时候要用到。
另外,类Foo,可以选择不不实现这个抽象类,而只需要下面这个方法
public Object transformRow(Map row)
So there is no compile-time dependency on the DataImportHandler API
它的配置是灵活的。它允许用户向标签entity和field提供任意的属性。tool将会读取数据,并将它传给实现类。如果Transformer需要额外的的信息,它可以从context中取得。
正则表达式转换器
tool它提供了一个内嵌的转换器,叫做正则表达式转换器。它可以使用正则表达式从原数据中解析出我们想要的值。org.apache.solr.handler.dataimport.RegexTransformer 是它的名字. 因为它属于默认的包,所以它的包名是可以被忽略的。
例子:
<entity name="foo" transformer="RegexTransformer"
query="select full_name , emailids from foo"/>
... />
<field column="full_name"/>
<field column="firstName" regex="Mr(/w*)/b.*" sourceColName="full_name"/>
<field column="lastName" regex="Mr.*?/b(/w*)" sourceColName="full_name"/>
<field column="mailId" splitBy="," sourceColName="emailids"/>
</entity>
属性
RegexTransfromer只对属性中有regex或者splitBy的域起作用。所有的属性我们列在下面。
regex : 这是要匹配的正则表达式。regex和splitBy两者必有其一。如果没有,这个域将不会被正则表达式转换器处理。
sourceColName : 正则表达式起作用的列。. 如果这个这个属性不存在,那么source将等同域target。
splitBy : 如果正则表达式,是被用来分割一个字符串以获得多个值,那么使用这个。
replaceWith : 跟 属性regex一起使用。相当于我们平常使用的方法new String().replaceAll(, )
这里,属性‘regex’和‘sourceColName’是转换器自定义的属性。它从resultSet中读取域‘full_name’的值,然后转换它,并将结果分别传给‘firstName’和‘lastName’。所以,尽管查询结果只返回一列“full_name”,但solr document依然可以获得额外的两个域“firstName”和‘lastName’。
域'emailids' 是一个用逗号分隔着的值。 所以,我们最终可以从emailids得到一个以上的emial id。mailid 在solr中应该被定义为多值的。
脚本转换器
你可以使用javascript 或者其他的 脚本语言来写转换器,只要java支持这种脚本。在这里我们应该使用java 6.
<dataConfig>
<script><![CDATA[
function f1(row) {
row.put('message', 'Hello World!');
return row;
}
]]></script>
<document>
<entity name="e" pk="id" transformer="script:f1" query="select * from X">
....
</entity>
</document>
</dataConfig>
你可以在dataConfig结点中设置script 标签。默认的语言是javascript。你当然可以使用另外一种语言,你可以通过script标签中的属性language去设置它。(必须有java6的支持)。
你可以写任意多的转换函数。每个函数必须接受一个相当于 Map的row变量,然后要返回一个row。(转换以后)
通过在实体中指定 transformer=“script:”来使一个实体使用脚本函数。
在上面的data-config中,对于结果中返回的实体e的每一个行,javascript函数都将被执行一次。
执行机制跟一个java的转换器是一样的。在Transformer 中有两个参数 (transformRow(Map,Context ))。在javascript中,第二个参数被忽略了,但它一样是起作用的。
日期格式转换器
这里有一个内嵌的转换器,叫做DateFormatTransformer(日期格式转换器) ,这个在将字符型时间转换成java.util.Date的类型的时候是很有用的。
<field column="date" xpath="/RDF/item/date" dateTimeFormat="yyyy-MM-dd'T'hh:mm:ss" />
属性
日期格式转换器只对带有属性“dateTimeFormat”的域才起作用。其他属性如下所示。
dateTimeFormat : 转换使用的格式。这个必须服从java的SimpleDateformat。
sourceColName : 要使用日期转换的列。如果没有设定这个值,那么源列跟目标域的名称是一样的。
上面的域的定义在RSS例子中有使用,以转换RSS种子项中的时间格式。
数字格式转换器
能将一个字符串转换成一个数字,使用的是java中类NumberFormat。例子:
<field column="price" formatStyle="number" />
默认情况下,类Numberformat使用系统的本地格式去转换一个字符串,如果你需要指定一个不同的本地类型的话,你可以像下面这样指定。例子:
<field column="price" formatStyle="number" locale="de-DE" />
属性
数字格式转换器 只对那些带有属性“formatStyle”的域有用。
formatStyle : 解析这个域所需要的格式。这个属性的值必须是(number|percent|integer|currency)中的一个。可以参考 java NumberFormat.
sourceColName : 要使用数字转换的列。如果没有设定这个值,那么源列跟目标域的名称是一样的。
locale : 要转换的字符串所使用的国际化格式。如果没有设定这个值,它的默认值是系统的国际化格式。它的值必须是language-country。例如 en-US。
模板转换器
使用DataImportHandler中强大的模板引擎来创建或者设定一个域的值。例如:
<entity name="e" transformer="TemplateTransformer" ..>
<field column="namedesc" template="hello${e.name},${eparent.surname}" />
...
</entity>
这里模板的规则跟‘query’、‘url’的规则是一样的。它主要能帮我们将多个值连到一起,或者忘域值注入其他的字符。这个转换器只对拥有属性‘template’的域起作用。
属性
template : 模板字符串。上面的例子中有两个占位符,‘${e.name}和${eparent.surname}’。 In the above example there are two placeholders '${e.name}' and '${eparent.surname}' . 两个值都必须存在,否则这个模板将不会起作用。
自定义模板转换器
如果你需要在将数据送给solr之前,对数据进行一些处理,你可以写一个你自己的转换器。让我们来看一个例子。在我们的schema中我们有一个单值的域叫做‘artistName’,类型是String。这个域的值包含了多个单词,例如‘Celine Dion’,这里有一个问题 ,这个值包含一些开头空格和结尾空格,这些空格不是我们想要的。solr的WhitespaceAnalyze在这里用不上,因为,我们并不想把这个字符串切词了。一个可以选择的解决方案就是自己写一个TrimTransformer。
一个简单的TrimTransformer
package foo;
public class TrimTransformer {
public Object transformRow(Map row) {
String artist = row.get("artist");
if (artist != null)
row.put("ar", artist.trim());
return row;
}
}
不需要去继承任何类。这个类只需要有transformRow 方法,就像上面的那样。DataImportHandler会自动辨别它,并使用反射机制来调用它。你可以在你的data-config.xml文件中这样来设置:
<entity name="artist" query="..." transformer="foo.TrimTransformer">
<field column="artistName" />
</entity>
一个通用的TrimTransformer
假设,你想写一个通用的TrimTransformer,这样你就不用将要处理的列写在的代码里面。这里,我们需要在data-config.xml中设一个标记来表示这个域是否要应用这个转换器。
<entity name="artist" query="..." transformer="foo.TrimTransformer">
<field column="artistName" trim="true" />
</entity>
现在,你需要去继承 Transformer 这个抽象类,并使用Context中的API来获得实体中的域,并获得域中的属性,检查标记有没有被设值。
package foo;
public class TrimTransformer extends Transformer {
public Map transformRow(Map row, Context context) {
List> fields = context.getAllEntityFields();
for (Map field : fields) {
// Check if this field has trim="true" specified in the data-config.xml
String trim = field.get("trim");
if ("true".equals(trim)) {
// Apply trim on this fied
String columnName = field.get("column");
// Get this field's value from the current row
String value = row.get(columnName);
// Trim and put the updated value back in the current row
if (value != null)
row.put(columnName, value.trim());
}
}
return row;
}
}
如果域是多值的,那么返回值将会是一个list而不是单单一个对象,而且需要被恰当的处理。你可以将DataImprotHandler打包成一个jar包,然后再扩展Transformer和Context。
EntityProcessor(实体处理器)
默认的情况下,每个实体都会被sqlEntityProcessor处理。在系统 使用RDBMS作为数据源的时候,它很适用。对于其他的数据源,例如 REST 或者不是sql的数据源 ,你可以选择 继承org.apache.solr.handler.dataimport.Entityprocessor. 这个抽象类。它被设计成从实体中一行一行的读取数据。最简单的实现自己的实体处理器的方式是 继承EntityProcessorBase ,然后重写方法 public Map nextRow() method。 'EntityProcessor'依赖于 数据源来获取数据。数据源的返回类型对实体处理器来说是很重要的。下面是一些内嵌的实体处理器。
SqlEntityProcessor
它是默认的,数据源必须是DataSource类型的,在这里默认的情况下使用的是jdbcDataSource。
XPathEntityProcessor
处理XML类型的数据源。数据源的类型必须是DataSource类型的,这种类型的数据源有HttpDataSource和FileDatasource类型。
FileListEntityProcessor
简单的处理器,它能够从文件系统中得到文件的集合。这个系统基于一些标准,它不使用数据源,下面是实体的属性:
fileName :(必须) 辨别文件的正则表达式
baseDir : (必须) 根目录(虚拟路径)
recursive : 是否要递归的获取文件,默认是false。
excludes : 匹配文件名的正则表达式
newerThan : 一个数字参数 . 使用格式 (yyyy-MM-dd HH:mm:ss) . 它可以是一个datemath 类型的字符串,例如:('NOW-3DAYS'). 需要加单引号。它也可以是一个变量,像${var.name}这样。
olderThan : 一个数字参数 . 跟上一条的规则是一样的
rootEntity :根实体的值必须是false,除非你想索引文件名。位置直接在下面的是根实体,这就意味着根实体产生的行都将被当成一个document存放在lucene里面。但是,在这个例子里面,我们并不想为每个文件建立一个document,我们想对x实体产生的行建立document,因为实体f的属性rootEntiry等于false,所以在直接位于实体f下面的实体将成为根实体,它所产生的行将会被当成一个document。
dataSource :它必须被设为null值,因为这里并不需要使用任何的数据源,即是说,我们将不会创建Datasource的实例。(在大多数的情况下,只有一个数据源,jdbc数据源,所有的实体都用,在这里,数据源是没有必要的。)
例子:
<dataConfig>
<dataSource type="FileDataSource" />
<document>
<entity name="f" processor="FileListEntityProcessor" fileName=".*xml" newerThan="'NOW-3DAYS'" recursive="true" rootEntity="false" dataSource="null">
<entity name="x" processor="XPathEntityProcessor" forEach="/the/record/xpath" url="${f.fileAbsolutePath}">
<field column="full_name" xpath="/field/xpath"/>
</entity>
</entity>
<document>
<dataConfig>
千万要注意rootEntiry这个属性,由这个处理器所产生的域有fileAbsolutePath,fileSize,fileLastModified,fileName.
CachedSqlEntityProcessor
应该说,这是SqlEntityProcessor的一个扩展,这个处理器通过缓存一些行,来减少数据库查询。它几乎对根实体没有用,因为这个实体中只有一个sql语句被执行了。
Example 1.
<entity name="x" query="select * from x">
<entity name="y" query="select * from y where xid=${x.id}" processor="CachedSqlEntityProcessor">
</entity>
<entity>
这个例子的用法跟下面的是一样的,一个查询被执行完,它的结果被存储起来,下次这个查询再被执行的的时候,它将会从缓存中取出结果并返回。
Example 2:
<entity name="x" query="select * from x">
<entity name="y" query="select * from y" processor="CachedSqlEntityProcessor" where="xid=x.id">
</entity>
<entity>
这个例子跟前一个的区别在于属性‘where’。这个例子中,查询语句将从表中取回所有的数据,并把他们都放在缓存中。其中的关键就在域 属性‘where’。缓存使用y中的xid作为键值,实体被查询的时候x.id的值就会被计算出来,我们首先会在缓存中找匹配的数据,接着返回。
在属性where中,=号之前的值是y中的列,=号之后的值是计算出来的要在缓存中查找的值。
DataSource(数据源)
org.apache.solr.handler.dataimport.DataSource 能被继承。
public abstract class DataSource {
/**
* Initializes the DataSource with the Context
and
* initialization properties.
*
* This is invoked by the DataImporter
after creating an
* instance of this class.
*
* @param context
* @param initProps
*/
public abstract void init(Context context, Properties initProps);
/**
* Get records for the given query.The return type depends on the
* implementation .
*
* @param query The query string. It can be a SQL for JdbcDataSource or a URL
* for HttpDataSource or a file location for FileDataSource or a custom
* format for your own custom DataSource.
* @return Depends on the implementation. For instance JdbcDataSource returns
* an Iterator>
*/
public abstract T getData(String query);
/**
* Cleans up resources of this DataSource after use.
*/
public abstract void close();
}
它必须在数据源的定义部分被配置。
<dataSource type="com.foo.FooDataSource" prop1="hello"/>
JdbcdataSource
这个是默认的,它的声明如下:
public class JdbcDataSource extends DataSource>>
它可以一条一条的遍历数据库,每一行数据被当作一个Map。
HttpDataSource
XPathEntityProcessor使用这个数据源 . 它的声明如下:
public class HttpDataSource extends DataSource
FileDataSource
这个很像HttpDataSource . 它的声明如下:
public class FileDataSource extends DataSource
The attributes are:
basePath: (可选的) ,得到所需要的值时必须的基本路径。
encoding: (可选的)当文件编码跟平台编码不一样的时候,应当设定这个值。
Boosting , Skipping documents(提高文档的得分,或者跳过文档)
我们还可以在运行的时候提高一个文档的得分,或者跳过某一个特定的文档。
可以通过自定义转化器,增加一个属性,并将它设为true,这样就可以跳过这个文档了。可以通过,增加一个属性docBoost ,属性是文档的评分的这种方式给文档打分。Write a custom Transformer to add a value $skipDoc with a value 'true' to skip that document. To boost a document with a given value add $docBoost with the boost value
在 solrconfig.xml中增加数据源
我们也可以在solrconfig.xml中配置数据源,属性是一样的,只是方式稍微有点不同。
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> <lst name="defaults"> <str name="config">/home/username/data-config.xml</str> <lst name="datasource"> <str name="driver">com.mysql.jdbc.Driver</str> <str name="url">jdbc:mysql://localhost/dbname</str> <str name="user">db_username</str> <str name="password">db_password</str> </lst> </lst> </requestHandler>
结构图
下面的这个图显示了一般的配置文件的逻辑流程。
上面的这个图表达了这样的一个意思:一共有三个数据源,两个关系数据库的数据源,和一个http/xml的数据源。
jdbc1 和jdbc2 是JdbcDataSource ,它配置在solrconfig.xml文件中。
http是一个HttpDataSource类型的数据源。
根实体是一个叫做a的表,它使用jdbc1作为它的数据源。实体一般都与表名相同。
实体A有两个子实体 B 和C 。B使用http数据源,C使用jdbc2数据源。
在执行一个full-import的命令的时候,根实体A会首先被执行。
由实体A导出的每一行,都会被传给实体B和实体C。
B和C通过占位符来使用实体A中的数据。占位符:${A.a}。
B 有一个url属性
C 有一个query属性
C 有两个转换器 ‘f’和‘g’。
由C产生的每一行数据,都会被有序的传给 'f '和‘g’(转换器是链式的,即有序的)。每个转换器都能够改变输入的值。在这里转换器‘g’将从一行数据(f(c .1))中产生两行数据。
最近将每个实体的结果合并成为一个文档。
请注意:从C产生的中间结果,例如C.1 c.2 ,f(c.1) f(c.2),都将被忽略掉。
域声明
域的声明,能够帮助我们通过提供一些额外的信息得到那些不能自动获取到的值。它依赖于结果集中的列。在dataConfig里面配置的域,一般情况下应该跟schema配置的一样。它应该自动继承schema.xml中的所有的域。但是,你不能增加一些额外的域。 那么,什么时候增加域声明呢?
当实体处理器所产生的域的名字,跟相应的域在schema.xml中的名字不一样的时候。
当内嵌的转换器需要一些额外的信息来决定哪个域要处理,以及该怎么处理的时候。
XPathEntityprocessor 或者其他的处理器,显示的要求一些额外的信息的时候。
关于行(row)和多值域
行在DataimportHandler中的表现形式是一个Map。在这个map里面,key是域的名字,value可以任何一个合法的solr 类型。value也能够是合法的solr类型的聚集(这将会映射到一个多值域)。如果数据源是RDBMS的话,一般是不会产生多值域的。当然我们可以通过加一个子实体的方式来产生多值域。这里子实体返回的多个域,相当于父实体的一个多值域。如果数据源是xml的话,产生多值域是一件相当简单的事情。
变量
变量是指最终代替那些占位符的值。这是一个多级的map,每一个命名空间都是一个map,命名空间使用.分隔。例如 占位符 ${item.ID}, 'item'是一个命名空间(也是一个map),ID是这个命名空间下的一个值。我们很容易推导出 占位符 ${item.x.ID} 这里x是另外一个map。变量的值能够从Context中获得,也可以在RDMS的query属性中或者http数据源的url属性中使用类似${}的占位符获得。
使用函数来自定义query和url的格式
命名空间这个概念在这里也是相当的有用的。用户可能想要传一个经过计算的值给 query或者url,比如这里有一个Data类型的数据,但是你的数据源只支持另外一种格式的数据源。我们提供了一些函数,或许它们能够帮你完成一些事情。
formatDate : 它可以像这样去使用,'${dataimporter.functions.formatDate(item.ID, yyyy-MM-dd HH:mm)}' 。它的第一个参数是一个合法的变量,第二个参数是一种时间格式(这里使用的格式工具是SimpledateFormat),The first argument can be a valid value from the VariableResolver and the second cvalue can be a a format string (use SimpledateFormat) . 它可以是一个经过计算的值,它使用solr的时间表示方式。(要注意,它必须被单引号括起来
escapeSql : 使用它可以对特别的sql 字符串进行包装。例子 : '${dataimporter.functions.escapeSql(item.ID)}'. 这里只使用一个参数,这个参数必须是一个合法的VaraiableResolver.
encodeUrl : 使用这个对url进行编码。例子e: '${dataimporter.functions.encodeUrl(item.ID)}' . 只使用一个参数,这个参数必须是一个合法的VariableResolver
访问请求参数
我们可以使用'request'命名空间来访问传递给http 请求的参数。例如'${dataimporter.request.command}' 将会返回被执行的命令。任何参数都可以通过这种方式得到。
交互式的开发模式Interactive Development Mode
这是一个很酷的,并且功能强大的工具。它能够帮助你通过图形界面来建立一个dataconfig.xml文档。你可以通过 http://host:port/solr/admin/dataimport.jsp 来访问它。 以下是它的特性:
这个界面有两个板块,RHS是用来获取输入的,LHS是用来显示输出的。
当你点击debug now 按钮的时候,它将会执行配置文件,并且显示结果文档。
你可以通过start和rows这两个参数来调试 类似从115开始到118这样的文档。
选择 'verbose'选项表示你想要得到一些关于中间步骤的信息。包括query产生的数据,传给转换器的数据,以及转换器产生的数据。
如果在运行过程中发生了异常,那么LHS板块将显示异常信息。
fields是由实体产生的。当域没有在schema.xml中声明,也没有在dataConfig.xml有声明的时候,转换器就不会对该域进行处理了。
屏幕快照
哪里可以找到它?
DataimportHandler是solr的新加的特性。
从 Solr website 下载一个最新的版本 。
通过 Full Import 的例子来感受一下。
在Solr JIRA.的 SOLR-469 你可以查看到有关DataImporthandler的一些开发讨论。
第三部分:SOLR的db-data-config.xml高级进阶(处理CLOB和BLOB)
我们在使用solr处理数据库时,很多时候需要处理一下数据库中的CLOB、BLOB字段,对于这两种字段如何处理,下面以代码的形式给大家演示,(不用写Java代码啊)
1)定义数据源
<dataSource name="ora" driver="oracle.jdbc.OracleDriver" url="...." />
<datasource name="ds-BlobField" type="FieldStreamDataSource" />
2.)写一个blob字段处理
<entity dataSource="ora" name="meta" query="select id, filename,content, bytes from documents" transformer="ClobTransformer">
<field column="ID" name="id" />
<field column="FILENAME" name="filename" />
<field column="CONTENT" name="CONTENT" clob="true" />
<entity dataSource="ds-BlobField" processor="TikaEntityProcessor" url="FILE_CONTENT" dataField="ATTACH.FILE_CONTENT"> <field column="text" name="FJ_FILE_CONTENT" /><!-- 全局搜索 --> <field column="Author" name="FJ_FILE_AUTHOR" meta="true" /> </entity>
</entity>
这里简单介绍一下,上述蓝色字体是处理clob必须的,红色字体是处理blob必须的。还是比较简单的吧。如果你还没看明白,,我也没辙了。哦,这里需要说明一下,使用上述代码需要依赖几个jar包:
tika-app-0.9.jar(巨大20M,不过非常好用,对于PDF、Excel、Word、PPT、RTF、TAR 、ZIP 等等吧,好多自己查吧。)
http://apache.etoak.com//pdfbox/1.6.0/pdfbox-app-1.6.0.jar
activation-1.1.jar
mail-1.4.1.jar
缺少了就跑不起来了,;)
程序员报错QA大分享(1)
程序员报错QA征集第一弹来了哦~包含QA分享一期征集的部分内容,链接附带解决方案,可收藏哦~
npm install安装依赖一直报错?报错https://developer.aliyun.com/ask/301576 一个高难度的棘手的ajax处理怎么办? 报错https://developer.aliyun.com/ask/297111 shiro根据角色来进行权限验证,后台新增了一个角色后,每次都要去更新shiro.ini:报错 https://developer.aliyun.com/ask/297216 在django中,如何使用字符串作为对象名来调用model??报错https://developer.aliyun.com/ask/305768 jsf用的多吗?有什么优缺点?? 400 报错https://developer.aliyun.com/ask/294587 新项目,前台想学OSC不用Session,但验证码不知道怎么办:报错 https://developer.aliyun.com/ask/301267 weblogic 部署web应用时报错Provider com.sun.xml.?报错https://developer.aliyun.com/ask/306495 mybatis配置问题(已经解决)?报错https://developer.aliyun.com/ask/305252 tomcat redis 存放session配置报错java.lang.NoCl?报错https://developer.aliyun.com/ask/306218 shell如何自动设置mysql root密码 - shell报错https://developer.aliyun.com/ask/296991 new JSONObject(String)为什么报错?报错https://developer.aliyun.com/ask/303416 css 中的text-align: justify 文字对齐在安卓手机上无效配置报错 https://developer.aliyun.com/ask/296285 WEB项目发布,上下文路径配置问题 : 配置报错 https://developer.aliyun.com/ask/296101 [BlazeDS]Cannot create class of type 'co?400报错https://developer.aliyun.com/ask/294055 jquery 动态添加click 不请求服务器? 报错https://developer.aliyun.com/ask/297077 android studio中引入两个library的问题?报错https://developer.aliyun.com/ask/303587 银联网关支付接口开发?报错https://developer.aliyun.com/ask/302599 spring boot cache redis?报错https://developer.aliyun.com/ask/301037 print写入文件的问题 - 服务报错https://developer.aliyun.com/ask/295151 websocket中发送图片的二进制出现内容过长的错误?报错https://developer.aliyun.com/ask/301046 opencv+vs2010编译出现未识别标识符错误?报错https://developer.aliyun.com/ask/301753 最近装了一下centOS7,查了点问题:报错https://developer.aliyun.com/ask/298395 gps 模块返回的 经纬度 怎么对应上 百度或者 高德 gps经纬度 - 服务报错https://developer.aliyun.com/ask/295223 eclipse中提交git@osc报错?报错https://developer.aliyun.com/ask/305754 SpringAOP切面注释配置你是怎么运行成功的,我这边报错?报错https://developer.aliyun.com/ask/304046 linux中makefile设置路径的问题-linux报错https://developer.aliyun.com/ask/294526 firefox弹出警告报错 https://developer.aliyun.com/ask/295290 后端302触发了jquery ajax的error事件? 400 报错https://developer.aliyun.com/ask/293769 MiniDao持久层 Vs Mybatis:报错https://developer.aliyun.com/ask/303260 本人使用django1.11.16做了一个在线相册系统,现在想下载选中图片,想要?400报错https://developer.aliyun.com/ask/298179 折线图data级itemStyle设置无效的问题 - data报错https://developer.aliyun.com/ask/295748 java web邮箱开源组件的选择:报错https://developer.aliyun.com/ask/297964 使用Pyhton smtplib库发送邮件报错,ConnectionRefuse?400报错https://developer.aliyun.com/ask/301253 springMVC 表单 get方法提交正常 post提交报错HTTP Sta?报错https://developer.aliyun.com/ask/302405 ajax 请求成功后返回值问题? 400 报错https://developer.aliyun.com/ask/295984 redis 配置主从报错?报错https://developer.aliyun.com/ask/301733 shiro学习? 400 报错https://developer.aliyun.com/ask/294447 测试工具 0k 测试 1K 测试 8K 测试 64K 测试:报错https://developer.aliyun.com/ask/305063 Vue.js利用Axios请求到数据后,不能在页面上现实??报错https://developer.aliyun.com/ask/300728 JFinal用tomcat启动报错?报错https://developer.aliyun.com/ask/303450 大连沈阳源创会图文回顾及PPT分享? 400 报错https://developer.aliyun.com/ask/296773 grails最佳实践 - grails报错https://developer.aliyun.com/ask/296234 把springmvc的项目放进tomcat9运行,报错了?报错https://developer.aliyun.com/ask/300303 安装CentOS 重启后 无法输入密码:报错https://developer.aliyun.com/ask/297840 "jquery mobile 绑定监听器问题 :报错https://developer.aliyun.com/ask/305567" 求思路:线下和线上会员的设计:报错 https://developer.aliyun.com/ask/301216 anycmd所理解的rbac:报错https://developer.aliyun.com/ask/299622 sharding-jdbc分库分表疑问 SQL语句限制 : 配置报错 https://developer.aliyun.com/ask/295916 关于okHttputils gradle编译出错?报错https://developer.aliyun.com/ask/303674 Tengine concat 组合JavaScript和CSS文件问题 - 配置报错https://developer.aliyun.com/ask/296236 最近github老是push代码失败是个什么情况?!?报错https://developer.aliyun.com/ask/301613 一直往阻塞队列阻塞放数据会发生什么?? 400 报错https://developer.aliyun.com/ask/294678 mongod已停止工作??报错https://developer.aliyun.com/ask/302584 onSaveInstanceState 能保存 控件变量吗??报错https://developer.aliyun.com/ask/305452 关于netbeans7.2的配置问题!:配置报错 https://developer.aliyun.com/ask/295058 applet+jasperreport点击打印时报错,求大神指点?报错https://developer.aliyun.com/ask/305781 jquery mobile如何实现AJAX请求? 400 报错https://developer.aliyun.com/ask/295979 对数据库进行写操作的安全问题:报错https://developer.aliyun.com/ask/303211 如何有效过滤UGC社区下的垃圾信息?:配置报错 https://developer.aliyun.com/ask/294996 有 wait就必须要有synchronized,不然会报错吗???报错https://developer.aliyun.com/ask/305843 数据代码出现问题,求指教 - 代码报错https://developer.aliyun.com/ask/294528 注册时使用spring声明式事务管理? 400 报错https://developer.aliyun.com/ask/294968 从Voa网站下载图片部分图片下载不成功:报错https://developer.aliyun.com/ask/299590 VMware装了ubuntu18.04.3,安装后正常使用电脑关机再打开虚拟机就?400报错https://developer.aliyun.com/ask/297591 apk打包后安装了无法运行? 400 报错https://developer.aliyun.com/ask/296855 SpringMVC中controller如何接收ajax请求的返回值并完成跳转页面? 400 报错https://developer.aliyun.com/ask/297437 请教一个maven配置问题?:报错https://developer.aliyun.com/ask/299441 用iTextSharp读取PDF文档中文本内容:报错https://developer.aliyun.com/ask/298572 ECharts 的柱状图显示比较小,怎么放大?周围空白的地方太多了? 400 报错https://developer.aliyun.com/ask/293787 Intellij 用maven配置spring+sptingmvc项目?报错https://developer.aliyun.com/ask/303686 求各位大神看看下边的代码:报错https://developer.aliyun.com/ask/299573 CKEditor的配置 - 配置报错https://developer.aliyun.com/ask/296169 为何dubbo在tomcat启动报错??报错https://developer.aliyun.com/ask/302795 Flask-Bootstrap如何更改自带的模板? - Flask报错https://developer.aliyun.com/ask/296681 “Ceph浅析”系列之七——关于Ceph的若干想法:报错https://developer.aliyun.com/ask/299495 java.lang.NumberFormatException: For inp?400报错https://developer.aliyun.com/ask/300548 请教安装Queens版的问题?报错https://developer.aliyun.com/ask/299180 关于php验证的函数问题 - php报错https://developer.aliyun.com/ask/296930 ocs-ng和glpi想进行二次开发,可以联系我吗?? 400 报错https://developer.aliyun.com/ask/296891 Multiple Spring Data modules found, ente?400报错https://developer.aliyun.com/ask/298581 做项目是农民,做产品是艺术家 热:报错https://developer.aliyun.com/ask/302302 iis上怎么配置二级域名,类似于淘宝店铺的二级域名:报错https://developer.aliyun.com/ask/304799 geojson 遇到的诡异问题?报错https://developer.aliyun.com/ask/298135 Spring整合Struts在配置Struts过程中出现错误:Unable to?报错https://developer.aliyun.com/ask/301609 IDEA Jetty部署war包显示jar包找不到,实际war包中jar包存在?报错https://developer.aliyun.com/ask/298657 关于使用springframework.security的问题?报错https://developer.aliyun.com/ask/301880 mysql创建数据库的table时,如何加限定数量的插入?报错https://developer.aliyun.com/ask/298538 java批处理插入10w笔数据的问题:报错https://developer.aliyun.com/ask/300198 Magento安装了Multi Fees 前台不生效:报错https://developer.aliyun.com/ask/305384 已经安装了erlang20,安装rabbitmq还是报错?报错https://developer.aliyun.com/ask/298556 elasticsearch安装配置:报错https://developer.aliyun.com/ask/304603 weblogic部署报错,jpa+spring?报错https://developer.aliyun.com/ask/305499 Coevery 使用配置:配置报错 https://developer.aliyun.com/ask/295123 java项目跑不起来,CrmAdminMapper.xml出错,报错信息我是哪里?400报错https://developer.aliyun.com/ask/293694 各项配置已经配置好了还是有问题:报错https://developer.aliyun.com/ask/304653 出现Function 'printf' could not be resolved问题:报错https://developer.aliyun.com/ask/302540 PHP5.3不识别双引号的问题? 400 报错https://developer.aliyun.com/ask/294696 来晒晒配置吧:报错https://developer.aliyun.com/ask/297895 马上就要毕业了,现在心里真的有点迷茫,不知道该怎么选择?:报错https://developer.aliyun.com/ask/298430 关于iptables默认配置的说明 - 配置报错https://developer.aliyun.com/ask/296168 使用jax-rs调用resteasy服务使报错?报错https://developer.aliyun.com/ask/304344 redislive启动过程报错?报错https://developer.aliyun.com/ask/301807 kafka消费一段时间后,无法消费到数据,需要换一个groupId才可以?报错https://developer.aliyun.com/ask/300837 spring cloud bus配置rabbitmq的问题:报错https://developer.aliyun.com/ask/297894 make-kpkg日志在哪? 400 报错https://developer.aliyun.com/ask/296829 centos操作系统 ,opencv, java调用编译后的opencv动态链接库报错?报错https://developer.aliyun.com/ask/306338 activeMQ实现负载均衡加可靠性集群问题?报错https://developer.aliyun.com/ask/306304 js无法修改的style属性值?报错https://developer.aliyun.com/ask/303696 Python 使用rar命令压缩多个文件夹? 400 报错https://developer.aliyun.com/ask/294651 谁能帮我写一个sql,我写不出来。。:报错https://developer.aliyun.com/ask/303209 Ueditor配置问题:报错https://developer.aliyun.com/ask/304623 ccflow 你好,请教几个问题,关于节点删除.:报错 https://developer.aliyun.com/ask/297210 SpringMVC报错,看不懂,求解?报错https://developer.aliyun.com/ask/302482 spring aop 切日志的问题? 400 报错https://developer.aliyun.com/ask/294131 winfrom窗体的传值:报错https://developer.aliyun.com/ask/297945 spring的配置中有些配置没有id或者name属性,spring是如何注入的?:配置报错 https://developer.aliyun.com/ask/296331 Sysbench OLTP 性能测试: MySQL-5.6 vs. MariaDB-10.报错https://developer.aliyun.com/ask/302297 mysql创建数据库的table时,如何加限定数量的插入?报错https://developer.aliyun.com/ask/298542 弱弱的问一些关于网站链接支付宝时的问题?:报错https://developer.aliyun.com/ask/305225 python 模拟网页提交时候遇到下面这个怎么提交呢?? 400 报错https://developer.aliyun.com/ask/295708 hosts.allow规则无效:报错https://developer.aliyun.com/ask/299494 sfl4j 如何配置???:配置报错 https://developer.aliyun.com/ask/294878 springboot配置pom报错?报错https://developer.aliyun.com/ask/298930 Spring 启动时候报错?报错https://developer.aliyun.com/ask/302406 Php+ImageMagick+imagick API 配置指南:报错https://developer.aliyun.com/ask/298978 hibernate的实体类型问题? 400 报错https://developer.aliyun.com/ask/296938 socket.io与node.js通信问题? 400 报错https://developer.aliyun.com/ask/295769 java读取Txt文本问题:报错https://developer.aliyun.com/ask/300275 返回纯文本怎么办:报错https://developer.aliyun.com/ask/304844 Jenkins在做Android项目集成时的配置问题:配置报错 https://developer.aliyun.com/ask/296438 mongodb从库无法同步?报错https://developer.aliyun.com/ask/301736 将hbase表数据导入到hdfs上相关错误问题?报错https://developer.aliyun.com/ask/306021 socket传输问题? 400 报错https://developer.aliyun.com/ask/295555 【跪求结项挡路难题,大神施舍…】?报错https://developer.aliyun.com/ask/305819 模拟淘宝登陆验证码,下了您的代码,在我这运行有错误?报错https://developer.aliyun.com/ask/305715 [λ]你试过这样写C程序吗? 热:报错https://developer.aliyun.com/ask/303207 在vmware8下如何能让centOS5.5读取到U盘?:报错https://developer.aliyun.com/ask/298826 python post提交到服务器登陆,使用json数据,为什么不成功呢?? 400 报错https://developer.aliyun.com/ask/297403 Android手机如何设计一款类似于系统自带的“蓝牙设置”界面的App?:报错https://developer.aliyun.com/ask/298344 coreseek 安装出错 求解? 400 报错https://developer.aliyun.com/ask/296055 货邮数据通过接口传输到离港系统:报错https://developer.aliyun.com/ask/298001 JFinal 主键重复报错?报错https://developer.aliyun.com/ask/305891 sphinx配置sql_attr_multi:报错https://developer.aliyun.com/ask/297937 ###Nginx Udp代理配置问题### - 配置报错https://developer.aliyun.com/ask/296231 nginx expires 无效:配置报错 https://developer.aliyun.com/ask/296330 三星s5830i关于*##2664##*造成触摸屏失灵问题:配置报错 https://developer.aliyun.com/ask/296316 jfinal 主键更新问题?报错https://developer.aliyun.com/ask/306328 Druid监控页面404?报错https://developer.aliyun.com/ask/298196 Spring配置数据源有问题,请教。。。。? 400 报错https://developer.aliyun.com/ask/302195 jfinal中freemarker 为何能 ${user.name}? 400 报错https://developer.aliyun.com/ask/293929 写博文如何让代码可以快速复制?:报错https://developer.aliyun.com/ask/303346 HP-Socket加入到VC6.0工程后的问题?报错https://developer.aliyun.com/ask/305484 dcm4che 转JPG图片遇到问题?报错https://developer.aliyun.com/ask/299791 JFinal中有关 Model 自定义属性的问题?报错https://developer.aliyun.com/ask/306657 lua中,重写for循环迭代器的不解之处。?报错https://developer.aliyun.com/ask/301672 请问我想让setTimeout每四秒读取一次数据库,好做到实时无刷新更新,为什么不管用还报错?报错https://developer.aliyun.com/ask/300847 java 这样的正则表达式怎么写:报错https://developer.aliyun.com/ask/303332 mysql导入数据出错?报错https://developer.aliyun.com/ask/304005 Jfinal与jetty作为基础开发,运行在安装的tomcat中报错【不是jar?报错https://developer.aliyun.com/ask/305845 ssm+shiro 报错?报错https://developer.aliyun.com/ask/301392 "hudson 怎么配置就可以和svn同步了? :报错https://developer.aliyun.com/ask/305137" Gradle构建GroovyAndroid错误?报错https://developer.aliyun.com/ask/304365 jboot定时器中如何配置concurrent属性? - jboot报错https://developer.aliyun.com/ask/295790 Gradle用JUnit测试Spring框架的项目报错?报错https://developer.aliyun.com/ask/303585 SSH框架sqlServer数据库更换为oracle数据库问题?报错https://developer.aliyun.com/ask/298485 麻烦大家帮我看一下这个电脑配置怎么样:报错https://developer.aliyun.com/ask/297927 Android中如何解析json数据:报错https://developer.aliyun.com/ask/299680 Debian安装 Sphinx 支持中文检索 : 配置报错 https://developer.aliyun.com/ask/295651 PHP框架queryphp教程配置-配置报错https://developer.aliyun.com/ask/296225 MAVEN项目用eclipse启动没有问题正常运行,部署到服务器上出现下面的错误?报错https://developer.aliyun.com/ask/300520 日期格式化的问题set进对象报错?报错https://developer.aliyun.com/ask/300586 通过框架用Java代码,在jsp页面中把数据库中的数据:报错https://developer.aliyun.com/ask/303306 关于hadoop的一点看法 - 报错https://developer.aliyun.com/ask/300232 c3p0连接oracle的问题?报错https://developer.aliyun.com/ask/301902 jquery mobile ajax 请求,弹出提示框? 400 报错https://developer.aliyun.com/ask/296012 Cloud Foundry cf工具安装问题:报错https://developer.aliyun.com/ask/305172 更新了cordova 版本,执行cordova platform add and?报错https://developer.aliyun.com/ask/301750 springboot多数据源配置,我配置三个还好好的,配置4个后有一个就不工作了 - 配置报错https://developer.aliyun.com/ask/295095 springmvc 使用jackson转换 hibernate lazyload?报错https://developer.aliyun.com/ask/306056 Mopaas V2部署项目失败,项目在Mopaas V1下是可以部署成功的?报错https://developer.aliyun.com/ask/303482 eclipse中jsp页面的使用?报错https://developer.aliyun.com/ask/303472 springmvc(3.2)+hibernate(4.2)整合,报错:No Se?报错https://developer.aliyun.com/ask/306604 Nginx在64位CentOS下gzip无效 : 配置报错 https://developer.aliyun.com/ask/295685 andoird 5.0以上真机调试报错。?报错https://developer.aliyun.com/ask/302403 POST方式向服务器提交数据报错?报错https://developer.aliyun.com/ask/301115 vtiger6.0 汉化bug集:报错https://developer.aliyun.com/ask/298204 layout 布局调用的页面combobox选择失效?报错https://developer.aliyun.com/ask/305385 老问题:ajax请求跨域? 400 报错https://developer.aliyun.com/ask/294975 一个页面载加多个window.onload这种需求有法写吗:报错https://developer.aliyun.com/ask/304963 导出表数据select * from 表 into outfile 在同一个位置?400报错https://developer.aliyun.com/ask/300962 使用父类(没有表)继承model,然后使用子类去继承父类,在启动时自动注册表出错? 400 报错https://developer.aliyun.com/ask/296945 无法修订提醒邮箱 : 配置报错 https://developer.aliyun.com/ask/296608 我的mysql数据库不见了:报错 https://developer.aliyun.com/ask/297147 如何在Android上编写rocketMq的消费者??报错https://developer.aliyun.com/ask/300260 jFinal里 怎么处理跨域请求?? 400 报错https://developer.aliyun.com/ask/296892 HttpUtils 上传图片 返回500?报错https://developer.aliyun.com/ask/303029 sql like 后面怎么通配 不可见字符?:报错https://developer.aliyun.com/ask/303203 Jfinal-weixin renderJsp()报错?报错https://developer.aliyun.com/ask/303004 Java如何绕开协议读取邮件?:报错https://developer.aliyun.com/ask/298871 Spring Error creating bean,项目是好项目,但就是报错。?报错https://developer.aliyun.com/ask/302253 java项目还是跑不起来?不过报错有点变化,求大神帮忙?报错https://developer.aliyun.com/ask/300933 ES6中let报错,这是个大坑,大家怎么看待??报错https://developer.aliyun.com/ask/297553 大家帮我看看这个php网页有问题吗?为什么浏览器直接显示代码?报错https://developer.aliyun.com/ask/303419 netty的一个引用计数器释放的问题, 报异常?报错https://developer.aliyun.com/ask/303736 Servlet的url匹配问题?报错https://developer.aliyun.com/ask/302712 小弟刚学习python安装了pycharm遇到了如下问题,麻烦大神提点?报错https://developer.aliyun.com/ask/301092 mysql5.6.26版本的配置问题 - mysql报错https://developer.aliyun.com/ask/295549 关于使用oracle连接报错的问题?报错https://developer.aliyun.com/ask/304258 JSP页面好像引入不了js,css文件,需要设置什么吗?:报错https://developer.aliyun.com/ask/305089 一个库里有一个表无法selet:报错https://developer.aliyun.com/ask/301482 在哪个位置配置:配置报错 https://developer.aliyun.com/ask/294742 activemq重启时,Consumer进程必须重新加载才能收到消息?报错https://developer.aliyun.com/ask/303843 excel宏运行报错?报错https://developer.aliyun.com/ask/301726 android系统九宫格密码:报错 https://developer.aliyun.com/ask/297118 第七章 – 自定义Magento系统配置:配置报错 https://developer.aliyun.com/ask/294770 mac下sourcetree克隆git@OSC的项目一直提示“这是一个无效的源路径/URL”报错https://developer.aliyun.com/ask/297812 "关于JNI调用opencv的问题 :报错https://developer.aliyun.com/ask/306456" 关于密码盐值的存放地点报错 https://developer.aliyun.com/ask/295497 eclipse ADT new android项目的时候 ,为什么项目名是中文的?报错https://developer.aliyun.com/ask/302082 python commands 执行shell 传递的文件不完整:报错https://developer.aliyun.com/ask/299619 高手在哪里呀,高手在哪里!! 项目mac迁移到win8系统下启动报错?报错https://developer.aliyun.com/ask/305863 java.lang.IllegalArgumentException: Inva?400报错https://developer.aliyun.com/ask/300040 jackson延迟加载的对象如何处理??报错https://developer.aliyun.com/ask/306146 redis集群重启后,获取重启前持久化存储内容失败? 400 报错https://developer.aliyun.com/ask/293836 spring cloud config client 如何加载多个配置文件?:报错https://developer.aliyun.com/ask/299749 ActiveMQ链接失败,导致tomcat启动失败?报错https://developer.aliyun.com/ask/302614 有大量的js脚本需要通过java输出,但是里面的正则头痛:报错https://developer.aliyun.com/ask/304988 如何停止一个异步线程 - 服务报错https://developer.aliyun.com/ask/295252 iis上配置二级域名 - 配置报错https://developer.aliyun.com/ask/295148 spring配置mysql数据库的问题?报错https://developer.aliyun.com/ask/301793 git客户端如何记住用户名与密码呢,使用git出问题- git报错https://developer.aliyun.com/ask/296850 页面使用el表达式报错?报错https://developer.aliyun.com/ask/302938 windows+apache+mysql+php 高并发和apache异常关闭:报错https://developer.aliyun.com/ask/305015 springmvc整合shiro 会话管理时候报错?报错https://developer.aliyun.com/ask/302642 jfinal2.2加入jfina-weixin(1.9)冲突如何解决?报错https://developer.aliyun.com/ask/303183 java mybatie问题,再传map参数里面是list的时候,总是报传进去的参数为空:配置报错 https://developer.aliyun.com/ask/296290 关于python2.7和3.6 语法?报错https://developer.aliyun.com/ask/301771 vue元素赋值无效 : 配置报错https://developer.aliyun.com/ask/295970 lucene 4.2 入门的 简单 问题, 求大神们帮忙解决下吧:报错https://developer.aliyun.com/ask/299411 spring Security 中权限变更时该怎么做:配置报错 https://developer.aliyun.com/ask/296332 HttpKit 请求超时? 400 报错https://developer.aliyun.com/ask/297375 求大神们帮忙!关于xml内嵌php代码解析的问题:报错https://developer.aliyun.com/ask/300331 新建一个服务器,android客户端通过服务器和SQL Server 2005交互,:报错https://developer.aliyun.com/ask/297996 EF数据迁移报错,执行Enable-Migrations 命令出现异常?报错https://developer.aliyun.com/ask/306701 标签体外怎么获取标签变量?报错https://developer.aliyun.com/ask/305852 网站安全如何防范:报错https://developer.aliyun.com/ask/297810 我想用手头的解码器写一个专门的播放器该如何下手:报错https://developer.aliyun.com/ask/304912 新手提问 - Node.js安装express报错怎么破??报错https://developer.aliyun.com/ask/306653 maven无法获取远程仓库jar:配置报错 https://developer.aliyun.com/ask/294734 js修改class属性相关问题:报错 https://developer.aliyun.com/ask/301264 run没问题,打成apk时报错,怎么解决?报错https://developer.aliyun.com/ask/305419 请求后台数据报错?报错https://developer.aliyun.com/ask/299768 cxf 拦截器 ?报错https://developer.aliyun.com/ask/300308 如何定位Android NDK开发中遇到的错误?报错https://developer.aliyun.com/ask/306135 tomcat 与ServerSocket一起工作卡死?报错https://developer.aliyun.com/ask/301571 用easyui怎么实现其datagird导出到Excel?? 400 报错https://developer.aliyun.com/ask/295840 下面这样的写法都是啥意思啊??报错https://developer.aliyun.com/ask/300935 wget无法下载github上的软件?报错https://developer.aliyun.com/ask/306380 深入理解Magento - 第一章 - Magento强大的配置系统 - 配置报错https://developer.aliyun.com/ask/296787 使用union查询结果,返回的ActiveDataProvider分页无效 - 服务报错https://developer.aliyun.com/ask/295162 Jfinal中, 是自动关闭Connection的吗?报错https://developer.aliyun.com/ask/303593 JFinal redis报错?报错https://developer.aliyun.com/ask/303465 读硬盘会很慢吗?:报错https://developer.aliyun.com/ask/299649 波总,我有来了?报错https://developer.aliyun.com/ask/301112 wamp2.4配置虚拟目录:配置报错https://developer.aliyun.com/ask/296295 为什么往dialog里setView ,里面的View设置监听器无效:报错https://developer.aliyun.com/ask/305957 Integer.parseInt?报错https://developer.aliyun.com/ask/301816 模拟登录QQ空间求助~:报错https://developer.aliyun.com/ask/298428 mysql ROW同步问题?报错https://developer.aliyun.com/ask/306151 @Url.Content("")中怎样添加变量?? 400 报错https://developer.aliyun.com/ask/296050 mybatis查询时传递对象问题,始终报类型错误,求哪位前辈进来看看?报错https://developer.aliyun.com/ask/302630 springmvc消息进行全局加密和解密? 400 报错https://developer.aliyun.com/ask/297432 EditPlus 3.x 配置PHP开发环境:报错https://developer.aliyun.com/ask/304616 Could not get JDBC Connection?报错https://developer.aliyun.com/ask/301448 java的sql复制在数据库里能执行,但是运行还是报错啊?报错https://developer.aliyun.com/ask/298904 CMake 和 OopenCV配置问题:报错https://developer.aliyun.com/ask/305991 ONES 安装插件报错!?报错https://developer.aliyun.com/ask/306187 jpa 操作无主键的数据库?报错https://developer.aliyun.com/ask/298733 SpringBoot @EnableAutoConfiguration注解报错?报错https://developer.aliyun.com/ask/298161 求助 solr 分批索引:报错https://developer.aliyun.com/ask/299664 这种sql出来的数据为啥不对 以及mysql中的数据表示式如何写:报错https://developer.aliyun.com/ask/302392 为什么延迟加载的对象中的Mapping注解无效?:报错https://developer.aliyun.com/ask/297818 Tengine健康检测怎么检测后端https服务器啊:报错https://developer.aliyun.com/ask/305181 Direct2D绘图的问题,DrawBitmap:报错https://developer.aliyun.com/ask/301465 请教一下JAVA开发的WEB系统,JAVA 文件改动后, 是否需要重新启动WEB服务器:报错https://developer.aliyun.com/ask/304985 struts2 action中成员变量的生存周期? 400 报错https://developer.aliyun.com/ask/297414 query autocomplete请求回来的时候是render Josn数据格?400报错https://developer.aliyun.com/ask/295629 发现一个jstl的问题 :报错https://developer.aliyun.com/ask/297838 微信支付,测试官方demo 一直是无效签名 - 服务报错https://developer.aliyun.com/ask/295796 Uploadify上传视频文件出错? 400 报错https://developer.aliyun.com/ask/296726 jboot开发,更改html页面时,如何做到不重新部署就能看到修改效果:报错https://developer.aliyun.com/ask/298297 iOS开发中,遇到这样的报错 Conflicting types for ali?报错https://developer.aliyun.com/ask/304117 正常软件开发流程是什么样的? - 服务报错https://developer.aliyun.com/ask/295932 vue post请求?报错https://developer.aliyun.com/ask/300407 linux中编写自定义的python模块?报错https://developer.aliyun.com/ask/300997 flume 1.6.0 源码编译? 400 报错https://developer.aliyun.com/ask/293901 php 静态方法调用问题?报错https://developer.aliyun.com/ask/301630 "apache的Redirect不起作用 :报错https://developer.aliyun.com/ask/299058"
【OS】NMON的简介和使用
【OS】NMON的简介和使用
目前NMON已开源,以sourceforge为根据地,网址是http://nmon.sourceforge.net。
1. 目的
本文介绍操作系统监控工具Nmon的概念、使用方式及使用参数。指导运维人员通过nmon工具监视AIX/Linux操作系统资源使用情况,收集监控结果及产生的数据文件,制作相关系统性能分析报告。
2. Nmon简介
Nmon (Nigel’s Monitor)是由IBM 提供、免费监控 AIX 系统与 Linux 系统资源的工具。该工具可将服务器系统资源耗用情况收集起来并输出一个特定的文件,并可利用 excel 分析工具(nmon analyser)进行数据的统计分析。
2.1 软件特性
nmon 工具可以在一个屏幕上显示所有重要的性能优化信息,并动态地对其进行更新。这个高效的工具可以工作于任何哑屏幕、telnet 会话、甚至拨号线路。另外,它不会消耗大量的 CPU 周期,通常低于百分之二(在更新的计算机上,其 CPU 使用率将低于百分之一)。nmon使用哑屏幕,在屏幕上对数据进行显示,并且每隔两秒钟对其进行更新。用户可以很容易地将这个时间间隔更改为更长或更短的时间段。如果拉伸窗口,并在 X Windows、VNC、PuTTY 或类似的窗口中显示这些数据,nmon 工具可以同时输出大量的信息。
nmon 工具还可以将相同的数据捕获到一个文本文件,便于以后对报告进行分析和绘制图形。输出文件采用电子表格的格式 (.csv)。
目前nmon已开源,以sourceforge为根据地,网址是http://nmon.sourceforge.net。
2.2 软件组成
Nmon使用需要nmon工具和nmonanalyser分析程序两者配合使用。nmon工具生成性能数据文件,然后monanalyser以nmon生成的数据文件作为输入,输出为Excel 电子表格,并自动地生成相应的图形,使得我们能够直观地观察OS性能(CPU、IO和内存等)的变化过程。
2.3 运行环境
nmon 工具运行于:
· AIX? 4.1.5、4.2.0、4.3.2 和 4.3.3(nmon Version 9a:该版本的功能已经确定,并且不会对其进行进一步的开发。)
· AIX 5.1、5.2 和 5.3(nmon Version 10:该版本现在支持 AIX 5.3 和基于 POWER5? 处理器的计算机,并且提供了 SMT 和共享 CPU 微分区的支持。)
· pSeries? p5 和 OpenPower? 上的 Linux? SUSE SLES 9、Red Hat EL 3 和 4、Debian
· Linux SUSE、Red Hat 和许多最新的 x86(32 位模式的 Intel 和 AMD)上的发布版
· zSeries? 或 mainframe 上的 Linux SUSE 和 Red Hat
nmon 工具大约每六个月更新一次,或者在可用的新的操作系统发布版中对其进行更新。
2.4 软件功能
nmon 工具可以为 AIX 和 Linux 性能专家提供监视和分析性能数据的功能,其中包括:
· CPU 使用率
· 内存使用情况
· 内核统计信息和运行队列信息
· 磁盘 I/O 速度、传输和读/写比率
· 文件系统中的可用空间
· 磁盘适配器
· 网络 I/O 速度、传输和读/写比率
· 页面空间和页面速度
· CPU 和 AIX 规范
· 消耗资源最多的进程
· IBM HTTP Web 缓存
· 用户自定义的磁盘组
· 计算机详细信息和资源
· 异步 I/O,仅适用于 AIX
· 工作负载管理器 (WLM),仅适用于 AIX
· IBM TotalStorage? Enterprise Storage Server? (ESS) 磁盘,仅适用于 AIX
· 网络文件系统 (NFS)
· 动态 LPAR (DLPAR) 更改,仅适用于面向 AIX 或 Linux 的 pSeries p5 和 OpenPower
2.5 软件获取
nmon工具和nmonanalyser工具都可以在IBM的Wike页面上下载到。
1) Nmon下载: 位置:可从IBM Wiki上下载 http://www-941.haw.ibm.com/collaboration/wiki/display/WikiPtype/nmon 下载页面如下: 下载 (31.17 KB)2009-2-22 23:49
例如测试的系统是AIX5.3,那么就可以下载nmon4aix12e.zip ,下载后可以看到压缩包里是一些文件,如下:
下载 (8.54 KB)
2009-2-22 23:49
其实nmon就是shell脚本,nmon文件运行时调用其他的文件,生成性能数据,这个工具运行时也是通过执行nmon脚本接受参数。
2) Nmonanalyser下载: 位置:可从可从IBM Wiki上下载 http://www-941.haw.ibm.com/collaboration/wiki/display/Wikiptype/nmonanalyser 下载页面如下:
下载 (26.08 KB)
2009-2-22 23:49
例如下载V3.3版本的Nmonanalyser。
3. Nmon使用
3.1 下载软件
1) 下载之前须确定操作系统内核版本,本文以公司服务器192.168.40.212为例。登录服务器使用命令获取操作系统版本信息:
查看可知为Enterprise Linux Server release 5.5。
2) 登录IBM官方网站(http://nmon.sourceforge.net/pmwiki.php?n=Site.Download)下载相应版本的nmon工具:nmon_linux_14g.tar.gz
3.2 安装软件
1) 用root用户登录系统,建立目录:#mkdir /nmon
2) 通过FTP将下载的nmon工具上传至服务器 192.168.40.212目录/nmon下。
3) 修改tar包权限:#chmod +x nmon_linux_14g.tar.gz
4) 解压文件:#tar xvfZ nmon_linux_14g.tar.gz
5) 执行授权命令:#chmod +x nmon_x86_rhel54
3.3 运行界面
1) 运行./nmon_x86_rhel54,便可进入nmon的监控界面,如下图:
2) 键入“c”查看系统CPU使用情况
3) 键入“m”查看系统内存使用情况
4) 键入“d”查看系统磁盘I/O情况
5) 键入“h”查看帮助信息
3.4 使用方法
3.4.1 实时监控
在完成配置后,只需要“#./nmon”命令即可运行程序,通过一些快捷键调取关心的系统资源指标进行显示,如按键“C”可以查看CPU相 关信息;按键“D”可以查看磁盘信息;按键“T”可以查看系统的进程信息;“M”对应内存、“N”对应网络等等,完整的快捷键对应内容可以通过帮助(按键 “H”)查看,可以显示Linux系统CPU、内存、进程信息,包括了CPU的用户、系统、等待和空闲状态值,可用内存、缓存大小以及进程的CPU消耗等详细指标。
该种方式显示信息实时性强,能够及时掌握系统承受压力下的运行情况,每颗CPU利用率是多少、内存使用多少、网络流量多少、磁盘读写……这些数据均是实时刷新,一目了然。
3.4.2 后台监控
为了配合性能测试,我们往往需要将一个时间段内系统资源消耗情况记录下来,这时可以使用命令在远程窗口执行命令:
./nmon/ nmon_x86_rhel5 -f -N -m /nmon/log -s 30 -c 120 其中各参数表示: -f 按标准格式输出文件:<hostname>_YYYYMMDD_HHMM.nmon -N include NFS sections -m 切换到路径去保存日志文件 -s 每隔n秒抽样一次,这里为30 -c 取出多少个抽样数量,这里为120,即监控=120*(30/60/60)=1小时 根据小时计算这个数字的公式为:c=h*3600/s,比如要监控10小时,每隔30秒采样一次,则c=10*3600/30=1200
该命令启动后,会在nmon所在目录下生成监控文件,并持续写入资源数据,直至360个监控点收集完成——即监控1小时,这些操作均自动完成,无需手工干 预,测试人员可以继续完成其他操作。如果想停止该监控,需要通过“#ps –ef|grep nmon”查询进程号,然后杀掉该进程以停止监控。
3.4.3 定时任务
除配合性能测试的短期监控,我们也可以实现对系统的定期监控,作为运营维护阶段的参考。定期监控实现如下:
1) 执行命令:#crontab –e
2) 在最后一行添加如下命令: 0 8 * * 1,2,3,4,5 /nmon/nmon_x86_rhel5 -f -N -m /nmon/log -s 30 -c 1200 表示: 周一到周五,从早上08点开始,监控10个小时(到18:00整为止),输出到/nmon/log
4. Nmon监控结果介绍
4.1 生成结果文件
通过后台监控和定期监控,我们可以得到扩展名为nmon的监控文件,这些文件记录着系统资源的数据,需要配合分析工具(nmon analyser)进行解读。
1) 使用FTP工具从服务器上取下生成结果文件/nmon/log/sjfx212_120318_1723.nmon到本机。
2) 打开nmon_analyser.zip 包下的nmon analyser v33g.xls 文件,点击Analyse nomn data按钮,选择之前get下来的sjfx212_120318_1723.nmon文件。
Excel可能禁止运行宏了,点“安全警告旁边的选项”,允许运行宏:
3) 生成分析结果文件sjfx212_120318_1723.nmon.xlsx,并生成统计图,直观显示系统资源情况。
4.2 主要性能参数介绍
u 系统汇总(对应excel标签的‘SYS_SUMM’):其中蓝线为cpu占有率变化情况;粉线为磁盘IO的变化情况。
u 磁盘读写情况汇总(对应excel标签的‘DISK_SUMM’): 其中蓝色为磁盘读的速率KB/sec;紫色为磁盘写的速率KB/sec。
u 内存情况汇总(对应excel标签的‘MEM’): 曲线表示内存剩余量(MB)
4.3 页面介绍
简单介绍生成结果的各个页面:
1) 系统汇总页面:对应标签页(SYS_SUMM)
页面显示项主要有主机名,执行日期,系统cpu使用情况(蓝线),系统I/O情况(粉红线),其中坐标左纵轴为系统cpu(user%+sys%)使用率,横轴为运行时长(下图为一个小时),右纵轴为系统磁盘传输(Disk xfers),坐标下侧为统计信息:系统I/O情况(一个周期内的平均值、最大值、出现最大值的时间),系统CPU使用情况。
选项
说明
备注
User%
用户进程时间在CPU 开销时间百分比
如果一个CPU 被充分使用,利用率分类之间均衡的比例应该是:
65% - 70% User Time
30% - 35% System Time
0% - 5% Idle Time
Wait%
所有进程线程被阻塞等待完成一次IO 请求所占CPU 开销idle的时间百分比
Sys%
线程和中断在CPU 开销时间百分比
Idle%
CPU 空闲时间的百分比
CPU%
CPU 利用率的百分比
注释:
如果系统CPU有IO wait存在,说明可能IO或内存方面存在瓶颈,其中主要导致IO Wait的主要原因如下:
ü 内存不够而引起频繁的的数据交换,导致数据存取存在交换空间的 I/O瓶颈
ü 硬盘数据分布不合理
2) 系统信息:标签页(AAA)
页面信息主要包括:执行命令,主机CPU数(4),操作系统内核版本信息,主机名等信息。
3) 系统详细信息:标签页(BBBP)
页面信息主要包括:操作系统版本,主机磁盘信息,主机CPU型号、主频信息,内存信息,网卡信息等。
4) CPU使用情况:标签页(CPU_ALL,CPU_SUMM,CPU001,CPU002,CPU003,CPU004)
主机CPU使用情况汇总以及单颗CPU的运行情况。
5) 磁盘读写情况汇总:标签页(DISK_SUMM,DISKBSIZE,DISKBUSY,DISKREAD,DISKWRITE,DISKXFER)
磁盘的读、写及I/O统计信息,系统各磁盘分区的读写情况。其中DISKBUSY页主要反映系统本地磁盘使用,DISK_SUMM包括本地和存储(ESS, EMC, FASt及HDS)上所有磁盘使用情况。
6) 内存使用情况:标签页(MEM)
系统内存空闲、使用,swap、cached等统计信息。
7) 系统网络情况:标签页(NET,NETPACKET)
反映系统的网络运行情况,系统各个网络适配器读写的数据包数
8) 系统进程:标签页(PROC)
反映系统运行线程及等待切换的线程平均数。其中RunQueue - 每个处理器应该运行队列不超过1-3个线程。
9) 活动虚拟内存总量:标签页(VM)
Linux操作系统特有指标,主要包括系统/proc/vmstat文件中信息,两张图片主要显示系统分页文件(pagefile)和swap分区运行情况。如果系统总是存在大量换出页(pgpgout/s)KB数,说明系统需要更多内存。
10) 页式调度:标签页(PAGE)
记录系统(AIX)页式调度的情况。这一栏主要记录系统换页(paging)情况和页面扫描:自由比率(page scan:free ratio)。其中系统换页频率应该不大于5次/秒,而当页面扫描:自由比率持续大于4时,需要重点关注下系统内存和分页空间的使用情况。
说明:
大量的内存交换操作会极大地影响系统的性能,尤其是在当数据库文件创建在文件系统上时(JFS and JFS2)。在这种情况下经常访问的数据,即在SGA中存在,也同样在文件的缓存中存在。这种相同的数据在内存中缓存两次的情况,会降低内存的使用效率,从而使内存频繁进行交换操作,造成系统的I/O瓶颈,降低整个系统的性能。
11) 采集时间:标签页(ZZZZ)
记录nmon工具采集系统信息的时间点。
5. Nmon监控案例介绍
本节介绍通过nmon工具发现系统性能下降问题的常见现象和处理流程。
5.1 常见现象和产生原因
性能下降(Performance Degradation),主要是指系统的性能随时间而逐渐下降(这里假定在系统性能下降的过程中系统的负载状况没有明显变化)。系统运行过程中占用的CPU或内存随时间增加也属于广义的性能下降问题。
在生产环境中,通常由终端客户最先感觉到并报告性能下降问题。所以狭义的性能下降问题主要是指系统运行指标随时间变化,比如吞吐率随时间下降或页面响应时间随时间上升,或者两者兼而有之。
下面列举一些引起性能下降问题的原因:
ü 应用程序资源使用问题。主要是内存使用问题,即由于应用服务器的内存碎片问题或内存泄漏问题,导致垃圾回收的开销随时间增大。也有可能是因为磁盘临时文件积累造成磁盘访问开销增大。
ü 应用程序设计问题。由于应用程序的设计存在可扩展性或可靠性问题,导致运行开销随时间或业务对象的积累而增大。
ü 数据库访问问题。该问题又可以分为许多类型,如调优参数问题、表结构或索引设计问题、垃圾数据问题等。其共同特点是导致应用程序利用特定操作访问数据库的开销随时间而增大。
ü 服务器软件资源使用问题。虽然可能性很小,但是应用服务器、数据库服务器等服务器程序也是软件程序,也有可能存在性能下降问题。这些服务器程序在自身测试过程中可能遗漏了某些性能问题,而在用户特定的执行状况下触发了这些问题,结果导致这些服务器程序使用的操作系统资源泄漏而出现性能下降问题。
ü 测试用例设计问题。性能测试中有可能发现一些“假”的性能下降问题。比如测试用例设计时假设在测试执行过程中系统负载保持恒定,但实际的测试用例实现导致系统负载或特定页面的处理内容随时间增多,也可能导致测试工具的测试报告中出现性能下降问题。
5.2 实例介绍
5.2.1 示例一
图5-1 nmon操作系统监视汇总信息图
由此信息图可发现在12小时测试进行过程中,系统的磁盘传输(Disk xfers)逐渐增大,与此同时系统CPU占用率逐渐下降。进一步检查单个CPU的使用情况,发现1号CPU的Wait状态占用率明显增大,如图5-2所示。这说明CPU占用率逐渐下降是由于等待磁盘I/O引起的。
图5-2 nmon单个CPU使用情况图
接下来分析磁盘传输汇总信息,如图5-3所示,可以看出磁盘写数据量没有明显增加,但是磁盘读数据量明显随时间而增加。
图5-3 nmon磁盘传输汇总情况图
凭磁盘传输汇总信息,在排除由应用服务器读取导致的性能下降问题后,基本可以肯定不断增加的磁盘读取操作是由数据库引起的。
随后,分析DB2的快照监视器的监视结果,可以发现DB2的缓冲池(Buffer pool)的数据和索引物理读(physical read)的比例非常高。如下例所示:
Buffer pool data logical reads = 5502388
Buffer pool data physical reads = 430671
Buffer pool temporary data logical reads = 0
Buffer pool temporary data physical reads = 0
……
可以看到缓冲池的物理读比例(即缓冲池不命中率)高达7%,这远远大于1%的警戒线。而且物理读比例有随时间增加的趋势(通过不同时间的快照信息对比发现)。
至此可以怀疑性能下降问题是由于DB2的缓冲池配置参数设置不当引起的。考察数据库配置参数信息发现,该数据库的BUFFPAGE参数值为10000。与该测试用例使用的数据规模相比,这个参数值明显偏小。于是将BUFFPAGE参数值增大10倍,变为100000,重新运行性能测试,发现性能下降问题基本消失。
5.2.2 示例二
本实例为通过nmon监控河北税源管理平台数据仓库收集的数据。对照nmonanalyser工具生成结果进行分析。
1) 收集服务器基本信息
通过以上数据可以知道河北数据仓库服务器基本配置信息如下:
ü 主机名:HE_SSGLY_DB_01
ü 操作系统版本:AIX 5.3.0.44 build 5300-04
ü 操作系统内核:HW-type=CHRP=Common H/W Reference Platform Bus=PCI LPAR=Dynamic Multi-Processor 64 bit
ü 主机型号:IBM p5 595 (9119-595)
ü 网络配置:IP Address: 75.16.16.191 Sub Netmask: 255.255.248.0 Gateway: 75.16.16.100
ü 主机存储:EMC存储
ü 主机物理内存:49152 MB
ü 网卡信息:2块网卡 速率为1024M/S
2) 文件系统使用情况
通过以上数据可以知道河北数据仓库服务器文件系统相关信息如下:
ü 文件系统分区大小及使用情况
ü 文件系统挂载点信息
ü 文件系统类型为JFS2(Journaled File System 2)文件系统
3) 系统资源使用情况
观察上图,可以发现服务器cpu使用率较高的时段为8:00-11:30、14:00-17:20,而系统I/O开销较高的时段均出现在21:00-次日5:50。以上信息基本符合服务器晚上进行数据ETL处理、白天工作时段多进行平台一般事务处理的情况。进一步观察服务器cpu使用情况:
发现CPU利用率较高均为用户进程,单独查看CPU-11注意到22:00-0:00这个时段内CPU的Wait状态占用率明显增大, user状态占用率却很低,此时系统I/O明显升高,说明这个时段内有大量磁盘I/O发生,CPU占用率逐渐下降是由于等待磁盘I/O引起的。实际情况中,这个时段服务器正在进行ETL数据处理,的确有大量数据传输和磁盘读写发生。
5.2.3 示例三
介绍个利用nmon进行系统实时监控的例子。
把nmon脚本上传到服务中,直接运行即可,执行命令如下:#./nmon或者#/tmp/nmon/nmon
以下是aix5.3下使用nmon的一些截图:
分别输入c、t、n、m,可以了解系统cpu,内存,消耗资源最高的线程的使用情况。
Links:
NMON home page
http://www-941.haw.ibm.com/collaboration/wiki/display/Wikiptype/nmon
NMON_Analyser home page
http://www-941.haw.ibm.com/collaboration/wiki/display/Wikiptype/nmonanalyser
User Forum
http://www.ibm.com/developerworks/forums/dw_forum.jsp?forum=749&cat=56
一.nmon工具介绍
nmon 是一个分析aix和linux性能的免费工具(主要是ibm为自己的aix操作系统开发的,但是也可以用在linux操作系统),而nmon_analyser是nmon的一个工具可以把nmon生成的报告转化成excel报表的形式供查看
nmon 工具可以在一个屏幕上显示所有重要的性能优化信息,并动态地对其进行更新。它并不会消耗大量的 CPU ,通常低于百分之二
下载地址:
http://nmon.sourceforge.net/pmwiki.php?n=Site.Download
http://sourceforge.net/projects/nmon/files/?source=navbar
注意选择和自己机器对应的版本:
linux查看系统版本号:
1.方法1
对于linux系统而已,有成百上千个发行版。对于发行版的版本号查看方法
如以centos为例。输入lsb_release -a即可
该命令适用于所有的linux,包括Redhat、SuSE、Debian等发行版
2.
3.
查看系统位数
同样对于Linux系统而言也有32和64位之分,用上述查看内核方法,输入
uname -a 或 more /proc/version
在内核版本后面会有一个X86_64就是表示64为系统啦
# uname -a x86_64则说明你是64位内核, 跑的是64位的系统. i386, i686说明你是32位的内核, 跑的是32位的系统
查看内核的几种方法:
1. uname -a#显示详细的内核信息,
Linux localhost.localdomain 2.6.18-92.1.6.el5xen #1 SMP Wed Jun 25 12:56:52 EDT 2008 x86_64 x86_64 x86_64 GNU/Linux
2. cat /etc/issue#显示版本类型
Scientific Linux SL release 5.2 (Boron) Kernel \r on an \m
3. cat /proc/version
Linux version 2.6.18-92.1.6.el5xen (brewbuilder@norob.fnal.gov) (gcc version 4.1.2 20071124 (Red Hat 4.1.2-42)) #1 SMP Wed Jun 25 12:56:52 EDT 2008
查看操作系统位数:
1.ls / #如果有lib64或这个目录,那操作系统就是64位的 2.getconfig LONG_BIT 若输出32即为32位系统,64为64位系统
32位的系统中int类型和long类型一般都是4字节,
64位的系统中int类型还是4字节的,但是long已变成了8字节。
inux系统中可 用"getconf WORD_BIT"和"getconf LONG_BIT"获得word和long的位数。 64位系统中应该分别得到32和64。
3. uname -a中若为X86示意为64位系统,i386等位32位系统
二.下载安装
nmon默认下载之后只是一个可执行测的文件,但是下载时根据不同的系统来进行区分的
大家可以根据自己的系统选择相应的版本。
执行命令 more /etc/issue 查看系统版本。
首先将下载的nmon_x86_64_centos6文件上传到linux服务器上
[root@localhost source]#cp nmon_x86_64_centos6 /usr/bin
[root@localhost source]#cd /usr/bin
[root@localhost source]# chmod 777 nmon_x86_64_centos6
[root@localhost source]# ./nmon_x86_64_centos6(切换到nmon_x86_rhel45文件所在的目录)
[root@localhost source]# env
[root@localhost source]# mv nmon_x86_64_centos6 nmon
[root@localhost source]# nmon(此时nmon就是全局命令)
也有可能
监控设置
15分钟=900s
#alias nmon15='nmon -f -s3 -c300 -m /root/qumf/'
nmon工具命令的使用:
#nmon -s 300 -c 288 -f -m /tmp
-s 300:表示每300秒采集一次数据,
-c 288 :表示采集288次,300*288=86400秒,刚好是1天的数据,这样运行一次这个程序就会生成一个一天的数据文件,
-m /tmp: 表示生成的数据文件的路径
-f :表示生成的数据文件名中有时间
也可以让其自动监控,每天一个文件夹,每小时一个文件,每分钟或5分采样一次
参数解释: -s10 每 10 秒采集一次数据。 -c60 采集 60 次,即为采集十分钟的数据。 -f 生成的数据文件名中包含文件创建的时间。 -m 生成的数据文件的存放目录。
nmon -f -s 10 -c 60
-f 表示生成的数据文件名中有时间;
-s 10 表示每 10 秒采集一次数据;
-c 60 表示采集 60 次,10*60=600 秒,
刚好是 10分钟的数据,这样运行一次这个程序就会生成一个采集 10分钟数据的文件。该行命令将在当前目录中创建输出文件,其名称为:<hostname>_date_time.nmon", hostname" 是这台主机的主机名。
更多用法 crontab -e 0 0 * * * /usr/local/nmo -s300 -c288 -f -m /home/nmon/ > /dev/null 2>&1 表示: 300*288=86400 秒,正好是一天的数据。 0 8 * * 1,2,3,4,5 /usr/local/nmon -f -N -m /home/nmon/log -s 30 -c 1200 表示: 周一到周五,从早上08点开始,监控10个小时(到18:00整为止),输出到/home/nmon/log。
范例1:
自动按天采集数据: 在 crontab 中增加一条记录: 0 0 * * * nmon -s300 -c288 -f -m /home/ > /dev/null 2>&1: 300*288=86400 秒,正好是一天的数据。 范例2: A、执行命令:#crontab -e B、在最后一行添加如下命令: 0 8 * * 1,2,3,4,5 /nmon/scriptn/mon_x86_rhel52 -f -N -m /nmon/log -s 30 -c 1200 表示: 周一到周五,从早上08点开始,监控10个小时(到18:00整为止),输出到/nmon/log
三、nmon数据采集
1、数据采集
为了实时监控系统在一段时间内的使用情况并将结果记录下来,我们可以通过运行以下命令实现:
1
#./ nmon -f -t -s30 -c 180
参数说明:
l-f:按标准格式输出文件:<hostname>_YYYYMMDD_HHMM.nmon;
l-t:输出中包括占用率较高的进程;
l-s30:每30秒进行一次数据采集
l-c180:一共采集180次
输入命令回车后,将自动在当前目录生成一个hostname_timeSeries.nmon的文件,nmon输出文件的命名方式是服务器名_日期时间.nmon
特别说明:
该命令启动后,会在nmon所在目录下生成监控文件,并持续写入资源数据,直至360个监控点收集完成——即监控1小时,这些操作均自动完成,无需手工干预,测试人员可以继续完成其他操作。如果想停止该监控,需要通过“#ps–ef|grepnmon”查询进程号,然后杀掉该进程以停止监控。
[root@localhost source]# hostname
linux_test
[root@localhost source]# ./nmon -f -s 10 -c 60
[root@localhost source]# ps -ef | grep nmon
root 17815 1 0 08:22 pts/1 00:00:00 ./nmon -f -s 10 -c 60
root 17888 6977 0 08:22 pts/1 00:00:00 grep nmon
[root@localhost source]# ls linux_test_120724_0822.nmon
linux_test_120724_0822.nmon
当我们执行相关命令后,就在当前目录生成了一个以本主机名linux_test开头,以执行日期为规则,nmon结尾的文件,并且我们通过ps命令会看到相关的nmon进程,这里我们当10分钟过去以后我们会发现相关nmon进程会消失的。
linux_test_120724_0822.nmon 就是我们所生成的数据文件,所有的信息都在linux_test_120724_0822.nmon记录,而且我们通过more命令后发现都是我们看不懂的一些文本,这就需要我们把其转化成我们能看懂的excel格式的文件。首先我们把linux_test_120724_0822.nmon文件导出到我们的windows本地。然后我们从http://www.ibm.com/developerworks/wikis/display/Wikiptype/nmonanalyser
下载nmonanalyser软件到windows本地。打开解压缩文件后,我们会发现2个文件,一个是nmonanalyse的说明word格式的说明稳定,另一个是excel格式的nmonanalyse文件。
我们这里所需要的就是excel格式问文件,我们双击打开。
四.生成图形化结果
下载 nmon analyser (生成性能报告的免费工具):
下载地址:
https://www.ibm.com/developerworks/community/wikis/form/anonymous/api/wiki/61ad9cf2-c6a3-4d2c-b779-61ff0266d32a/page/b7fc61a1-eef9-4756-8028-6e687997f176/attachment/721e9797-b5fc-41d7-9b2f-5bd2aa2c8f7d/media/nmon_analyser_34a.zip
解压之后可以得到一个nmon analyser v34a.xls,
双击打开nmon analyser v34a.xls;
设置excel宏的安全级别调低选中上图中的选项,
打开nmon_analyser中的excel,然后载入nmon数据,保存输出的excel即可。
动态显示:
1、概述
监控,在检查系统问题或优化系统性能工作上是一个不可缺少的部分。通过操作系统监控工具监视操作系统资源的使用情况,间接地反映了各服务器程序的运行情况。根据运行结果分析可以帮助我们快速定位系统问题范围或者性能瓶颈点。
nmon是一种在AIX与各种Linux操作系统上广泛使用的监控与分析工具,相对于其它一些系统资源监控工具来说,nmon所记录的信息是比较全面的,它能在系统运行过程中实时地捕捉系统资源的使用情况,并且能输出结果到文件中,然后通过nmon_analyzer工具产生数据文件与图形化结果。
nmon所记录的数据包含以下一些方面(也是我们在寻找问题过程中所关注的资源点):
● cpu占用率
● 内存使用情况
● 磁盘I/O速度、传输和读写比率
● 文件系统的使用率
● 网络I/O速度、传输和读写比率、错误统计率与传输包的大小
● 消耗资源最多的进程
● 计算机详细信息和资源
● 页面空间和页面I/O速度
● 用户自定义的磁盘组
● 网络文件系统
另外在AIX操作系统上,nmon还能监控到其他的一些信息,如异步I/O等。
2、下载安装nmon
如何获取nmon呢?我们可以在IBM的官方网站上免费下载获取,下载网址为:http://www.ibm.com/developerworks/wikis/display/WikiPtype/nmon。
nmon的安装步骤如下:
1)用root用户登录到系统中;
2)建目录:#mkdir /test;
3)把nmon用ftp上传到/test,或者通过其他介质拷贝到/test目录中;
4)执行授权命令:#chmod +x nmon。
3、nmon数据采集
3.1 数据采集
为了实时监控系统在一段时间内的使用情况并将结果记录下来,我们可以通过运行以下命令实现:
#./ nmon -f -t -s 30 -c 180
n -f:按标准格式输出文件:<hostname>_YYYYMMDD_HHMM.nmon;
n -t:输出中包括占用率较高的进程;
n -s 30:每30秒进行一次数据采集
n -c 180:一共采集180次
输入命令回车后,将自动在当前目录生成一个hostname_timeSeries.nmon的文件,如果hosname为test1,生产的文件为:test1_090308_1313.nmon。
通过sort命令可以将nmon结果文件转换为csv文件:
# sort -A test1_090308_1313.nmon > test1_090308_1313.csv
执行完sort命令后即可在当前目录生产test1_090308_1313.csv文件。
3.2 生成图形化结果
为了分析nmon监控获得的结果,IBM还提供了相应的图形化分析工具nmon_analyser,通过nmon analyser.xls工具可以把监控的结果文件转换成excel文件,方便分析系统的各项资源占用情况。
nmon analyser.xls工具的使用方法如下:
(1)打开nmon analyser.xls工具;
(2)调整excel宏安全性:工具-宏-安全性
(修改安全级别与可靠发行商)
(选择)安全级别:低
(勾上)信任所有安装的加载项和模板
(勾上)信任对于“Visual Baisc项目”的访问
(3)修改完后,确定-关闭nmon analyser.xls,重新打开;
(4)点击Analyse nmon data按钮,加载之前下载的test1_090308_1313.csv文件。
以下是分析结果的截图:
以上就是nmon的简单描述与使用介绍,大家可以根据自己所采集到的结果分析系统的情况。
nmon for Linux - nmon is short for Nigel's performance Monitor for Linux on POWER, x86, x86_64, Mainframe & now ARM (Raspberry Pi)
STOP PRESS: nmon for Linux Hits 500,000 downloads July 2017
This systems administrator, tuner, benchmark tool gives you a huge amount of important performance information in one go. It can output the data in two ways
On screen (console, telnet, VNC, putty or X Windows) using curses for low CPU impact which is updated once every two seconds. You hit single characters on you keyboard to enable/disable the various sorts of data.
You can display the CPU, memory, network, disks (mini graphs or numbers), file systems, NFS, top processes, resources (Linux version & processors) and on Power micro-partition information.
For lots of examples, see the "Screen shots" from the left menu.
As you can see on the left lmon12e now in colour
Save the data to a comma separated file for analysis and longer term data capture.
Use nmonchart (from this website) to generate a Googlechart webpage.
Use this together with nmon Analyser Microsoft Excel spreadsheet, which loads the nmon output file and automatically creates dozens of graphs ready for you to study or write performance reports.
Filter this data, add it to a rrd database (using an excellent freely available utility called rrdtool). This graphs the data to .gif or .png files plus generates the webpage .html file and you can then put the graphs directly on a website automatically on AIX with no need of a Windows based machine.
Directly put the data into a rrd database or other database for your own analysis
Latest version nmon for Linux is 16f Download the precompiled binaries or nmon source code
More details
nmon is a single binary for
each operating system (Red Hat, SUSE, Ubuntu, Fedora, OpenSUSE etc.) and
each platform (Power, Mainframe, arm, x86 or x86_64).
Installing is very easy - just start the right executable.
Or rename the version you need to /usr/bin/nmon and then type: nmon
Why use five or six tools when one free tool can give you everything you need!!
For the pre-compiled versions - click on Download
For the source code & compiling - click on Compiling nmon
On-screen
When using nmon via a terminal session you can see the performance data directly on the screen and updated every second. You should if possible, stretch the terminal window to be longer to see more stats at one time. Here is a sample example from a Raspberry Pi 2 running Ubuntu 15.10 and nmon v16b. I typed "cCUd" to display this data.
For more screen shots take the left-hand side menu option Screen shots or click Screen shots.
Data Analysis
Once you save the nmon data you have a number of options to analyse and graph the statistics:
nmonchart tool/script - see left hand menu
Nigel's nmonchart tools is quick and simple to convert a nmon output file to a webpage file .html that you can open with a browser directly or add to a website to share.
It takes a second or too and generates very nice looking graphs.
It is implemented in Korn shell script so you can add features (please share your updates).
The Clever part is using the Google.com Charting Javascript Library and your browser to do the actual graphing.
This this works on your PC, tablet or even larger mobile phone regardless of operating system.
Click here to find out more nmonchart
nmon Analyser Excel Spread-sheet Download
This is the original tool and been developed over many years by Stephen Atkins
You can request support via the Performance Tools Forum
However, Linux users might not like the idea of using the Microsoft Excel Spreadsheet and automating the creation of graphs can be tricky.
Sample Graphs out of the many (see screen shots for more and larger examples:
CPU Compared to Disk I/O
Disk Read and Write with I/O per second
Hot Disk analysis with Average, Weighted Average and Peak values
Network Read (top half) and Write (bottom half) Transfer Rates
nmon Consolidator Excel Spread-sheet Download
This is a newer tool and can combine nmon output files. It is by Stephen Atkins
Again its Microsoft Excel Spreadsheet
nmon2rrd
Microsoft free tool
This tool uses the excellent rrdtool to generate all the graphs and a website .html file.
Download it from the nmon for AIX Wiki
This allows the automated analysis on many machines and viewing via a Browser.
Now - Open Source
nmon for Linux is a single source code file of 5000 lines and single makefile. This will enable you to compile nmon for your precise Linux version (if you can't find what you want in the binaries) and open a few other possibilities:
Fixing my code - be gentle, please.
Removing magic numbers i.e. constants that can catch us out as machines get larger
Developing for some strange environments like machines with no disks, blades that boot from NFS, internal Linux based engines within disks subsystems, embedded machines.
Who knows we may get nmon for Linux within the Linux Distro's - any one know how to go about that?
Thanks for your support, suggestions, testing and I hope this starts a whole new wave of development and interest.
History
nmon for Linux was an internal project at IBM for many years and was released to open source under GPL on 27th July 2009.
Sourceforge.net is being used to host the project, see http://sourceforge.net/projects/nmon
nmon for AIX does has a similar online look, file format but was always complete different source code.
It is now integrated into AIX topas command from
AIX 5.3 TL09
AIX 6.1 TL02.
nmon for AIX is not open source.
For more information nmon for AIX Wiki
Documentation
nmon of Linux Documentation - Updated 21st Nov 2016
Ha ha ha ha - you are joking right :-)
This page contains the following sections:
Hardware and Linux Supported
Getting Started via YouTube Videos - Including nmon for Linux and nmon for AIX
Getting Started - If you prefer to read the absolute minimum
nmon Command help - nmon for Linux -? and -h command output for the full syntax
nmon Support
Other sources
Hardware and Linux Supported
Platforms = hardware
POWER
x86_64 = AMD64 - 63 bit
Mainframe
x86 = 32 bit dropping off rapidly
ARM Raspberry Pi 2+3
Others . . . include embedded processors running Linux
Linux Distro’s
Ubuntu
Debian
SUSE SLES
OpenSUSE
Red Hat RHEL
Fedora
Centos
Many others . . .
YouTube Videos about nmon for Linux
Many People prefer to watch a YouTube Video to learn - here are the six videos on nmon for both Linux and AIX operating systems. These are all the details you need to know to use nmon well. Note: nmonchart creates a .html file of all the graphs - it is one of many nmon graphing tools.
nmon for Linux
nmon for Linux Starter Pack 20 minutes
nmon for Linux Data Capture 15 minutes
nmonchart to graph your nmon data files 22 minutes
Many nmon users use both Linux and AIX so here are the AIX equivalent videos and many nmon for Linux user use the nmon Analyser (Microsoft Excel spreadsheet)
nmon for AIX
nmon Starter Pack Monitoring Online 14 minutes
nmon Starter Pack for AIX Data Capture 15 minutes
nmon Starter Pack for AIX Analyser 10 minutes
nmon for Linux Getting Started - If you prefer to read the absolute minimum
Below assumes that you are logged on your system, that you have renamed your nmon binary file to just "nmon", that the nmon file has execute permission (chmod ugo+x nmon) and it is in your PATH.
Using nmon for Linux Online
Just start nmon for Linux with: nmon
To stop it, just type: q
To get on screen hints type: h
and h again to remove the hints
Most of the rest are toggled commands i.e. type c to see the CPU stats and type c again to remove CPU stats.
The various stats come out in a set order (you can't control this) starting with CPU then memory and finally top processes at the bottom as there can be many processes this tends to fill up the rest of the window
Note if you make the window larger you can see more lines of output - this works in X Windows, VMC and Putty.
For memory stats type m
For disk graphs type d and you will see a 50 column graph of the read and write busy percentages
For disk numbers type D and if you type D again you see different information eventually typing D will close this section
For top processes there are different modes for the order of displaying the processes and different information, See the top line of the Top Processes section for further details.
Using nmon for Linux in data capture mode
Start by capturing a small sample file. Type: nmon -f -s2 -c 30
The -f means you want the data saved to a file and not displayed on the screen.
The -s 2 means you want to capture data every 2 seconds
The -c 30 means you want thirty data points or snap shots
This means that after a few seconds collecting the configuration nmon for Linux will run for 2 x 30 = 60 seconds and stop. At the end some further configuration data is collected.
As nmon for Linux start up briefly check you system and options and then disconnect from you terminal sessions.
It then runs like a daemon process in the background. The point is that if you log out or get disconnected then nmon will complete the data file capture - this is a good thing.
If you want to be sure nmon is still running you can't use a simple "ps" because it is not associated with your log on session. Use "ps -ef | grep nmon" instead.
It is a common mistake to try to start using nmon for Linux output file before nmon has finished - this results in a either incomplete data which messes up a later tool or if you asked to a longer time between snap shots then there may be no data actually in the file, which confuses all tools trying to analyse the file.
Once nmon for Linux has finished and to build confidence try:
Use: grep ZZZZ yourfile.nmon
This should output the one line for each snapshot and date and time it happened.
Edit the nmon file with vi. You will notice it is a simple text file The start of each line defines the content of the line and then the values are separated with commas. This means the file can be imported in to a spread sheet. If you want to manually import the file, make sure you sort the file first (with the um er "sort" command). This sort means all the lines of a particular type are together. A sort is not required by most of the nmon for Linux analysing tools as they perform the function themselves.
Hint for nmon version 16d
# ./nmon -h
Hint for nmon version 16d
Full Help Info : nmon -h
On-screen Stats: nmon
Data Collection: nmon -f [-s <seconds>] [-c <count>] [-t|-T]
Capacity Plan : nmon -x
Interactive-Mode:
Read the Welcome screen & at any time type: "h" for more help
Type "q" to exit nmon
For Data-Collect-Mode
-f Must be the first option on the line (switches off interactive mode)
Saves data to a CSV Spreadsheet format .nmon file in then local directory
Note: -f sets a defaults -s300 -c288 which you can then modify
Further Data Collection Options:
-s <seconds> time between data snapshots
-c <count> of snapshots before exiting
-t Includes Top Processes stats (-T also collects command arguments)
-x Capacity Planning=15 min snapshots for 1 day. (nmon -ft -s 900 -c 96)
End of Hints
Full Help Information for nmon 16d
For Interactive and Data Collection Mode:
User Defined Disk Groups (DG) - This works in both modes
It is a work around Linux issues, where disks & partitions are mixed up in /proc files
& drive driver developers use bizarre device names, making it trick to separate them.
-g <filename> Use this file to define the groups
- On each line: group-name <disks-list> (space separated list)
- Example line: database sdb sdc sdd sde
- Up to 64 disk groups, 512 disks per line
- Disks names can appear more than one group
-g auto - Will generate a file called "auto" with just disks from "lsblk|grep disk" output
For Interactive use define the groups then type: g or G
For Data Capture defining the groups switches on data collection
Data-Collect-Mode = spreadsheet format (i.e. comma separated values)
Note: Use only one of f, F, R, x, X or z to switch on Data Collection mode
Note: Make it the first argument then use other options to modify the defaults
Note: Don't collect data that you don't want - it just makes the files too large
Note: Too many snapshots = too much data and crashes Analyser and other tools
Note: 500 to 800 snapshots make a good graph on a normal size screen
Recommended normal minimal options: snapshots every 2 minutes all day:
Simple capture: nmon -f -s 120 -c 720
With Top Procs: nmon -fT -s 120 -c 720
Set the directory: nmon -fT -s 120 -c 720 -m /home/nag/nmon
Capture a busy hour: nmon -fT -s 5 -c 720 -m /home/nag/nmon
For Data-Collect-Mode Options
-f spreadsheet output format [note: default -s300 -c288]
output file is <hostname>_YYYYMMDD_HHMM.nmon
-F <filename> same as -f but user supplied filename
Not recommended as the default file name is perfect
The other options in alphabetical order:
-a Include Accelerator GPU stats
-b Online only: for black and white mode (switch off colour)
-c <number> The number of snapshots before nmon stops
-d <disks> To set the maximum number of disks [default 256]
Ignores disks if the systems has 100's of disk or the config is odd!
-D Use with -g to add the Disk Wait/Service Time & in-flight stats
-f and -F See above
-g <filename> User Defined Disk Groups (see above) - Data Capture: Generates BBBG & DG lines
-g auto See above but makes the file "auto" for you of just the disks like sda etc.
-h This help output
-I <percent> Set the ignore process & disks busy threshold (default 0.1%)
Don't save or show proc/disk using less than this percent
-l <dpl> Disks per line in data capture to avoid spreadsheet width issues. Default 150. EMC=64.
-m <directory> nmon changes to this directory before saving to file
Useful when starting nmon via cron
-M Adds MHz stats for each CPU thread. Some POWER8 model CPU cores can be different frequencies
-N Include NFS Network File System for V2, V3 and V4
-p nmon outputs the PID when it starts. Useful in scripts to capture the PID for a later safe stop.
-r <runname> Use in a benchmark to record the run details for later analysis [default hostname]
-R Old rrdtool format used by some - may be removed in the future. If you use this email Nigel
-s <seconds> Time between snap shots - with "-c count" decides duration of the data capture
-t Include Top Processes in the output
-T As -t plus it saves command line arguments in UARG section
-U Include the Linux 10 CPU utilisation stats (CPUUTIL lines in the file)
-V Print nmon version & exit immediately
To manually load nmon files into a spreadsheet:
sort -A *nmon >stats.csv
Transfer the stats.csv file to your PC
Start spreadsheet & then Open with type=comma-separated-value ASCII file
This puts every datum in a different cell
Now select the data of one type (same 1st column) and graph it
The nmon Analyser & other tools do not need the file sorted.
Capacity Planning mode - use cron to run each day
-x Sensible spreadsheet output for one day
Every 15 mins for 1 day ( i.e. -ft -s 900 -c 96)
-X Sensible spreadsheet output for busy hour
Every 30 secs for 1 hour ( i.e. -ft -s 30 -c 120)
-z Like -x but the output saved in /var/perf/tmp assuming root user
Interactive Mode Keys in Alphabetical Order
Start nmon then type the letters below to switch on & off particular stats
The stats are always in the same order on-screen
To see more stats: make the font smaller or use two windows
Key --- Toggles on off to control what is displayed ---
b = Black and white mode (or use -b command line option)
c = CPU Utilisation stats with bar graphs (CPU core threads)
C = CPU Utilisation as above but concise wide view (up to 192 CPUs)
d = Disk I/O Busy% & Graphs of Read and Write KB/s
D = Disk I/O Numbers including Transfers, Average Block Size & Peaks (type: 0 to reset)
g = User Defined Disk Groups (assumes -g <file> when starting nmon)
G = Change Disk stats (d) to just disks (assumes -g auto when starting nmon)
h = This help information
j = File Systems including Journal File Systems
k = Kernel stats Run Queue, context-switch, fork, Load Average & Uptime
l = Long term Total CPU (over 75 snapshots) via bar graphs
L = Large and =Huge memory page stats
m = Memory & Swap stats
M = MHz for machines with variable frequency 1st=Threads 2nd=Cores 3=Graphs
n = Network stats & errors (if no errors it disappears)
N = NFS - Network File System
1st NFS V2 & V3, 2nd=NFS4-Client & 3rd=NFS4-Server
o = Disk I/O Map (one character per disk pixels showing how busy it is)
Particularly good if you have 100's of disks
p = PowerVM LPAR Stats from /proc/ppc64/lparcfg
q = Quit
r = Resources: Machine type, name, cache details & OS version & Distro + LPAR
t = Top Processes: select the data & order 1=Basic, 3=Perf 4=Size 5=I/O=root only
u = Top Process with command line details
U = CPU utilisation stats - all 10 Linux stats:
user, user_nice, system, idle, iowait, irq, softirq, steal, guest, guest_nice
v = Experimental Verbose mode - tries to make recommendations
V = Virtual Memory stats
Key --- Other Interactive Controls ---
+ = Double the screen refresh time
- = Halves the screen refresh time
0 = Reset peak counts to zero (peak highlight with ">")
1 = Top Processes mode 1 Nice, Priority, Status
3 = Top Processes mode 3 CPU, Memory, Faults
4 = Top Processes mode 4 as 3 but order by memory
5 = Top Processes mode 5 as 3 but order by I/O (if root user)
6 = Highlights 60% row on Long Term CPU view
7 = Highlights 70% row on Long Term CPU view
8 = Highlights 80% row on Long Term CPU view
9 = Highlights 90% row on Long Term CPU view
. = Minimum mode i.e. only busy disks and processes shown
space = Refresh screen now
Interactive Start-up Control
If you find you always type the same toggles every time you start
then place them in the NMON shell variable. For example:
export NMON=cmdrtn
Other items for Interactive and Data Collection mode:
a) To limit the processes nmon lists (online and to a file)
either set NMONCMD0 to NMONCMD63 to the program names
or use -C cmd:cmd:cmd etc. example: -C ksh:vi:syncd
Other items for Data Collection mode:
b) To you want to stop nmon use: kill -USR2 <nmon-pid>
c) Use -p and nmon outputs the background process pid
d) If you want to pipe nmon output to other commands use a FIFO:
mkfifo /tmp/mypipe
nmon -F /tmp/mypipe &
tail -f /tmp/mypipe
e) If nmon fails please report it with:
1) nmon version like: 16d
2) the output of: cd /proc; cat cpuinfo meminfo partitions stat vmstat
3) some clue of what you were doing
4) I may ask you to run the debug version or collect data files
f) If box & line characters are letters then check: terminal emulator & $TERM
g) External Data Collectors - nmon will execute a command or script at each snapshot time
They must output to a different file which is merge afterwards with the nmon output
Set the following shell variables:
NMON_START = script to generate CVS Header test line explaining the columns
Generate: TabName,DataDescription,Column_name_and_units,Column_name_and_units ...
NMON_SNAP = script for each snapshots data, the parameter is the T0000 snapshot number
Generate: TabName,T00NN,Data,Data,Data ...
NMON_END = script to clean up or finalise the data
NMON_ONE_IN = call NMON_START less often (if it is heavy in CPU terms)
Once capture done: cat nmon-file data-file >merged-file ; ready for Analyser or other tools
The nmon Analyser will automatically do its best to graph the data on a new Tab sheet
Developer: Nigel Griffiths See http://nmon.sourceforge.net Feedback welcome - On the current release only
No warranty given or implied. Copyright GPLv3
nmon for Linux Support
If you:
need help running nmon or understanding the data saved
have a suggestion for improvements
have bug fixes or want to report errors
want to extend nmon for Linux on to other platforms
want to include nmon on your distro (not a problem, I would just like to know)
getting in touch at the nmon for Linux - Help Forum
Alternatively use the Performance Tools Forum
NMON_Analyser User Guide for V4.6
Preface
NMON_Analyser is designed to complement NMON (Nigel’s Monitor) in analysing and reporting performance problems; it produces graphs for virtually all sections of output created using the “spreadsheet output” mode of NMON as well as doing some additional analyses for ESS, EMC and FAStT subsystems. It will also work with files produced by topasout and with other tools that produce data in “NMON” format. It is written in VBA for Excel and will work with Excel 2007 or later. It may work also on Excel 2003 with the required Microsoft updates to support .xlsx files https://support.microsoft.com/kb/924074?wa=wsignin1.0
NMON was originally written by Nigel Griffiths (nag@uk.ibm.com) and is now (since AIX 5.3 TL09 and AIX 6.1 TL02) part of topas. NMON_Analyser was originally written by Stephen Atkins with contributions from many people – including Ralf Schmidt-Dannert and Markus Fehling, both of IBM. Currently nmon Analyzer is maintained by Ron McCargar (mccargar@us.ibm.com.)
Support for NMON_Analyser is provided on a best efforts basis. Please direct questions to the User Forum (see below) rather than contact the author direct.
Links:
NMON_Analyser home page https://www.ibm.com/developerworks/community/wikis/home?lang=en#!/wiki/Power%20Systems/page/nmon_analyser
User Forum https://www.ibm.com/developerworks/community/forums/html/forum?id=11111111-0000-0000-0000-000000000749&ps=25
Collecting data using NMON
Please make sure you have the latest versions of both NMON and NMON_Analyser before starting a new engagement. If you want automatic notification of a new release of the Analyser send a note to steve_atkins@uk.ibm.com and I’ll add you to my distribution list. Nigel maintains a similar list for NMON.
You will need to have root privileges in order to get a complete set of data on the BBBP sheet. In order to collect data for the DISKBUSY sheets you need to make sure that iostat data collection is enabled:
chdev -l sys0 -a iostat=true
For spreadsheet output mode (comma separated values) use the following flags when invoking nmon:
-f spreadsheet output format [note: default -s300 -c288]
Output file is <hostname>_YYYYMMDD_HHMM.nmon
-F <filename> same as -f but user supplied filename
-c <number> number of snapshots
-d requests disk service and wait times (DISKSERV and DISKWAIT)
-i <percent> Ignore processes using less than this amount of CPU when generating TOP section – useful for reducing data volumes
-g <filename> file containing disk group definitions
-l <dpl> number of hdisks per sheet - defaults to 150, maximum 250. See notes
-m <dir> NMON changes to this directory before saving the file
-r <runname> goes into spreadsheet file [default hostname]
-s <seconds> interval between snap shots
-x capacity planning (15 mins for 1 day = -fdt -s900 -c96)
-t include top processes in the output
-T as –t plus saves command line arguments in UARG section
-A include data for async I/O (PROCAIO) sections
-D prevents DISK sections being produced (useful when Disk Groups are being used because there are too many hdisks to process)
-E stops ESS sections being produced (necessary when Disk Groups are being used because there are too many vpaths to process)
-J prevents JFS sections being produced (prevents Excel errors when you have more than 255 filesystems)
-L includes LARGEPAGE section
-N include NFS sections
-S include WLM sections with subclasses
-W include WLM sections without subclasses
-Y include SUMMARY section (very efficient alternative to –t if PID level data is not required)
example: nmon_aix51 -F asterix.nmon -r Test1 -s6 -c12
Notes:
1. The –f (or –F) flag must appear first.
2. The value of the -l flag controls the number of hdisks per sheet on the DISK sheets and per line on the BBBD sheet. There are two factors to consider when choosing this value. Excel has a limit of 256 columns per sheet; however, both NMON and NMON_Analyser use some columns, so the upper limit is really 250. The second factor is that Excel VBA has an upper limit of 2048 bytes for input line length. This particularly affects users of EMC systems that use long hdisk names (e.g. hdiskpower123). The default of 150 is safe for such systems. Other users may set the value to 250 in order to reduce the number of output sheets.
3. Consider the value of the -s flag very carefully. The shorter the interval between snapshots, the more variable the values for each resource will be. If you use an interval of 1 second, don’t be surprised to see many of your disks hitting 100% busy for short periods. For normal monitoring, 10-minute intervals (-c 600) provide a good balance.
4. The graphs produced by NMON_Analyser look best when the number of snapshots (specified by the -c flag) is 300 or less.
5. The TOP section (produced by specifying the -t flag) can generate large amounts of output and the size of the output can grow exponentially if a large value is specified for the -c flag. If you want the TOP section then specify no more than 250 snapshots - ideally less.
Collecting data using topas (xmwlm)
You need AIX V5.3 TL5 Service pack 4 with APAR IY87993 or later. Note that only the output using the –a flag can be analysed. In particular, cross-partition statistics cannot be analysed; if you wish to get a report for the entire machine, collect data from each LPAR separately and then use NMON_Consolidator to merge the data. Commands like the following are required to collect the data.
topasout -a /etc/perf/daily/xmwlm.yymmdd
:
cp /etc/perf/daily/xmwlm.yymmdd_01 hostname.ddmmyy.topasout.csv
Using NMON_Analyser
· FTP the input file to your PC – ideally using the ASCI or TEXT options to make sure that lines are terminated with the CRLF characters required by Windows applications.
· Open the NMON_Analyser spreadsheet and specify the options you want on the “Analyser” and “Settings” sheets (see below). Save the spreadsheet if you want to make these options your personal defaults.
? Click on the "Analyse nmon data" button and find/select the .nmon file(s) to be processed. You may select several files in the same directory. If you wish to process several files in different directories you may wish to consider using the “FILELIST” option described below.
? You may see the message SORT command failed for “filename” if the file has >65K lines and the filename (or directory name) contains blanks or special characters. Either rename the file/directory or just pre-sort the file before using the Analyser.
Analyser options
GRAPHS The first option is either ALL or LIST. If the value is LIST then only those sheets which appear in the LIST on the Settings sheet will have graphs drawn for them. This option is particularly useful if the graphs are to be printed/published or to reduce the amount of memory/fonts/disk space required when analysing files from large systems.
The second is either CHARTS, PICTURES, PRINT or WEB. The meaning of these are as follows:
· CHARTS produce Excel charts in-place on the selected sheets
· PICTURES graphs will be produced on a separate “Charts” sheets as pictures. Selecting this option can reduce the size of the output file by up to 90%.
· PRINT implies PICTURES. Pictures will be printed to the designated printer (see “Printing Options” below)
· WEB implies PICTURES. Automated web publishing (see “Web Publishing” below)
INTERVALS specifies the first and last time interval to be processed. Intervals outside this range will be discarded after parsing. Note that these are numbers between 1-999999 and are not time values. Setting a value of 2 for the first interval is useful in discarding the very large numbers that often appear at the start of an NMON collection run with AIX. If you have used a splitter program on the input file, or if you are analysing data from a LINUX system, then you should leave this as 1.
TIMES specifies the first and last time/date to be processed. Samples outside this range will be discarded after parsing. They can be specified in any form recognised by Excel as time/date values; e.g.
14:00:10 16:15:30
4-Aug-12 6-Aug-12
18:00 28/6/12 04:00
Notes:
· Specifying a date without a time is the same as specifying a time of 00:00.
· If the second time is less than the first then Analyser will assume the second time is in the next calendar day
· If there are no qualifying intervals in the file a message will be issued:
“Invalid values for FIRST/LAST - values reset to 1/999999”
and the entire file will be processed.
MERGE specifying YES here results in NMON_Analyser merging all of the input files to form a single file. The input files must be unsorted. By default the Analyser will delete the TOP and UARG sections during the merge process; specify TOP to prevent this from happening but be aware that processing time will be increased and that if the TOP section exceeds the maximum number of lines per sheet (depending on the version of Excel) then data will be lost. Specify KEEP to stop the merged file from being deleted at the end of the run. Specify ONLY if you simply want to create a merged file for future analysis.
PIVOT specifying YES here results in NMON_Analyser creating a Pivot Chart from the specified sheet after all other processing (including printing/publishing the other charts) has completed. See additional parameters on the “Settings” sheet.
ESS specifying NO here results in NMON_Analyser bypassing the additional analysis performed for ESS subsystems. This will result in faster analysis and can allow larger files to be analysed successfully when “out of memory” errors occur.
FILELIST the name of a control file containing a list of nmon output files to be processed by the Analyser. Leave this field blank for normal operation. The name must be fully qualified (e.g. c:\nmon\testcases\filenames.txt). The names specified in the text file must contain full path information. Wildcard characters may be included in the filenames so long as they conform to Windows standards. For example:
c:\nmon\testcases\*.nmon
NB: if you save the spreadsheet with a value in this field, the Analyser will automatically begin execution the next time you open it. This is defined as “batch mode” (see Appendix). You can stop the execution by pressing Ctrl+Break or by deleting/renaming the Control File.
Batch Processing Options
The following fields can be found on the “Settings” sheet.
REPROC Change this to NO if you want to bypass processing of input files which may have been processed in a previous run. This is useful if you make use of wildcards in the batch control file. Note that the REPROC option only takes effect when you have specified more than one input file.
OUTDIR the name of an existing directory in which output files will be saved by default. This is primarily intended for batch operation (see FILELIST above) but also works to set the default directory for interactive sessions. If the directory does not exist (or OUTDIR is blank) then output files are saved back to the same directory as the corresponding input files.
Example: C:\NMON\Analyser\Output\
Formatting Options
The following fields can be found on the “Settings” sheet.
BBBFont Enter the name of a fixed pitch font to be used for formatting the BBBC and BBBP sheets. Courier provides acceptable results.
GWIDTH Change the values in this row to make the generated graphs bigger or smaller. The default value of 0 means that the Analyser will dynamically size the graphs according to your screen size, font settings or page size. Be careful not to set a value larger than your page width when printing.
GHEIGHT Change the values in this row to make the generated graphs bigger or smaller. If you specify a value here you must also specify a value for GWIDTH.
LIST A comma-separated list a sheets for which the Analyser is to draw graphs. Only used if the GRAPHS option is set to LIST. The list can contain any valid wildcard characters recognised by Excel, e.g. “EMC*”
Note: graphs are always drawn for SYS_SUMM, CPU_SUMM and DISK_SUMM
NOLIST The default is KEEP. If you change this to DELETE then all sheets which do not appear in LIST will be deleted after analysis. This can dramatically reduce the size of files that are to be kept for long periods.
CPUmax Specifies the maximum number of CPUnnn, PCPUnnn and SCPUnnn sheets that will be generated. The default value of 0 will choose all sheets for an LPAR using dedicated processors and number equal to the SMT mode for an LPAR using shared processors.
REORDER specifying YES here results in NMON_Analyser reordering the sheets to improve navigation to more relevant information.
TOPDISKS the maximum number of hdisks/vpaths to include on disk graphs. A value of 0 produces graphs containing all the hdisks on a sheet (up to 250). Graphs containing more than 50 hdisks will be automatically scaled to fit and may therefore exceed the size of the screen.
xToD Format to be used for timestamps on Time of Day graphs. Anything acceptable to Excel as a Number Format Code may be entered. Default is hh:mm. Note that the date is also available within the timestamp and you may therefore use something like dd-mmm-yy hh:mm if, for example, you have merged multiple NMON files together. If you use something other than the default string you may need to increase the value of GHEIGHT – experiment with different values if you don’t see what you expect.
SORTDEFAULT This setting indicates if the 1st graph on 'default' sheets (ones not handled else where by the Analyzer) are sorted. Note: If Yes, this will also reorder the columns.
Pivot Chart
These parameters are used to construct a pivot chart. The required parameters are: Sheetname, PageField, RowField, ColumnField, DataField and xlFunction (can be COUNT, SUM, MIN, AVG, MAX). This is primarily useful for the TOP and SUMMARY sheets but might prove useful for other, possibly user-supplied, data sheets.
Printing Options
The following fields can be found on the “Settings” sheet. Note - these only take effect if you select PRINT for the OUTPUT option on the Analyser sheet.
LSCAPE Change to YES if you want the Analyser to set the page orientation to Landscape. By default the Analyser will fit one chart per page when printing landscape.
COPIES Set to the number of copies to be printed.
PRINTER The name of the printer. Specifying a value of PREVIEW will cause the Analyser to invoke the Excel print preview function - useful for testing. You may also specify DEFAULT to print to the system default printer or the name of network printer.
The Analyser adds page headers and footers.
Web Publishing Options
The following fields can be found on the “Settings” sheet.
PNG Change to NO if your browser can’t handle the PNG graphics format. Graphics will be generated as GIF files.
SUBDIR If this is YES then all supporting files, such as background textures and graphics, are organized in a separate folder. If this is NO then supporting files are saved in the same folder as the Web page.
WEBDIR the name of an existing directory in which HTML files will be saved by default. If the directory does not exist (or OUTDIR is blank) then output files are saved back to the same directory as the corresponding input file.
Example: C:\NMON\Analyser\HTML\
Interpreting the output sections
Notes on the “Weighted Average” as used in the Analyser
Several graphs produced by the Analyser show average, weighted average and maximum values. Although everyone understands averages and maximums, the concept of a weighted average is a little more difficult to grasp.
One of the problems we are faced with in analysing sample data is that resources on the target system may be idle for long periods during the collection. For example, the NMON data collection may be started some time before the system reaches peak utilisation and may not be stopped until the workload being monitored has long since finished. Although this does not affect the maximums it can severely affect the accuracy of the averages.
The idea of a weighted average is to apply a weighting factor to each snapshot to indicate how relevant that snapshot is to the average. In NMON_Analyser, we use the value of the measurement itself as the weighting factor. In effect, this produces a figure that shows how busy a resource is when it is active. For example: a database log disk is only active during the middle part of a benchmark. We record the following figures for %tm_act (DISKBUSY):
Snapshot
%tm_act
1
0
2
0
3
0
4
0
5
0
6
6.1
7
6.3
8
6.5
9
9.1
10
5.9
11
0
12
0
13
0
14
0
15
0
The average for this set of data is 2.3 and the weighted average is 7.0. The weighted average gives a better picture of how busy the disk is while logging is taking place. NMON_Analyser uses the weighted average as a sort key when sorting the contents of disk sheets.
Note that, occasionally, NMON generates very large numbers for the first interval and this heavily skews the weighted average values. If you see this problem occurring then change the value for the FIRST parameter to 2 in order to exclude the first interval completely. This is only a problem for AIX.
SYS_SUMM
This section is entirely generated by the Analyser and contains a useful summary of data taken from other sheets. Note the the avg/max values for User%, Sys%, Wait% and Idle% are independent and will not add up to 100%. The CPU% column shows User% + Sys % for each line.
For non-partitioned or dedicated CPU partitions the graph shows the total CPU Utilisation (%usr + %sys) together with the Disk I/O rate (taken from the DISKXFER sheet) by time of day. For micro-partitions the graph shows the number of physical CPUs being used instead of CPU%.
The value “Max:Avg” is simply the maximum value divided by the average. If monitored over a long period of time the value for CPU% can be useful in spotting a system reaching saturation level (the ratio will steadily decrease). If you have historical data then the value can also be useful in determining how much latent demand is present in a system running at saturation level.
AAA
The AAA section is generated by NMON at the start of the data collection and contains information about the system and NMON itself – contents vary by release, following is for 12e
AIX this is the release / maintenance level of AIX being used on the target system as reported by the lslpp command.
build the particular build of nmon used to collect this data
command the command line used to invoke NMON and the date when it finished.
cpus the number of CPUs in the system and the number active at the start of data collection.
date date at the start of the collection.
disks_per_line the setting of the -l flag on the NMON command line or the default value.
hardware the processor technology used in the target system.
host the hostname of the target system.
Interval the time (in seconds) between snapshots.
kernel information from the kernel - useful in identifying the type of kernel (32-bit or 64-bit) and whether this is an LPAR.
LPARNumberName the LPAR number followed by the name
MachineType machine type and model of the system
progname the name of the NMON executable.
runname taken from the NMON command line if specified using the -r parameter, else defaults to hostname.
SerialNumber the machine serial number
snapshots the number of snapshots - this is used by the Analyser. The Analyser will modify this value to match the number of snapshots actually found in the input file.
steal this value will be a 1 if running on Linux and Steal% CPU is provided in the CPUnnn and CPU_ALL data.
subversion detailed information about the nmon version used to collect this data – including the date and time it was created.
time time as shown by the system clock at the start of the collection. Also see date value.
timestampsize the number of characters used for timestamps in each record. The default is 5.
TL the Technology Level of the AIX release
user the name of the user executing the NMON command.
version the version of NMON used to collect this data.
VIOS the release/maintenance level if this is a VIOS LPAR.
analyser the version of NMON_Analyser used to generate the output file together with the elapsed time (in seconds) for processing this file.
environment the version of Excel you are using.
parms the values of most of the user options specified on the “Analyser” sheet.
settings the values of most of the user options specified on the “Settings” sheet.
elapsed the execution time of the Analyser. I use this for tuning.
NodeName the name of the LPAR’s node name
NMON_Analyser deletes the NOTES lines generated by NMON.
BBBB
The BBBB sheet lists all of the disks listed in the ODM together with the capacity (in Gbytes) and the adapter type (SCSI/SSA/Fibre) as reported by lsdev. Note that some fibre-attached devices do not report their capacity to AIX.
NMON_Analyser deletes the column containing the sort key generated by NMON on all BBB sheets.
BBBC
The BBBC sheet shows the output from the lspv command for all local disks at the start of the data collection. The Analyser highlights the hdisk name using a bold font and sets the sheet to use the fixed-pitch font specified on the NLS sheet (default Courier) in order to improve readability.
BBBD
The BBBD sheet shows a list of all I/O adapters listed in the ODM together with the hdisks addressed through that adapter.
BBBE
The BBBE sheet contains data extracted from the lsdev command and shows the mapping between vpaths and hdisks. NMON_Analyser uses this information to construct the ESSBUSY, ESSRSIZE and ESSWSIZE sheets.
BBBG
The BBBG sheet contains details of the NMON disk group mappings.
BBBL
The BBBL sheet is only produced if the operating system is running in a partitions and contains details of the configuration of the LPAR at the start of the collection run.
BBBN
The BBBN describes each network adapter in the system and shows the name, speed and MTU size.
BBBP
The BBBP sheet contains the un-interpreted output from the emstat and lsattr commands. Note that to get output from these commands requires NMON to be running with root privileges.
The Analyser sets the sheet to use the fixed-pitch font specified on the NLS sheet (default Courier) in order to improve readability.
BBBR
This sheet records dynamic LPAR reconfiguration events during the collection run.
BBBV
This sheet lists all of the volume groups present at the start of the collection run.
CPUnnn
These sheets show %usr, %sys, %wait and %idle by time of day for each logical processor. Note that for micropartitions the Idle% and Wait% figures will include times when the physical processor was ceded to the shared pool.
NMON_Analyser generates a graph and a column headed “CPU%” containing the sum of %usr and %sys for use on the CPU_SUMM sheet. The Analyser also adds blank intervals for CPUs that are varied online during the collection interval so that the graphs cover the entire collection period.
If REORDER is set to YES on the Control sheet the Analyser will move all CPUnn sheets to the end of the file.
CPU_ALL
This sheet shows the average utilisation for all physical threads by time of day. Note that for micro-partitions CPU% is a measure of utilisation vs the entitlement but is adjusted by libperfstat so that it never exceeds 100%; this makes the numbers virtually useless for analysis of uncapped partitions and you may choose to look at the charts on the LPAR sheet instead. Note also that micro-partitions generally record very little Idle% or Wait% because they will normally cede their timeslice to other LPARs rather than waste CPU time waiting for work. If the CPUmax value is lower than the number of physical threads in use then the graph title will show the number of threads excluded.
The second graph shows the number of active CPUs by time of day and is useful in determining whether CPUs have been varied on/off during the collection period. If the system has SMT enabled then the Analyser shows logical CPUs rather than physical CPUs and the legend reports “SMT=ON”.
CPU_SUMM
The Analyser generates this sheet from data on the CPUnnn sheets. It gives a breakdown of CPU Utilisation by thread (logical processor) and by core over the collection period. The chart can be very useful in identifying situations in which the system is thread-starved (i.e. too few threads to fully utilise the logical processors) or where the workload is dominated by a small number of single-threaded processes.
Note that if CPUs have been dynamically reconfigured during the collection period, these figures reflect only those intervals when the CPU was varied on.
General notes for DISK, ESS, EMC, FASt and DG sheets
The DISK sheets record device statistics for each hdisk in the system. If there are more than <dpl> hdisks in the system (see "Collecting data using NMON" above) NMON generates multiple output sections. DISKBUSY will therefore contain device busy statistics for the first group of hdisks, DISKBUSY1 for the next, DISKBUSY2 for the next and so on.
The Analyser will normally sort the contents of the sheet in ascending sequence using the weighted average values as a sort key. However, if a storage subsystem is detected then sorting of the DISK sheets is disabled and the ESS/EMC/FASt/DG sheet contents are sorted instead.
If the number of hdisks (or vpaths) on the sheet exceeds the value specified for TOPDISKS (see “Analyser options” above), the graph will only show information for the specified number of disks and a warning will appear in the graph title.
If REORDER is set to YES on the Control sheet the Analyser will move all but the DISKBUSY, DISK_SUMM and DISKSERV sheets to the end of the file when a storage subsystem or Disk Group is detected. The rationale behind this being that the ESS/EMC/FASt/DG sheets contain the most useful data and that the DISK sheets merely replicate it. However, the DISKBUSY sheet is useful for checking the activity on system disks (normally local) and the DISK_SUMM sheet gives total data rates for the system (local + subsystem disks).
Note that NMON and NMON_Analyser can only handle a maximum of 250 vpaths in a system. If you have more than this then you need to use the Disk Groups feature of NMON to select the vpaths that are of primary interest.
EMC/PowerPath subsystems
NMON_Analyser detects the presence of an EMC/PowerPath subsystem by scanning the input file for the string “hdiskpower” before starting the analysis. EMC PowerPath creates devices called “hdiskpowern” which each map to multiple hdisks. They are therefore comparable to the vpaths generated by ESS/SDD. However, unlike vpaths, hdiskpower devices appear to AIX (and, therefore NMON) as real disks and NMON therefore records their activity on the DISK sheets.
NMON_Analyser removes all hdiskpower entries from DISK sheets and moves them to new sheets beginning with the letters EMC. For example, hdiskpower entries found on DISKBUSY1 are simply moved to a new sheet called EMCBUSY1. If a DISK sheet contains only hdiskpower devices, that sheet is simply renamed.
All device statistics reported by the Analyser (e.g. System I/O rates) are correct and as NMON excludes hdiskpower activity from the IOADAPT statistics these figures are also correct.
FAStT subsystems
NMON_Analyser detects the presence of a FAStT subsystem by scanning the input file for the string “dac” before starting the analysis. They are handled in the same way as EMC/PowerPath subsystems except that the dac devices are moved to sheets with names beginning "FASt".
Note that the Analyser is not able to correctly handle systems having both EMC and FASt subsystems.
DGBUSY
This sheet records the average value of device busy for each hdisk in the NMON Disk Group.
DGREAD
This sheet records the average data rate (Kbytes/sec) for read operations to each NMON Disk Group.
DGSIZE
This sheet records the average data transfer size (block size), in Kbytes, for read/write operations to each NMON Disk Group.
DGWRITE
This sheet records the average data rate (Kbytes/sec) for write operations to each NMON Disk Group.
DGXFER
This sheet records the total I/O operations per second to each NMON Disk Group.
DISKBSIZE
These sheets record the average data transfer size (block size), in Kbytes, for read/write operations on each hdisk in the system. If this number is not very close to the stripe size for the device there may be a problem that could be solved by increasing the value of numclust.
DISKBUSY
These sheets record device busy for each hdisk in the system. This is the same as the %tm_act value recorded by iostat. Note that if this sheet contains all zero values then it means you forgot to enable iostat collection before starting nmon:
chdev -l sys0 -a iostat=true
DISKREAD
These sheets record the data rate (Kbytes/sec) for read operations on each hdisk in the system.
DISKSERV
These sheets record the service times (in milliseconds) for read/write transfers to each hdisk in the system.
DISKWAIT
These sheets record the queue times (in milliseconds) for read/write transfers to each hdisk in the system.
DISKWRITE
These sheets record the data rate (Kbytes/sec) for write operations on each hdisk in the system.
DISKXFER
These sheets record the I/O operations per second for each hdisk in the system. This is the same as the tps value recorded by iostat.
DISK_SUMM
The Analyser creates this sheet. It shows the total data rates (reads and writes) in Kbytes/sec plus total I/O rates for all hdisks in the system. The figures on this sheet are accurate for all systems including ESS, EMC, FASt and HDS configurations.
These data are displayed on the chart; the IO/sec data are also graphically displayed on the AAA sheet.
DONATE
This sheet records physical processor usage and donation to the shared pool. Only present for dedicated LPARs running on POWER6 systems.
EMCBSIZE/FAStBSIZE
This sheet records the average data transfer size (blocksize), in Kbytes, for read/write operations to each esoteric device in a system using EMC/PowerPath or FAStT.
EMCBUSY/FAStBUSY
These sheets record device busy for each esoteric device in a system using EMC/PowerPath or FAStT.
EMCREAD/FAStREAD
These sheets record the data rate (Kbytes/sec) for read operations to each esoteric device in a system using EMC/PowerPath or FAStT.
EMCWRITE/FAStWRITE
This sheet records the data rate (Kbytes/sec) for write operations to each esoteric device in a system using EMC/PowerPath or FAStT.
EMCXFER/FAStXFER
These sheets record the I/O operations per second to each esoteric device in a system using EMC/PowerPath or FAStT.
EMCSERV/FAStSERV
The Analyser creates this sheet. It shows estimated services times (not response times) for each esoteric device over the collection interval. The service time is derived from the device busy and the transfer rate taken from the corresponding BUSY and XFER sheets. Intervals where the transfer rate is below SVCXLIM are ignored in order to improve the accuracy of the estimate.
ERROR
This sheet shows all errors reported by nmon during the collection run. FIRST/LAST intervals are ignored for this sheet. Timestamps are not converted to time values.
ESSBSIZE
This sheet is only present if ESS is set to YES and records the average data transfer size (blocksize), in Kbytes, for read/write operations on each vpath in the system. The data on this sheet are calculated by NMON_Analyser as the average of the DISKBSIZE values for component hdisks as recorded on the BBBE sheet.
ESSBUSY
This sheet is only present if ESS is set to YES and records device busy for each vpath in a system using ESS. The data on this sheet are calculated by NMON_Analyser as the average of the DISKBUSY values for component hdisks as recorded on the BBBE sheet.
ESSREAD
This sheet records the data rate (Kbytes/sec) for read operations on each vpath in the system. This information is provided by NMON.
ESSWRITE
This sheet records the data rate (Kbytes/sec) for write operations on each vpath in the system. This information is provided by NMON.
ESSXFER
These sheets record the I/O operations per second for each vpath in the system. This information is provided by NMON.
FCREAD
This sheet records the data rate (MBytes/sec) for read operations on each Fibre Channel adapter in the system.
FCWRITE
This sheet records the data rate (MBytes/sec) for write operations on each Fibre Channel adapter in the system.
FCXFERIN
This sheet records the read operations per second for each Fibre Channel adapter in the system.
FCXFEROUT
This sheet records the write operations per second for each Fibre Channel adapter in the system.
FILE
This sheet contains a subset of the fields reported by NMON on the Kernel Internal Statistics panel. These are the same values as reported by the sar command.
All fields are rates/sec.
iget translations of i-node numbers to pointers to the i-node structure of a file or device. This is reported as iget/s by the sar -a command. Calls to iget occur when a call to to namei has failed to find a pointer in the i-node cache. This figure should therefore be as close to 0 as possible.
namei calls to the directory search routine that finds the address of a v-node given a path name. This is reported as lookuppn/s by the sar -a command.
dirblk number of 512-byte blocks read by the directory search routine to locate a directory entry for a specific file. This is reported as dirblk/s by the sar -a command.
readch characters transferred by read system call. This is reported as rchar/s by the sar -c command
writech characters transferred by write system call. This is reported as wchar/s by the sar -c command.
ttyrawch tty input queue characters. This is reported as rawch/s by the sar -y command.
ttycanch tty canonical input queue characters. This field is always 0 (zero) for AIX Version 4 and later versions.
ttyoutch tty output queue characters. This is reported as outch/s by the sar -y command
NMON_Analyser produces two graphs - one showing rates/sec for readch and writech by time of day and one showing rates/sec for iget, namei and dirblk.
FRCA
This sheet is only generated if FRCA is loaded on the target system. NMON_Analyser produces a graph showing the cache hit ratio (as a percentage). If FRCA is not loaded, NMON generates no data and the Analyser consigns the redundant header record to the StrayLines sheet.
IOADAPT
For each I/O adapter listed on the BBBC sheet, contains the data rates for both read and write operations (Kbytes/sec) and total number of I/O operations performed. On AIX 5.1 and later, this information is reported by the iostat -A command. NMON_Analyser reorders the columns on the sheet for easier graphing.
The Analyser generates three graphs. Note the area charts can be easily converted to line charts if required. Simply right click on the white space within the chart area, then select Chart Type>Line>OK.
IP
This sheet only appears for topasout.
JFSFILE
For each file system, this sheet shows what percentage of the space allocation is being used during each interval. These figures are the same as the %Used value reported by the df command. The column headings show the mount point; sheet BBBC can be used to cross-reference to the file system/LV.
JFSINODE
For each file system, this sheet shows what percentage of the Inode allocation is being used during each interval. These figures are the same as the %Iused value reported by the df command. The column headings show the mount point; sheet BBBC can be used to cross-reference to the file system/LV.
LAN
This sheet only appears for topasout.
LARGEPAGE
The graph shows Usedpages and Freepages over time.
Columns on the sheet are as follows:
Freepages the number of large pages on the free list.
Usedpages the number of large pages currently in use.
Pages the number of large pages in the pool.
HighWater the maximum number of pages used since the last reboot.
SizeMB the size of a large page in Mbytes.
LPAR
The first graph shows the number of physical processors used by this partition vs the entitlement. For an uncapped partition the number of physical processors may exceed the entitlement but can never exceed the number of virtual processors allocated to the partition. For AIX the graph also shows the number of unfolded virtual processors (AIX will “fold” - stop dispatching work to - excess processors in order to minimise scheduling costs).
Note that the ratio of physical processor to entitlement (shown as %entc in the output of the lparstat command) will generally be higher than CPU% on the CPU_ALL sheet. The reason for this is that a partition that is within its entitlement may wait for a short period of time before ceding a processor that enters an I/O wait or becomes idle. This can eliminate unnecessary context switches.
The second graph shows CPU utilisation as a percentage of virtual processors – for AIX this is broken down in to usr%, sys% and wait%. This level of detail is not available for Linux or releases of NMON prior to version 12.
The third graph is only present for AIX systems and shows cpu utilisation of the shared pool by this and other partitions. The area marked “UsedPoolCPU%” represents the percentage of the shared pool that has been used by this partition, while the area marked “other% “ represents the percentage used by all other partitions. Note that if the partition is not authorised to see utilisation of the shared pool then the pool will appear to be 100% utilised.
Columns on the sheet are as follows:
PhysicalCPU physical cores consumed by AIX
VirtualCPUs number of Virtual CPUs allocated to the LPAR
logicalCPUs number of threads (i.e. Virtual CPUs multiplied by SMT mode)
poolCPUs number of cores in the pool that this LPAR occupies
entitled the number of cores guaranteed to be available to this LPAR
weight the priority of this LPAR when competing for unused CPU cycles
PoolIdle the number of unused cores in the Pool
usedAllCPU% percentage of active cores in the machine that this LPAR is using
usedPoolCPU percentage of cores in the pool that this LPAR is using
SharedCPU 1 if the LPAR is not a dedicated CPU
Capped 1 if the LPAR is capped
EC_User% percentage of Entitlement used in User mode
EC_Sys% percentage of Entitlement used in System mode
EC_Wait% percentage of Entitlement waiting for I/O
EC_Idle% percentage of Entitlement used in Idle mode
VP_User% percentage of Virtual CPU used in User mode
VP_Sys% percentage of Virtual CPU used in System mode
VP_Wait% percentage of Virtual CPU waiting for I/O
VP_Idle% percentage of Virtual CPU spent in Idle mode
Folded no. of Virtual CPUs unused for efficiency reasons
CPU_Pool_id the Id of the CPU pool, useful if there are multiple pools
MEM
The main graph on this sheet shows the amount of Real Free memory in Mbytes by time of day. This would be the same as dividing the fre values reported by vmstat over the same interval by 256. The small graph shows the amount of real memory. This is useful in determining if dynamic reconfiguration has been used during the collection period.
For AIX, other columns on the sheet are as follows:
Real Free the percentage of real pages on the free list.
Virtual Free the percentage of unallocated virtual slots on the paging spaces.
Real Free (MB) the amount of memory on the free list in Mbytes.
Virtual Free (MB) the amount of unallocated space on the paging spaces.
Real Total (MB) the total amount of memory available to AIX.
Virtual Total (MB) the total amount of space allocated for paging spaces.
Note: you can calculate the amount of memory used during an interval simply by subtracting the Real Free (MB) value from the Real Total (MB) value. This will, however, include file pages. The graph on the MEMUSE sheet gives a more accurate assessment of memory used by programs (computational pages).
MEMUSE
Except for %comp, the values on this sheet are the same as would be reported by the vmtune command.
%numperm the percentage of real memory allocated to file pages.
%minperm value specified on the vmtune command or system default of 20%. This will normally be constant for the run unless the vmtune or rmss commands are used during collection.
%maxperm value specified on the vmtune command or system default of 80%. This will normally be constant for the run unless the vmtune or rmss commands are used during collection.
minfree the minimum number of pages AIX is to keep on the free list. Specified on the vmtune command or system default of maxfree - 8.
maxfree the maximum number of pages AIX is steal in order to replenish the free list. Specified on the vmtune command or system default.
%comp The percentage of real memory allocated to computational pages. NMON_Analyser calculates this value. Computational pages are those backed by page space and include working storage and program text segments. They exclude data, executable and shared library files.
The Analyser generates two graphs. The first shows the split between computational and file pages by time of day. The second plots the values of %numperm, %minperm, %maxperm and %comp.
If %numperm falls below %minperm then computational pages will be stolen. If %numperm rises above %maxperm then computational pages cannot be stolen. Low values for both %minperm and %maxperm indicate that the system has been tuned for a database server. You may also want to check the setting of STRICT_MAXPERM on the BBBP sheet (if present).
MEMNEW
The graph shows the allocation of memory split into the three major categories: pages used by user processes, file system cache, and pages used by the system (kernel).
Process% the percentage of real memory allocated to user processes
FSCache% the percentage of real memory allocated to file system cache
System% the percentage of real memory used by system segments
Free% the percentage of unallocated real memory
User% the percentage of real memory used by non-system segments
MEMPAGES4K/64K/16MB/16GB
These sheets are only present for AIX. They show various statistics for different page sizes in use within the system. The Analyser will delete the sheets for pages sizes not currently in use.
For the MEMPAGES64KB sheet a graph is drawn showing the use of both 4KB and 64KB pages within the system – starting with AIX V6.1 (and supporting hardware) these page sizes are selected dynamically based on memory access patterns.
MEMREAL
This sheet only appears for topasout. The Analyser adds a column showing Real Free memory in Mbytes.
MEMVIRT
This sheet only appears for topasout.
NET
This sheet shows the data rates, in Kbytes/sec, for each network adapter in the system (including SP switch if present). This is the same as produced by the netpmon –O dd command. NMON_Analyser adds one column for each adapter showing the total data rate (read + write) and two columns showing Total Read and Total Write. Note that the Total Write is calculated as a negative number for graphing.
The Analyser generates three graphs. The first graph shows total network traffic broken down as Total-Read and Total-Write. The writes are shown below the X-Axis.
Note the area chart can be easily converted to a line chart if required. Simply right click on the white space within the chart area, then select Chart Type>Line>OK.
NETPACKET
This sheet shows the number of read/write network packets for each adapter. This is the same as produced by the netpmon –O dd command.
NETSIZE
This sheet shows the average packet size in bytes for each network adapter in the system.
NFS sheets
There are separate sheets for NFS2, NFS3 and NF4 client/server. The Analyser will delete empty sheets.
PAGE
This sheet has the paging statistics as recorded by NMON.
faults the number of page faults per second. This is not a count of page faults that generate I/O, because some page faults can be resolved without I/O.
pgin the total rate/sec of page-in operations to both paging space and file systems during the interval.
pgout the total rate/sec of page-out operations to both paging space and file systems during the interval.
pgsin the rate/sec of page-in operations from paging space during the interval. This is the same as the pi value reported by vmstat. If pgsin is consistently higher than pgsout this may indicate thrashing.
pgsout the rate/sec of page-out operations to paging space during the interval. This is the same as the po value reported by vmstat.
reclaims from NMON 10 onwards this field is the same as the fr value reported by vmstat and represents the number of pages/sec freed by the page-replacement routine.
scans the number of pages/sec examined by the page replacement routine. This is the same as the sr value reported by vmstat. Page replacement is initiated when the number of free pages falls below minfree and stops when the number of free pages exceeds maxfree.
cycles the number of times/sec the page replacement routine had to scan the entire Page Frame Table in order to replenish the free list. This is the same as the cy value reported by vmstat but note that vmstat reports this number as an integer whereas nmon reports it as a real number.
fsin calculated by the Analyser as pgin-pgsin for graphing
fsout calculated by the Analyser as pgout-pgsout for graphing
sr/fr calculated by the Analyser as scans/reclaims for graphing
NMON_Analyser produces two graphs. The first shows paging operations to/from paging space. The ideal here would be no more than 5 operations/sec per page space (see the BBBC sheet for details). The second graph shows the scan:free rate. Memory may be over-committed when this figure is >4 although you also need to examine the MEM and PAGE sheets as well.
POOLS
This sheet contains information about the shared pool in which the LPAR is running. Most of the data will only be present if “Allow performance information collection.” is set in the LPAR properties.
shcpus_in_sys the number of cores allocated to the global shared pool
max_pool_capacity the maximum number of VPs defined for this pool
entitled_pool_capacity the entitlement for this pool (includes reserve entitlement)
pool_max_time same as max_pool_capacity but may vary in value if the pool definition is changed during the collection run.
pool_busy_time the average number of cores in use by this shared pool during the interval
shcpu_tot_time the average number of cores available to the global shared pool (including shared dedicated resources?) during the interval
shcpu_busy_time the average number of core in use within the global shared pool
pool_id this identifier of this pool
entitled the entitlement of this LPAR
PROC
This sheet contains a subset of the fields reported by NMON on the Kernel Internal Statistics panel. The RunQueue and Swap-in fields are average values for the interval. All other fields are rates/sec:
RunQueue the average number of kernel threads in the run queue. This is reported as runq-sz by the sar -q command and is reported as RunQueue on the nmon Kernel Internal Statistics panel. A value that exceeds 3x the number of CPUs may indicate CPU constraint.
Swap-in the average number of kernel threads waiting to be paged in. This is reported as swpq-sz by the sar -q command.
pswitch the number of context switches. This is reported as pswch/s by the sar -w command.
syscall the total number of system calls. This is reported as scall/s by the sar -c command.
read the number of read system calls. This is reported as sread/s reported by the sar -c command.
write the number of write system calls. This is reported as swrit/s by the sar -c command.
fork the number of fork system calls. This is reported as fork/s by the sar -c command.
exec the number of exec system calls. This is reported as exec/s by the sar -c command.
rcvint the number of tty receive interrupts. This is reported as revin/s by the sar -y command.
xmtint the number of tty transmit interrupts. This is reported as xmtin/s by the sar -y command.
sem the number of IPC semaphore primitives (creating, using and destroying). This is reported as sema/s by the sar -m command.
msg the number of IPC message primitives (sending and receiving). This is reported as msg/s by the sar -m command.
NMON_Analyser produces three graphs - one showing the average length of the RunQueue and the number of swap-ins by time of day, another showing rates/sec for pswitch and syscalls by time of day and a third showing rates/sec for forks and execs.
The graph for forks/execs can be useful when monitoring web server systems.
PROCAIO
This sheet contains information about the number of asynchronous I/O processes available and active (i.e. using more than 0.1% of the CPU) . It also shows the amount of CPU being used by the AIO processes during the collection interval.
Two graphs are produced. The second uses two y-axes. The number of running aio processes is shown against the first axis and the amount of cpu used is shown against the second.
RAWCPUTOTAL, RAWLPAR
These sheets contain a dump of various counters such as context switches and phantom interrupts.
TCPUDP
This sheet only appears for topasout.
TOP
This sheet is only generated if you specify the -t flag on the NMON command line. The output is similar to that produced using the ps v command. Note that, because of the limitation of having only 65,000 lines on a single sheet, some data may be omitted for very large files and this may mean that entire PIDs or even commands may be missing from the analysis.
Note that data are only present for processes that consumed a significant amount of CPU during an interval. The TOP sheet does not represent a complete view of the system.
NMON_Analyser does the following:
? reorders the columns for easier processing.
? Sorts the data on the sheet into COMMAND name order - using TIME as a minor sort key.
? Creates a table at the end of the sheet summarising the data by command name and used for graphing.
You can see the detail section by scrolling to the top of the sheet. The summary table is largely obscured by the graphs and so you will need to move (or delete) them for easier viewing.
PID in the detail section this is the process ID of a specific invocation of a command. In the summary table this is the command name.
%CPU in the detail section this is the utilisation of a single processor (rather than of the system) by that PID during the interval. In the summary table this is the average amount of CPU used by all invocations of the command during the collection period.
%Usr in the detail section this is the average amount of User-mode CPU used by that PID during the interval.
%Sys in the detail section this is the average amount of Kernel-mode CPU used by that PID during the interval.
Threads the number of (software) threads being used by this command.
Size the average amount of paging space (in Kbytes) allocated for the data section (private segment + shared library data pages) for one invocation of this command. This is the same as the SIZE figure on the ps v command. Note that if Size is greater than ResData it means some working segment pages are currently paged out.
ResText the average amount of real memory (in Kbytes) used for the code segments of one invocation of this command. Note that multiple concurrent invocations will normally share these pages.
ResData the average amount of real memory (in Kbytes) used for the data segments of one invocation of this command. A method of calculating real memory usage for a command is ResText + (ResData * N).
CharIO this is the count of bytes/sec being passed via the read and write system calls. The bulk of this is reading and writing to disks but also includes data to/from terminals, sockets and pipes. Use this to work out which processes are doing the I/O.
%RAM this is an indication of what percentage of real memory this command is using. This is (ResText + ResData) / Real Mem; it is the same as the %MEM value on the
ps v command. Due to rounding/truncation, and the large amounts of memory in modern systems, this is usually 0.
Paging sum of all page faults for this process. Use this to identify which process is causing paging but note that the figure includes asynchronous I/O and can be misleading.
Command name of the command
WLMClass name of the Workload Partition or Workload Manager superclass to which this command has been allocated (64-bit kernel only).
IntervalCPU generated by the Analyser. In the detail section this shows the total amount of CPU used by all invocations of a command in the time interval. It is calculated as the sum of CPU used by all PIDS running the same command divided by the number of active processors (physical cores) available during the interval. In the summary section this is broken down as Average, Weighted Average and Maximum and is used to generate the graph.
WSet generated by the Analyser. In the detail section this shows the total amount of memory used by all invocations of a command recorded in the time interval. It is calculated as ResText + (ResData * N) (where “N” is the number of copies of this command running concurrently during the interval). In the summary section this is broken down as Minimum, Average and Maximum and is used to generate the graph.
User generated by the Analyser if a UARG sheet is present. This contains the name of the user running the process.
Arg generated by the Analyser if a UARG sheet is present. This contains the complete argument string entered for the command.
The Analyser generates four graphs using data in the generated table:
? A graph showing Average, Weighted Average and Maximum CPU Utilisation by command
? A graph showing Minimum, Average and Maximum Memory Utilisation by command
? A graph showing Average, Weighted Average and Maximum CHARIO by command
? A graph showing the CPU utilisation for each PID for each interval as a scatter chart. Note that this chart is only produced if there are fewer than 32,000 lines on the TOP sheet. See below for notes on interpreting this chart.
Interpreting the %Processor by PID chart
The purpose of the chart is to provide a link to the UARG sheet so that you can discover precisely which invocation of a command was responsible for using the CPU. It shows the processor utilisation (utilisation of a single CPU) by each PID captured on the TOP sheet. Note that a process can use more than 100% of a single CPU if it is multi-threaded.
Active PIDs will create a cluster of points on the chart. The highest point will show the maximum amount of CPU used during any one snapshot. To find out which PID a point refers to, move the mouse to position the cursor above it and Excel will display a coordinate pair. The first coordinate is the PID – use this to refer to the UARG sheet to find precisely which command was being executed.
UARG
This sheet has the first 1,000 commands executed during the collection period. The commands are listed in time order. Note that commands appearing in the first interval may have been executing prior to the start of the collection.
PID the process ID of a specific invocation of a command
PPID the parent process ID
COMM the command being executed
THCOUNT the number of threads started by this process
USER the name of the user running this process
GROUP the name of the group to which the user belongs
FullCommand the full command string entered by the user
VM
This sheet is only present for Linux systems and contains a dump of the /proc/vmstat file values.
The two graphs shows file-backed paging (pgpgin/pgpgout) and swap space activity.
WPAR sheets
These sheets are only present for AIX V6 and record data for each Workload Partition in the system. They are not currently generated by the topas version of nmon.
WLM sheets
Contain details of CPU, Memory and I/O bandwidth used by each Superclass/Subclass defined to WLM during the collection run. The Analyser will extract subclasss data and create a new set of sheets for each class with more than one subclass. These sheets will be named “WLMCPU.class” etc.
If this is a Micro-partition then the Analyser will also create a set of WLMPCPU sheets which will show the physical processor utilisation rather than %CPU utilisation.
ZZZZ
The Analyser uses the information on this sheet to automatically convert all NMON time stamps to actual time of day for easier analysis. For NMON10 or later a column is added which contains the date and time as a single value and this is used for the conversions. The number of rows on this sheet is used by the Analyser to reset the “snapshots” value on the AAA sheet in case the nmon run was terminated with SIGUSR2.
Error Handling
Error handling in NMON_Analyser is rudimentary. The Analyser can handle many input file errors, but occasionally the analysis will halt leaving you staring at a dialog box. Should this happen, please accept my apologies. However, before sending me a copy of the input file, please read the following:
Common problems
The most commonly reported problems arise from invalid input files. We also get problems reported where, for whatever reason, lines have been truncated, split or even duplicated. NMON_Analyser attempts to trap these errors and will report them on the “StrayLines” sheet. Check this sheet if the run stops unexpectedly.
? 'No valid input! NMON run may have failed.'
The most common cause of this message is that the NMON run failed and there really is no valid input. NMON initialises the output file by writing all of the section headings. If it subsequently fails, you will get an output file that consists purely of headings - with no data. Check the file by loading it into a word processor or, indeed, a spreadsheet (as a .csv file) before you send it to me.
? 'Unexpected end of file.'
This is only reported when processing files containing more lines than can be stored on one sheet and when SORTINP is set to NO. It is usually caused by the fact that lines are being terminated with a CR character instead of CRLF. Change your FTP option to ASCII or TEXT when sending the file to your PC. This problem only shows up with large files because the Analyser uses a different technique to read them than that used to read smaller files.
Strangely, one of the most common problems I get is caused by the fact that the Analyser can’t handle files with a single data interval very well. If you want to test the package just let NMON run for a few minutes to get a reasonable data sample!
Known bugs/problems (V3.4, topas_nmon)
? When analysing systems with a very large number of disks, Excel can stop with error “No more fonts can be added” or “Insufficient Resources”. Set GRAPHS to LIST and select only those sheets you are interested in using the LIST option on the Settings sheet.
? The data can be sorted incorrectly with some versions of nmon (notably 14g) which generate variable length timestamps. Process each file separately and specify MERGE=YES to get the data sorted correctly.
? The PIVOT option does not seem to work with Excel 2007 or later
? The Analyser will crash if you edit the .csv file using Excel prior to the run and the file contains a TOP section. If you need to edit the input file, use a word processor.
? There are some issues with processing files from systems having both ESS and EMC subsystems attached.
? When analysing ESS subsystems with more than 253 vpaths some vpath data will be missing from the output. Use NMON Disk Groups to combine several vpaths into a single unit for reporting and use the –E flag to prevent the ESS sections from being produced. Alternatively, set ESS to NO on the Control sheet and ignore warning messages about data truncation – only the first 253 vpaths will appear in the output.
How to report a problem
Post the relevant information on the nmon forum (see the link in the introduction). It can help to include a copy of the original, unmodified .nmon input file, plus the incomplete output spreadsheet, as a compressed (zipped) file but please consider your system security before doing so.
If you have the ability to capture a screenshot then a copy of any dialog boxes also proves useful on occasion.
Note: Development is currently done on Microsoft Excel 2003 (11.8320.8221) SP3. It may not be possible to fix problems arising from the use of different releases.
Excel/VBA Resources/Links
This is a good source for Excel tips and it has some VBA examples as well:
http://exceltips.vitalnews.com/
This is the home of an excellent reference book:
http://www.exceltip.com/
And of course
http://www.microsoft.com
Appendix: Notes on Batch Operation
If you regularly process large numbers of files, the operation of NMON_Analyser can be completely automated. Simply create a text file containing a list of nmon file names (using wild card characters as appropriate) and enter the name of this file into the FILELIST field of the Analyser control sheet. Specify the name of an existing directory in the OUTDIR field if you want all of the output files to end up in one place. Save the NMON_Analyser spreadsheet under a new name (this is recommended so that you can still use NMON_Analyser for interactive sessions).
Now create Windows .bat files to invoke Excel (see the samples below).
After processing the last input file, the Analyser will automatically close down Excel. Note, however, that this only happens if you load a copy of the Analyser that has a saved FILELIST name and if there are no other open spreadsheets. This allows you to use the FILELIST option safely during an interactive session.
Sample .bat files
These sample batch control files are designed to use the pscp file from the PuTTY suite written and maintained by Simon Tatham at http://www.chiark.greenend.org.uk/~sgtatham/putty/
My thanks to Jamie Dennis for providing them.
getcsv.bat
cd \NMON\RawData
del *.csv
d:\progra~1\putty\pscp -p -r -l userid host://Performance/NMON/Rawdata/*.csv .
analyser.bat
D:
cd \NMON\FinishedData
del d:\NMON\FinishedData\*.xls
"D:\NMON\nmon analyser batch.xls"
putxls.bat
D:
cd \NMON\FinishedData
d:\progra~1\putty\pscp -p -r -l userid *.xls host:/Performance/NMON/
Control.txt
d:\NMON\RawData\*.csv
NMON Analyser Batch.xls
OUTDIR
d:\NMON\FinishedData\
FILELIST
d:\NMON\FinishedData\Control.txt
About Me
...............................................................................................................................
● 本文整理自网络
● 本文在itpub(http://blog.itpub.net/26736162)、博客园(http://www.cnblogs.com/lhrbest)和个人微信公众号(xiaomaimiaolhr)上有同步更新
● 本文itpub地址:http://blog.itpub.net/26736162/abstract/1/
● 本文博客园地址:http://www.cnblogs.com/lhrbest
● 本文pdf版及小麦苗云盘地址:http://blog.itpub.net/26736162/viewspace-1624453/
● 数据库笔试面试题库及解答:http://blog.itpub.net/26736162/viewspace-2134706/
● QQ群:230161599 微信群:私聊
● 联系我请加QQ好友(646634621),注明添加缘由
● 于 2017-07-01 09:00 ~ 2017-07-31 22:00 在魔都完成
● 文章内容来源于小麦苗的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解
● 版权所有,欢迎分享本文,转载请保留出处
...............................................................................................................................
拿起手机使用微信客户端扫描下边的左边图片来关注小麦苗的微信公众号:xiaomaimiaolhr,扫描右边的二维码加入小麦苗的QQ群,学习最实用的数据库技术。
【Java学习全家桶】1460道Java热门问题,阿里百位技术专家答疑解惑
阿里极客公益活动:
或许你挑灯夜战只为一道难题
或许你百思不解只求一个答案
或许你绞尽脑汁只因一种未知
那么他们来了,阿里系技术专家来云栖问答为你解答技术难题了
他们用户自己手中的技术来帮助用户成长
本次活动特邀百位阿里技术专家对Java常见问题进行了集中解答,在短短3天时间专家回答了1460道Java问题
如何学习Java
作为一个java学习者,重复写轮子是否必要 https://yq.aliyun.com/ask/48209自学三个月java能到什么程度 https://yq.aliyun.com/ask/106323自学java看什么书 https://yq.aliyun.com/ask/111024怎么学习好java https://yq.aliyun.com/ask/109430怎么学好java基础 https://yq.aliyun.com/ask/106060怎么学好 java https://yq.aliyun.com/ask/109945怎么学java手机游戏开发软件 https://yq.aliyun.com/ask/104770怎么学java https://yq.aliyun.com/ask/104066用什么方式学java https://yq.aliyun.com/ask/110327学一年java可以找什么工作 https://yq.aliyun.com/ask/103571学习java可以做什么 https://yq.aliyun.com/ask/109677学完java怎么开发 https://yq.aliyun.com/ask/103825学完java基础后然后学什么 https://yq.aliyun.com/ask/111943学了java能干什么的 https://yq.aliyun.com/ask/105560学好java需要看什么书 https://yq.aliyun.com/ask/103104学java最重要的是什么 https://yq.aliyun.com/ask/106054学java之前要学什么东西吗 https://yq.aliyun.com/ask/104670学java之前学什么好 https://yq.aliyun.com/ask/106169学java怎么多练啊 https://yq.aliyun.com/ask/110071学java有什么好书 https://yq.aliyun.com/ask/108737学java需要下载什么软件 https://yq.aliyun.com/ask/102733学java买什么电脑 https://yq.aliyun.com/ask/107778学java框架看什么书 https://yq.aliyun.com/ask/104881学java可以考什么证书吗 https://yq.aliyun.com/ask/102538学java可以干什么的 https://yq.aliyun.com/ask/107130学java干安卓怎么样 https://yq.aliyun.com/ask/111765学java 用什么系统电脑 https://yq.aliyun.com/ask/107276学java web看什么书 https://yq.aliyun.com/ask/103745新手自学java看什么书 https://yq.aliyun.com/ask/105762小白学java看什么书 https://yq.aliyun.com/ask/103638为什么这么多人学java https://yq.aliyun.com/ask/106453为什么要学java web https://yq.aliyun.com/ask/109814为什么28岁不能学java https://yq.aliyun.com/ask/104065什么都不会怎么学java https://yq.aliyun.com/ask/108467女生学java有什么发展 https://yq.aliyun.com/ask/110057你学习javaee的步骤是什么? https://yq.aliyun.com/ask/109478面试你为什么要学java https://yq.aliyun.com/ask/110076该怎么自学java https://yq.aliyun.com/ask/105961辞职去学java怎么样 https://yq.aliyun.com/ask/106076初学java买什么书 https://yq.aliyun.com/ask/105172java主要学什么 https://yq.aliyun.com/ask/110050java之前学什么 https://yq.aliyun.com/ask/112303java怎么自学 https://yq.aliyun.com/ask/103868java怎么学比较快 https://yq.aliyun.com/ask/108797java怎么输出姓名学号 https://yq.aliyun.com/ask/105171java学徒出来做什么的 https://yq.aliyun.com/ask/112120java学什么数据结构 https://yq.aliyun.com/ask/102734java学了能干什么 https://yq.aliyun.com/ask/112221java学会能做什么 https://yq.aliyun.com/ask/111005java学会了能干什么 https://yq.aliyun.com/ask/111657java学的是什么意思 https://yq.aliyun.com/ask/103047java学出来可以做什么工作 https://yq.aliyun.com/ask/102653java学出来可以做什么 https://yq.aliyun.com/ask/109247java学出来后怎么样 https://yq.aliyun.com/ask/108901java需要什么都学 https://yq.aliyun.com/ask/111119java数学符号怎么表示 https://yq.aliyun.com/ask/111104java是什么好学吗 https://yq.aliyun.com/ask/111754java开发要先学什么软件 https://yq.aliyun.com/ask/111245java开发要先学什么 https://yq.aliyun.com/ask/102858java基础怎么学 https://yq.aliyun.com/ask/109344java基础学完了学什么 https://yq.aliyun.com/ask/108383java工程师学什么专业 https://yq.aliyun.com/ask/102847java初学者用什么书好 https://yq.aliyun.com/ask/109067java初学者应该怎么学 https://yq.aliyun.com/ask/103623java初学者看什么书 https://yq.aliyun.com/ask/110318java程序员应该学什么 https://yq.aliyun.com/ask/105639javase学完后怎么加深 https://yq.aliyun.com/ask/105426c 和java学什么 https://yq.aliyun.com/ask/110305c 和 java 同时学会怎么样 https://yq.aliyun.com/ask/103967
Java如何找工作
转行java怎么找工作 https://yq.aliyun.com/ask/102955只会java和c语言适合什么工作 https://yq.aliyun.com/ask/110620学一年java可以找什么工作 https://yq.aliyun.com/ask/103571java中的工作流有什么 https://yq.aliyun.com/ask/111383java找工作怎么样 https://yq.aliyun.com/ask/103636java怎么找工作 https://yq.aliyun.com/ask/112302java学出来可以做什么工作 https://yq.aliyun.com/ask/102653java新人怎么找工作 https://yq.aliyun.com/ask/110801java什么工作较轻松 https://yq.aliyun.com/ask/105655java去哪儿工作怎么样 https://yq.aliyun.com/ask/112254java前台开发做什么工作 https://yq.aliyun.com/ask/110792java开发做什么工作内容 https://yq.aliyun.com/ask/109082java开发是什么工作 https://yq.aliyun.com/ask/109769java工程师做什么工作吗 https://yq.aliyun.com/ask/104668java出来做什么工作吗 https://yq.aliyun.com/ask/104047java出来能做什么工作 https://yq.aliyun.com/ask/10656218不到怎么找java工作 https://yq.aliyun.com/ask/110323
Java常见问题
字符串转换成整型时为何出错? https://yq.aliyun.com/ask/12059这java的实例化是什么情况? https://yq.aliyun.com/ask/13289怎样用java获得想要的日期? https://yq.aliyun.com/ask/7729怎样实现十六进制转八进制和十进制? https://yq.aliyun.com/ask/20579怎样让子类访问父类内部类的方法 https://yq.aliyun.com/ask/6831怎样从类对象的方法中接收空指针异常 https://yq.aliyun.com/ask/5641怎么做java定时器 https://yq.aliyun.com/ask/103175怎么执行java编译文件 https://yq.aliyun.com/ask/107365怎么知道java多线程都已经运行结束 https://yq.aliyun.com/ask/103994怎么找java源文件 https://yq.aliyun.com/ask/111535怎么在Map中储存不同类型的参数 https://yq.aliyun.com/ask/5761怎么在java中插入背景 https://yq.aliyun.com/ask/103867怎么在java里该颜色 https://yq.aliyun.com/ask/109810怎么在java代码里写js https://yq.aliyun.com/ask/105726怎么在cmd运行java文件夹 https://yq.aliyun.com/ask/106141怎么阅读java后台代码 https://yq.aliyun.com/ask/103807怎么阅读javaweb源码 https://yq.aliyun.com/ask/112013怎么用java做手机app https://yq.aliyun.com/ask/107550怎么用java写类 https://yq.aliyun.com/ask/109881怎么用java写安卓app https://yq.aliyun.com/ask/111343怎么用java写app程序员 https://yq.aliyun.com/ask/104060怎么用java统计字符串变量里面每个单词出现的次数并按次数倒序排列 https://yq.aliyun.com/ask/111389怎么用java获取纳秒的时间 https://yq.aliyun.com/ask/111345怎么用java打印出爱心 https://yq.aliyun.com/ask/103229怎么用java程序 https://yq.aliyun.com/ask/110067怎么引用rxjava https://yq.aliyun.com/ask/109275怎么样提高java打代码 https://yq.aliyun.com/ask/106208怎么样删除java文件 https://yq.aliyun.com/ask/104760怎么写java增删改代码 https://yq.aliyun.com/ask/103272怎么写java代码 https://yq.aliyun.com/ask/102835怎么下载java https://yq.aliyun.com/ask/105051怎么调用java命令行 https://yq.aliyun.com/ask/109158怎么生成java注释文档 https://yq.aliyun.com/ask/107131怎么让java线程停止 https://yq.aliyun.com/ask/105645怎么让java播放声音文件 https://yq.aliyun.com/ask/109826怎么让 EditText 只显示两位小数 https://yq.aliyun.com/ask/5943怎么求现在的月份java https://yq.aliyun.com/ask/111478怎么理解java设计模式 https://yq.aliyun.com/ask/111018怎么看网页源代码java https://yq.aliyun.com/ask/107527怎么看电脑装没装java https://yq.aliyun.com/ask/104488怎么看安装的java是多少位 https://yq.aliyun.com/ask/105226怎么看java虚拟机版本 https://yq.aliyun.com/ask/112304怎么看java环境是否配置成功 https://yq.aliyun.com/ask/105232怎么看java的api文档 https://yq.aliyun.com/ask/111260怎么看java版本 https://yq.aliyun.com/ask/110961怎么看java安装成功 https://yq.aliyun.com/ask/109243怎么看javaee阶段的源码 https://yq.aliyun.com/ask/109825怎么看java_home https://yq.aliyun.com/ask/102669怎么看java jdk装在哪 https://yq.aliyun.com/ask/104230怎么解析如下格式的URL?急 https://yq.aliyun.com/ask/8847怎么将json转换成对象数组 java对象数组 https://yq.aliyun.com/ask/110975怎么建立一个java工程 https://yq.aliyun.com/ask/111113怎么检查我java的版本 https://yq.aliyun.com/ask/108479怎么获取当时时间java https://yq.aliyun.com/ask/110676怎么关闭java.exe https://yq.aliyun.com/ask/102846怎么从java中插入数据到数据库中id要加1怎么办 https://yq.aliyun.com/ask/111984怎么创建java守护进程 https://yq.aliyun.com/ask/110461怎么成为java大牛 https://yq.aliyun.com/ask/112151怎么查看电脑java几位 https://yq.aliyun.com/ask/103479怎么查看java是多少位的 https://yq.aliyun.com/ask/104892怎么查看java内存使用情况 https://yq.aliyun.com/ask/104281怎么查看java的jdk版本信息 https://yq.aliyun.com/ask/110687怎么查看java jdk路径 https://yq.aliyun.com/ask/108476怎么查java的jdk版本 https://yq.aliyun.com/ask/106656怎么查java版本 https://yq.aliyun.com/ask/107732怎么编辑java文件 https://yq.aliyun.com/ask/108047怎么把字符串转整数 java https://yq.aliyun.com/ask/102911怎么把字符串按照字母顺序输出 https://yq.aliyun.com/ask/6467怎么把java程序放进php https://yq.aliyun.com/ask/103873怎么把.txt变成.java https://yq.aliyun.com/ask/103093怎么java方法调用静态方法调用方法调用 https://yq.aliyun.com/ask/110783在什么场景需要使用java序列化 https://yq.aliyun.com/ask/106703在京东做java怎么样 https://yq.aliyun.com/ask/108723在js里写java代码怎么写的 https://yq.aliyun.com/ask/103865在jsp中用什么指令导入java.io.* https://yq.aliyun.com/ask/103232在java中怎么自动补全 https://yq.aliyun.com/ask/109644在java中怎么设一个第二大的数 https://yq.aliyun.com/ask/103881在java中怎么保留两位小说 https://yq.aliyun.com/ask/106460在java中一个类被声明为final类型表示了什么意思? https://yq.aliyun.com/ask/104260在java中死锁是什么 https://yq.aliyun.com/ask/110100在java中时间怎么相减 https://yq.aliyun.com/ask/106942在java中什么叫做进程 https://yq.aliyun.com/ask/110298在java中^是什么意思 https://yq.aliyun.com/ask/108892在java三角函数怎么用 https://yq.aliyun.com/ask/111349在java里 什么是方法 https://yq.aliyun.com/ask/105000在java程序中如何加载自己写的类? https://yq.aliyun.com/ask/15136在dos窗口编译java程序找不到文件怎么办 https://yq.aliyun.com/ask/107547在 intent 中添加一个 arraylist https://yq.aliyun.com/ask/5965远程过程调用(RPC)的意义仅仅是为了解决分布式需求么? https://yq.aliyun.com/ask/12266有什么java的好书? https://yq.aliyun.com/ask/105222用什么写java https://yq.aliyun.com/ask/104769用string类型进行十进制加法计算 https://yq.aliyun.com/ask/7586用java怎么做界面 https://yq.aliyun.com/ask/102741用java写坦克大战怎么做 https://yq.aliyun.com/ask/102742用JAVA将彩色图像变为灰度图像 https://yq.aliyun.com/ask/12899用java sevlet 怎么把集合里面 然后在console输出 https://yq.aliyun.com/ask/103864一号店java开发怎么样 https://yq.aliyun.com/ask/104061一个关于Android编成问题 https://yq.aliyun.com/ask/24700写java源代码用什么编辑器 https://yq.aliyun.com/ask/112364写java书的什么小波 https://yq.aliyun.com/ask/110675小米java技术怎么样 https://yq.aliyun.com/ask/107814线程安全怎么解决new String 问题 https://yq.aliyun.com/ask/6520现在流行java还有什么 https://yq.aliyun.com/ask/106379现在java用什么服务器 https://yq.aliyun.com/ask/105661下了java怎么运行 https://yq.aliyun.com/ask/109649西安java程序员发展前景怎么样 https://yq.aliyun.com/ask/112108我运行java.exe窗口出现几秒后又消失了这是为什么 https://yq.aliyun.com/ask/103285为什么运行javac https://yq.aliyun.com/ask/104269为什么用java https://yq.aliyun.com/ask/110972为什么要用static修饰Lock对象 https://yq.aliyun.com/ask/11756为什么要使用setConnectionTimeout和SetReadTimeout? https://yq.aliyun.com/ask/12939为什么要使用java线程 https://yq.aliyun.com/ask/112126为什么要配置java环境变量 https://yq.aliyun.com/ask/108915为什么选择java开发web https://yq.aliyun.com/ask/111259为什么说java是开源的 https://yq.aliyun.com/ask/106317为什么说java是安全的 https://yq.aliyun.com/ask/105085为什么瞧不起java https://yq.aliyun.com/ask/111773为什么前端比java工资高 https://yq.aliyun.com/ask/102569为什么很多第三方接口都改成了基于http直接传递json数据的方式来代替webservice? https://yq.aliyun.com/ask/8563为什么黑java https://yq.aliyun.com/ask/104779为什么不能退出while循环 https://yq.aliyun.com/ask/6507为什么阿里的java偏强 https://yq.aliyun.com/ask/111379为什么java主函数是静态的 https://yq.aliyun.com/ask/110341为什么java中的类里面还能声明一个静态的自己 https://yq.aliyun.com/ask/23974为什么java中的汉字横着 https://yq.aliyun.com/ask/102722为什么java这么难 https://yq.aliyun.com/ask/102760为什么java项目有个感叹号 https://yq.aliyun.com/ask/107785为什么java培训那么火 https://yq.aliyun.com/ask/103729为什么java那么火 https://yq.aliyun.com/ask/107818为什么java不如python https://yq.aliyun.com/ask/103277为什么 java int 范围 为什么是2^31而不是2^32 https://yq.aliyun.com/ask/111570同一台服务器运行多个http服务如何实现? https://yq.aliyun.com/ask/12267同一个类产生的两个对象能访问私有数据吗? https://yq.aliyun.com/ask/12115替换字符串中*字符 https://yq.aliyun.com/ask/5712替换string中的变量 https://yq.aliyun.com/ask/8252随机数怎么求java https://yq.aliyun.com/ask/105445数据库中number类型java程序中转换为什么类型 https://yq.aliyun.com/ask/110196数据结构的树操作用java实现用导入什么 包吗? https://yq.aliyun.com/ask/111571输入n之后要怎么才能返回问题 https://yq.aliyun.com/ask/24721手机上怎么练java代码 https://yq.aliyun.com/ask/110969手机java程序怎么运行 https://yq.aliyun.com/ask/102500是否有好的JAVA轻量级分布式框架推荐? https://yq.aliyun.com/ask/11845使用方法求解规则图形面积 https://yq.aliyun.com/ask/24834使用nodejs做后台会不会效率比较低 https://yq.aliyun.com/ask/7336什么资质可以培训java https://yq.aliyun.com/ask/108387什么样的人适合做java https://yq.aliyun.com/ask/104690什么书讲java底层 https://yq.aliyun.com/ask/105167什么是进程 java https://yq.aliyun.com/ask/110993什么是继承 java https://yq.aliyun.com/ask/104264什么是多线程java https://yq.aliyun.com/ask/111346什么是包java文件 https://yq.aliyun.com/ask/110129什么是java字符串 https://yq.aliyun.com/ask/102512什么是java主线程 https://yq.aliyun.com/ask/103223什么是java中的异常 https://yq.aliyun.com/ask/104279什么是java一致性hash https://yq.aliyun.com/ask/104826什么是java序列化如何实现java序列化 https://yq.aliyun.com/ask/102539什么是java序列化如何实现 https://yq.aliyun.com/ask/110784什么是java实体类 https://yq.aliyun.com/ask/106712什么是java零配置 https://yq.aliyun.com/ask/108487什么是java接口 https://yq.aliyun.com/ask/109269什么是java监听器 https://yq.aliyun.com/ask/104679什么是java封装 https://yq.aliyun.com/ask/102848什么是java反射机制 https://yq.aliyun.com/ask/110236什么是java对象 https://yq.aliyun.com/ask/102707什么是java的重写 https://yq.aliyun.com/ask/103785什么是java的预编译 https://yq.aliyun.com/ask/107533什么是java的平台无关性 https://yq.aliyun.com/ask/106970什么是java标识符 https://yq.aliyun.com/ask/105600什么时候用单例什么时候用多例? https://yq.aliyun.com/ask/6851什么叫java方法重载 https://yq.aliyun.com/ask/111827深圳达内java怎么样 https://yq.aliyun.com/ask/107526涉及到金额的为什么都要保存整数? https://yq.aliyun.com/ask/7528上海达内 java培训怎么样 https://yq.aliyun.com/ask/110698三年java达到什么水平 https://yq.aliyun.com/ask/109248如何增强颜色的明亮度 https://yq.aliyun.com/ask/5966如何在服务器与web端传递消息? https://yq.aliyun.com/ask/24835如何使用zookeeper实现负载均衡器? https://yq.aliyun.com/ask/9837如何使用 Color.rgb ? https://yq.aliyun.com/ask/5714如何使一个线程暂停 https://yq.aliyun.com/ask/7013如何让hashmap中放入不同实体类 https://yq.aliyun.com/ask/6046如何判断当前用户是否使用了代理服务器 https://yq.aliyun.com/ask/13602如何理解volatile不能保证原子性,也就不能保证线程安全? https://yq.aliyun.com/ask/18059如何解析复杂的json响应 https://yq.aliyun.com/ask/5679如何解决Cookie登录 频繁查询数据库问题? https://yq.aliyun.com/ask/13318如何获取该对象在ArrayList里的索引值 https://yq.aliyun.com/ask/6048如何获取对象的类型 https://yq.aliyun.com/ask/5759如何防止高并发同时下单同一商品 https://yq.aliyun.com/ask/6727如何把php环境怎么改为php/java环境 https://yq.aliyun.com/ask/59487如果高并发请求同一个方法会造成线程安全吗? https://yq.aliyun.com/ask/7136求字符串中相同最长的字串 https://yq.aliyun.com/ask/6536求教Java问题 https://yq.aliyun.com/ask/7335请问接口的作用什么? https://yq.aliyun.com/ask/7009苹果怎么编写java https://yq.aliyun.com/ask/104276面试官问java为什么要转成iOS https://yq.aliyun.com/ask/106204面试3年java 问什么问题 https://yq.aliyun.com/ask/105173密码md5加密问题 https://yq.aliyun.com/ask/7089两年java 程序员需要什么 https://yq.aliyun.com/ask/107150两个线程同时调用同一实例里面的同一方法会出问题吗? https://yq.aliyun.com/ask/8164乐观锁和悲观锁的概念是否仅限于关系型数据库? https://yq.aliyun.com/ask/8233控制台怎么运行java https://yq.aliyun.com/ask/103971开了事务插入大量数据还有必要用批量插入吗? https://yq.aliyun.com/ask/7634开发java用什么工具 https://yq.aliyun.com/ask/108777开发ide用什么java https://yq.aliyun.com/ask/111311接口判断‘请求过于频繁’的大概标准是什么? https://yq.aliyun.com/ask/11854简述java的语言特点是什么 https://yq.aliyun.com/ask/112311计算器 java怎么实现加法 https://yq.aliyun.com/ask/106615基于Java程序生成Word文档 https://yq.aliyun.com/ask/1793或和且的java符号怎么打 https://yq.aliyun.com/ask/105002后缀为java的叫什么意思 https://yq.aliyun.com/ask/104571关于位运算的判断问题 https://yq.aliyun.com/ask/11846关于Rest风格的API的如何做权限控制 https://yq.aliyun.com/ask/11760关于JVM垃圾回收 https://yq.aliyun.com/ask/8590关于JAVA中的List接口 https://yq.aliyun.com/ask/12908关于java内部掏空的金字塔 https://yq.aliyun.com/ask/25814关于java垃圾回收机制中的finalize方法 https://yq.aliyun.com/ask/24827关键字volatile的作用 https://yq.aliyun.com/ask/9321高并发,大数据的java系统,采用应用服务器,数据库服务器,分布式,给点意见? https://yq.aliyun.com/ask/571刚入职的java程序员都干什么 https://yq.aliyun.com/ask/103158二级菜单java使用什么 https://yq.aliyun.com/ask/103870二叉树的遍历问题 https://yq.aliyun.com/ask/9856对递归的思考和疑惑 https://yq.aliyun.com/ask/7142动力节点java培训怎么样 https://yq.aliyun.com/ask/110349电脑里java是什么软件下载 https://yq.aliyun.com/ask/103633电脑java怎么设置字体 https://yq.aliyun.com/ask/108766当HashMap中键值对太多怎么办? https://yq.aliyun.com/ask/12140单例对多线程的性能影响有多大? https://yq.aliyun.com/ask/11768代码报空指针异常 https://yq.aliyun.com/ask/16680存在父子关系的数据我怎么处理存入数据库 https://yq.aliyun.com/ask/24863创建对象和获取对象的方法区分 https://yq.aliyun.com/ask/20486出现java乱码怎么解决 https://yq.aliyun.com/ask/103239成都java怎么样 https://yq.aliyun.com/ask/112162标准java库是什么意思 https://yq.aliyun.com/ask/103280编译java生成jar文件怎么打开 https://yq.aliyun.com/ask/108129编译java程序需要使用什么命令 https://yq.aliyun.com/ask/112141编写java用什么软件好 https://yq.aliyun.com/ask/105794编写java需要什么软件有哪些 https://yq.aliyun.com/ask/108785编写java什么字体好看 https://yq.aliyun.com/ask/106967编程java是什么 https://yq.aliyun.com/ask/108918编程java看什么书好 https://yq.aliyun.com/ask/111697北大青鸟java培训 怎么样 https://yq.aliyun.com/ask/105435报错 cannot be cast to com.iflve.domain.Employee怎么解决 https://yq.aliyun.com/ask/8851安装java需要什么软件有哪些内容吗 https://yq.aliyun.com/ask/106306安装java软件叫什么软件 https://yq.aliyun.com/ask/104177阿里java怎么投简历 https://yq.aliyun.com/ask/107371xcode怎么创建java https://yq.aliyun.com/ask/109664windows下IntelliJ运行时出现tools.jar问题 https://yq.aliyun.com/ask/7378win8怎么装java https://yq.aliyun.com/ask/106816win8怎么安装java https://yq.aliyun.com/ask/108897win10怎么配置java环境 https://yq.aliyun.com/ask/112180WEB开发下载服务器上面的报表怎么防止数据量过大导致超时 https://yq.aliyun.com/ask/7985vs2017中java怎么装 https://yq.aliyun.com/ask/103308volatile关键字使用或者不使用没有区别 https://yq.aliyun.com/ask/18021void在java中什么位置 https://yq.aliyun.com/ask/103177ubuntu怎么安装java https://yq.aliyun.com/ask/111954synchronized 和 ReentrantLock有什么区别 https://yq.aliyun.com/ask/9118static修饰成员变量的唯一性 https://yq.aliyun.com/ask/12942ssh项目报java.lang.NoSuchMethodException https://yq.aliyun.com/ask/7578SpringMVC中使用List数据绑定ajax怎么传输包含数组的Json数据? https://yq.aliyun.com/ask/7144scanner在java中怎么用 https://yq.aliyun.com/ask/105590scala为什么需要java https://yq.aliyun.com/ask/107761request.setAttribute是把数据保存在哪呢? https://yq.aliyun.com/ask/19175redis在实际开发中,使用Java哪个框架 https://yq.aliyun.com/ask/6769private修饰属性没有set只有get方法如何给这个属性赋值 https://yq.aliyun.com/ask/6582private string flag="0"在java是什么意思 https://yq.aliyun.com/ask/106165mysql怎么和java连接 https://yq.aliyun.com/ask/111840myeclipse怎么导入java文件 https://yq.aliyun.com/ask/103473Map中一个key不是只对应一个value吗? https://yq.aliyun.com/ask/28726mac上怎么编写java https://yq.aliyun.com/ask/112093mac的java怎么卸载 https://yq.aliyun.com/ask/110971mac 怎么查询java版本信息 https://yq.aliyun.com/ask/105767mac 怎么查询java版本 https://yq.aliyun.com/ask/109443list如何去除重复项 https://yq.aliyun.com/ask/11776ListView中遇到的空指针异常 https://yq.aliyun.com/ask/23996linux怎么编译运行java https://yq.aliyun.com/ask/108318linux写java代码用什么软件有哪些 https://yq.aliyun.com/ask/108089linux java怎么编译的 https://yq.aliyun.com/ask/105980lib文件是什么java https://yq.aliyun.com/ask/106128js里面怎么写java https://yq.aliyun.com/ask/102849jsp中java代码中文乱码怎么解决 https://yq.aliyun.com/ask/111748jsp和java怎么连接数据库 https://yq.aliyun.com/ask/105168jsp java代码怎么写 https://yq.aliyun.com/ask/103871json字符串怎么转成对象数组 java https://yq.aliyun.com/ask/109943jdk怎么编译java文件 https://yq.aliyun.com/ask/104795java做什么最好 https://yq.aliyun.com/ask/102503java做什么用的 https://yq.aliyun.com/ask/105166java做什么的 https://yq.aliyun.com/ask/104409java做的是什么软件 https://yq.aliyun.com/ask/108391java最大整数怎么表示 https://yq.aliyun.com/ask/109953java字符怎么拼接 https://yq.aliyun.com/ask/106721java字符串字节长度怎么算 https://yq.aliyun.com/ask/111029java字符串中数字的位置如何判断。 https://yq.aliyun.com/ask/12989java字符串怎么转int数组 https://yq.aliyun.com/ask/103732java字符编码是什么 https://yq.aliyun.com/ask/111979java自增3怎么写 https://yq.aliyun.com/ask/112202java自定义异常怎么用 https://yq.aliyun.com/ask/106424java子类怎么调用父类的构造方法 https://yq.aliyun.com/ask/109474java子接口继承父接口所用的关键字是什么 https://yq.aliyun.com/ask/108494java转换类型有什么用 https://yq.aliyun.com/ask/103237java转ios怎么样 https://yq.aliyun.com/ask/112165java专业技能怎么写 https://yq.aliyun.com/ask/110970java驻场开发什么意思 https://yq.aliyun.com/ask/104462java注册事件有什么用 https://yq.aliyun.com/ask/111391java主方法有什么用 https://yq.aliyun.com/ask/102759java重载什么意思 https://yq.aliyun.com/ask/110991java中自增自减怎么看 https://yq.aliyun.com/ask/106634Java中子类重载的问题 https://yq.aliyun.com/ask/25872java中怎么转译 https://yq.aliyun.com/ask/104064java中怎么注释代码 https://yq.aliyun.com/ask/112248java中怎么在按钮中加图片 https://yq.aliyun.com/ask/109820java中怎么引入一个库 https://yq.aliyun.com/ask/109251java中怎么向数组中加元素 https://yq.aliyun.com/ask/106921java中怎么跳出循环 https://yq.aliyun.com/ask/103203java中怎么调用索引 https://yq.aliyun.com/ask/111116java中怎么调用变量 https://yq.aliyun.com/ask/103874java中怎么调用get方法调用 https://yq.aliyun.com/ask/111944java中怎么输入一个字符 https://yq.aliyun.com/ask/106051java中怎么输入 https://yq.aliyun.com/ask/108580java中怎么输出数据库数据类型 https://yq.aliyun.com/ask/104765java中怎么使注解生效 https://yq.aliyun.com/ask/109186java中怎么使用绝对值 https://yq.aliyun.com/ask/103204java中怎么生成id https://yq.aliyun.com/ask/102571java中怎么去掉空白的一行 https://yq.aliyun.com/ask/109449java中怎么求余 https://yq.aliyun.com/ask/105482java中怎么判断两个字符相等 https://yq.aliyun.com/ask/106215java中怎么判断今天是周几 https://yq.aliyun.com/ask/110053java中怎么开启一个线程 https://yq.aliyun.com/ask/111867java中怎么接收键盘输入 https://yq.aliyun.com/ask/103877java中怎么蒋字符串翻转 https://yq.aliyun.com/ask/106516java中怎么将字符串分解 https://yq.aliyun.com/ask/111423java中怎么继承两个 https://yq.aliyun.com/ask/104483java中怎么获取线程id https://yq.aliyun.com/ask/110041java中怎么获取随机数 https://yq.aliyun.com/ask/109699java中怎么给类加注释快捷键 https://yq.aliyun.com/ask/102953java中怎么给int空值 https://yq.aliyun.com/ask/112219java中怎么封装map https://yq.aliyun.com/ask/109479java中怎么代表e https://yq.aliyun.com/ask/111959java中怎么打印字符串 https://yq.aliyun.com/ask/102616java中怎么打印日志信息 https://yq.aliyun.com/ask/111358java中怎么打印日志 https://yq.aliyun.com/ask/104994java中怎么创建目录 https://yq.aliyun.com/ask/104163java中怎么创建map对象 https://yq.aliyun.com/ask/106591java中怎么表示平方 https://yq.aliyun.com/ask/105457java中怎么表示阶乘 https://yq.aliyun.com/ask/109107java中怎么表达素数 https://yq.aliyun.com/ask/109693java中怎么遍历字符串 https://yq.aliyun.com/ask/108119java中怎么把数组清空 https://yq.aliyun.com/ask/102761java中怎么把数组翻转 https://yq.aliyun.com/ask/111597java中运算中的变量是不是变量本身? https://yq.aliyun.com/ask/6688java中源文件是什么意思 https://yq.aliyun.com/ask/104322java中遇到的问题怎么解决方法 https://yq.aliyun.com/ask/104326java中域是什么意思 https://yq.aliyun.com/ask/103981java中用什么表示任意字符串一"gf"为结尾的任意字符串 https://yq.aliyun.com/ask/108812java中引用哪些类库怎么知道 https://yq.aliyun.com/ask/105656java中异或符号怎么打 https://yq.aliyun.com/ask/102861java中异常包括什么 https://yq.aliyun.com/ask/107860java中一个对象是不是就是一个线程? https://yq.aliyun.com/ask/24048java中序列化是什么 https://yq.aliyun.com/ask/112316java中先进先出是什么 https://yq.aliyun.com/ask/105437java中唯一约束是什么 https://yq.aliyun.com/ask/110332java中为什么要加空格 https://yq.aliyun.com/ask/104412java中为什么要定义接口 https://yq.aliyun.com/ask/108881java中为什么要打jar包 https://yq.aliyun.com/ask/106708java中为什么stack或stack会出错 https://yq.aliyun.com/ask/107330java中数组空怎么表示 https://yq.aliyun.com/ask/105647java中输出语句怎么写 https://yq.aliyun.com/ask/111437java中时间用什么类型数据 https://yq.aliyun.com/ask/104473java中什么意思是什么意思是什么意思是什么 https://yq.aliyun.com/ask/111019java中什么意思是什么意思 https://yq.aliyun.com/ask/110680java中什么是注释 https://yq.aliyun.com/ask/102715java中什么是类的定义 https://yq.aliyun.com/ask/103869java中什么是绝对路径 https://yq.aliyun.com/ask/102676java中什么是非子类 https://yq.aliyun.com/ask/111978java中什么是方法体 https://yq.aliyun.com/ask/105771java中什么是方法成员 https://yq.aliyun.com/ask/105781java中什么是反射机制 https://yq.aliyun.com/ask/103934java中什么事键值对 https://yq.aliyun.com/ask/111595java中什么时候用数组 https://yq.aliyun.com/ask/107102java中什么时候用public什么时候用private https://yq.aliyun.com/ask/103786java中什么时候用new https://yq.aliyun.com/ask/110791java中什么可以访问类的私有成员 https://yq.aliyun.com/ask/111399java中什么叫做重载 https://yq.aliyun.com/ask/111353java中什么叫泛化 https://yq.aliyun.com/ask/108905java中什么叫api https://yq.aliyun.com/ask/105394java中什么会到内存中 https://yq.aliyun.com/ask/109751java中什么岗位发展好 https://yq.aliyun.com/ask/103106java中如何在表格中添加组件 https://yq.aliyun.com/ask/20588java中如何用反射创建一个对象 https://yq.aliyun.com/ask/17278JAVA中如何判断一个文件是否存在,如果不存在则创建它? https://yq.aliyun.com/ask/12889java中容器是什么 https://yq.aliyun.com/ask/103798java中空字符串可以用indexOf? https://yq.aliyun.com/ask/25870java中克隆是什么意思 https://yq.aliyun.com/ask/103092java中开根怎么表示什么 https://yq.aliyun.com/ask/104265java中计算怎么高效 https://yq.aliyun.com/ask/102726java中回滚是什么意思 https://yq.aliyun.com/ask/110301java中换行怎么写 https://yq.aliyun.com/ask/111153java中函数怎么写的 https://yq.aliyun.com/ask/104261JAVA中函数的参数值的传递问题 https://yq.aliyun.com/ask/25914java中哈希值干什么用 https://yq.aliyun.com/ask/103242Java中关于String输出 https://yq.aliyun.com/ask/12935java中构造方法有什么用 https://yq.aliyun.com/ask/109595java中分号是什么意思 https://yq.aliyun.com/ask/107073java中方法怎么调用方法调用方法调用方法 https://yq.aliyun.com/ask/111015java中方法 体是什么 https://yq.aliyun.com/ask/106569java中方法 super() 有什么用 https://yq.aliyun.com/ask/106509java中反射是什么意思 https://yq.aliyun.com/ask/105433java中断言是什么意思 https://yq.aliyun.com/ask/112444Java中定义数组必须要指定长度吗为什么? https://yq.aliyun.com/ask/16652java中底层是什么 https://yq.aliyun.com/ask/104070java中的异常是指什么 https://yq.aliyun.com/ask/111574java中的一个随机函数 https://yq.aliyun.com/ask/6677java中的数组怎么定义数组的长度 https://yq.aliyun.com/ask/103835java中的事物是什么意思 https://yq.aliyun.com/ask/108130java中的事务是什么 https://yq.aliyun.com/ask/105604java中的函数 和方法的区别是什么意思 https://yq.aliyun.com/ask/109072java中的方法名怎么定义 https://yq.aliyun.com/ask/108791java中的方法和函数的区别是什么意思 https://yq.aliyun.com/ask/104582java中的对象怎么理解 https://yq.aliyun.com/ask/111660java中的的nextLine怎么用? https://yq.aliyun.com/ask/6717java中的包是什么意思 https://yq.aliyun.com/ask/102540java中的π怎么表示 https://yq.aliyun.com/ask/108491java中的vo 代表什么 https://yq.aliyun.com/ask/104277java中的super 是什么 https://yq.aliyun.com/ask/108872java中的ssh框架是什么 https://yq.aliyun.com/ask/103937java中的servlet是什么 https://yq.aliyun.com/ask/104989java中的mvc模式是什么 https://yq.aliyun.com/ask/108955java中的list怎么清空数据 https://yq.aliyun.com/ask/105340java中的list和set有什么区别 https://yq.aliyun.com/ask/105174java中的io类的作用是什么 https://yq.aliyun.com/ask/108499java中的aop是什么意思 https://yq.aliyun.com/ask/108783java中的?符号是什么 https://yq.aliyun.com/ask/106940java中导入的io是什么意思 https://yq.aliyun.com/ask/109653java中次幂怎么表示 https://yq.aliyun.com/ask/106364java中除法怎么写 https://yq.aliyun.com/ask/106081java中抽象方法用什么定义 https://yq.aliyun.com/ask/110306java中抽象方法是什么 https://yq.aliyun.com/ask/104441java中乘号怎么写 https://yq.aliyun.com/ask/107711java中不能创建fileoutptstream 类型的对象 https://yq.aliyun.com/ask/24746java中表示根号怎么写 https://yq.aliyun.com/ask/102732java中变量怎么定义 https://yq.aliyun.com/ask/105424java中vo是什么意思 https://yq.aliyun.com/ask/108490java中this什么用 https://yq.aliyun.com/ask/106281java中tab键怎么表示 https://yq.aliyun.com/ask/109892java中switch怎么用 https://yq.aliyun.com/ask/107536java中str什么意思 https://yq.aliyun.com/ask/112122java中struts2干什么用的 https://yq.aliyun.com/ask/107125java中string类转成timestamp类 https://yq.aliyun.com/ask/24016java中stringbuilder是什么 https://yq.aliyun.com/ask/103288java中static什么意思 https://yq.aliyun.com/ask/103117java中sql的分页查询语句怎么写 https://yq.aliyun.com/ask/106570java中shiro是什么意思 https://yq.aliyun.com/ask/110121java中Set有什么用 https://yq.aliyun.com/ask/104465java中session什么意思 https://yq.aliyun.com/ask/105765java中regex是什么意思 https://yq.aliyun.com/ask/106017java中random的seed什么意思 https://yq.aliyun.com/ask/106581java中public怎么用 https://yq.aliyun.com/ask/107771java中offset什么意思 https://yq.aliyun.com/ask/106932java中object转换成String类型问题 https://yq.aliyun.com/ask/25820java中object是什么 https://yq.aliyun.com/ask/102646java中npe问题是什么 https://yq.aliyun.com/ask/104913java中node什么意思 https://yq.aliyun.com/ask/106713java中next是什么意思 https://yq.aliyun.com/ask/111348java中mybatis是什么意思 https://yq.aliyun.com/ask/111750java中method是什么 https://yq.aliyun.com/ask/104761java中map之间怎么覆盖 https://yq.aliyun.com/ask/104824java中long怎么使用 https://yq.aliyun.com/ask/106558java中log是什么 https://yq.aliyun.com/ask/103972java中jit是什么意思 https://yq.aliyun.com/ask/106045java中io与nio是什么 https://yq.aliyun.com/ask/108120java中int和Integer有什么区别,哪个在公司中比较常用? https://yq.aliyun.com/ask/17868java中init什么意思 https://yq.aliyun.com/ask/105421java中import后面的java是什么意思 https://yq.aliyun.com/ask/109827java中i 什么意思是什么 https://yq.aliyun.com/ask/109148Java中HashMap关键字transient的疑惑 https://yq.aliyun.com/ask/8587java中get和set区别是什么 https://yq.aliyun.com/ask/107138java中foreach语句如何获取数组下标 https://yq.aliyun.com/ask/10247java中exp什么意思 https://yq.aliyun.com/ask/107523java中date什么意思 https://yq.aliyun.com/ask/111105java中count函数怎么用 https://yq.aliyun.com/ask/111316java中context是什么 https://yq.aliyun.com/ask/109467java中byte怎么赋值 https://yq.aliyun.com/ask/111976java中boolean flag=false什么意思 https://yq.aliyun.com/ask/110284java中aop是什么 https://yq.aliyun.com/ask/111341java中add()是什么意思 https://yq.aliyun.com/ask/111286java中500的错误是什么 https://yq.aliyun.com/ask/108138java中16进制怎么表示 https://yq.aliyun.com/ask/109942java中100g的文件1g的内存怎么实现对ip的去重统计 https://yq.aliyun.com/ask/108086java中0x0f什么意思 https://yq.aliyun.com/ask/105992java中==什么意思 https://yq.aliyun.com/ask/103005java中t是什么意思 https://yq.aliyun.com/ask/103087java中https://yq.aliyun.com/ask/102562java中@什么意思 https://yq.aliyun.com/ask/105170java中&是什么意思 https://yq.aliyun.com/ask/105633java中&是什么意思 https://yq.aliyun.com/ask/109720java中%什么意思 https://yq.aliyun.com/ask/106191java中!什么意思 https://yq.aliyun.com/ask/110799java中 使用while(Scanner.hasNextIn())出现死循环 https://yq.aliyun.com/ask/20503java中 的意思是什么意思是什么意思是什么意思 https://yq.aliyun.com/ask/102785java中 void指明什么方法 https://yq.aliyun.com/ask/109429Java中 System.out.println(count++)输出结果没有自增 https://yq.aliyun.com/ask/17212java中 怎么打印出来 https://yq.aliyun.com/ask/108882java支持什么继承 https://yq.aliyun.com/ask/103059java之父怎么 https://yq.aliyun.com/ask/103271java长度用什么显示出来 https://yq.aliyun.com/ask/102658java栈是由什么管理 https://yq.aliyun.com/ask/106709java栈深度是什么意思 https://yq.aliyun.com/ask/107843java占用1g怎么解决 https://yq.aliyun.com/ask/109716java怎么做图形化界面 https://yq.aliyun.com/ask/103795java怎么做权限登录 https://yq.aliyun.com/ask/106704java怎么做接口测试 https://yq.aliyun.com/ask/111390java怎么总说工资低 https://yq.aliyun.com/ask/107219java怎么自己解析json https://yq.aliyun.com/ask/110046java怎么自动排版 https://yq.aliyun.com/ask/105731java怎么重命名类 https://yq.aliyun.com/ask/107774java怎么执行cmd命令 https://yq.aliyun.com/ask/103310java怎么在类中写类 https://yq.aliyun.com/ask/110766java怎么运行程序 https://yq.aliyun.com/ask/105430java怎么运行sql脚本文件 https://yq.aliyun.com/ask/107120java怎么与sql连接数据库 https://yq.aliyun.com/ask/109062java怎么用自动转json https://yq.aliyun.com/ask/105831java怎么用断点 https://yq.aliyun.com/ask/102951java怎么用weka https://yq.aliyun.com/ask/110348java怎么用url读取图片 https://yq.aliyun.com/ask/106639java怎么用txt读取数据 https://yq.aliyun.com/ask/109659java怎么用gc https://yq.aliyun.com/ask/103872java怎么用dos命令 https://yq.aliyun.com/ask/110056java怎么引用包 https://yq.aliyun.com/ask/107545java怎么引入lang包 https://yq.aliyun.com/ask/106237java怎么样去除逗号 https://yq.aliyun.com/ask/111861java怎么样默认值 https://yq.aliyun.com/ask/109448java怎么样连接数据库 https://yq.aliyun.com/ask/109648java怎么样导出word文档 https://yq.aliyun.com/ask/104794java怎么研究api https://yq.aliyun.com/ask/103629java怎么写正则表达式 https://yq.aliyun.com/ask/109357java怎么写网站 https://yq.aliyun.com/ask/103234java怎么写入文件 https://yq.aliyun.com/ask/106454java怎么写两个数相加 https://yq.aliyun.com/ask/102517java怎么写json字符串 https://yq.aliyun.com/ask/107768java怎么写helloword https://yq.aliyun.com/ask/111340java怎么显示控制台输出 https://yq.aliyun.com/ask/105434java怎么显示此时的时间 https://yq.aliyun.com/ask/108922java怎么往数据库存值 https://yq.aliyun.com/ask/106354java怎么停止运行 https://yq.aliyun.com/ask/102511java怎么跳出while循环 https://yq.aliyun.com/ask/112329java怎么调用子类的方法 https://yq.aliyun.com/ask/106660java怎么调用系统时间 https://yq.aliyun.com/ask/108531java怎么调用构造函数 https://yq.aliyun.com/ask/106304java怎么调用方法 https://yq.aliyun.com/ask/109950java怎么调用地图api接口 https://yq.aliyun.com/ask/105444java怎么添加线程 https://yq.aliyun.com/ask/112123java怎么随机生成整数 https://yq.aliyun.com/ask/110712java怎么输入字符数组 https://yq.aliyun.com/ask/103275java怎么输入字符char https://yq.aliyun.com/ask/109761java怎么输入整数 https://yq.aliyun.com/ask/111956java怎么输入一个整数 https://yq.aliyun.com/ask/103289java怎么输入数据代码 https://yq.aliyun.com/ask/106716java怎么输入多行数据 https://yq.aliyun.com/ask/105472java怎么输入double https://yq.aliyun.com/ask/103965java怎么输出字符窜 https://yq.aliyun.com/ask/102516java怎么使用正则 https://yq.aliyun.com/ask/104691java怎么使用tomcat https://yq.aliyun.com/ask/102954java怎么实现上传文件 https://yq.aliyun.com/ask/110193java怎么实现批处理 https://yq.aliyun.com/ask/106236java怎么实现换行 https://yq.aliyun.com/ask/105820java怎么实现购物车 https://yq.aliyun.com/ask/104414java怎么实现多继承 https://yq.aliyun.com/ask/106551java怎么实现短信验证码 https://yq.aliyun.com/ask/103284java怎么实现地址传递 https://yq.aliyun.com/ask/110618java怎么实现打印发票 https://yq.aliyun.com/ask/106635java怎么生成随机6位数 https://yq.aliyun.com/ask/102821java怎么生成class文件 https://yq.aliyun.com/ask/102612java怎么深入 https://yq.aliyun.com/ask/111769java怎么申明一个对象 https://yq.aliyun.com/ask/111596java怎么删除物理空间文件 https://yq.aliyun.com/ask/109706java怎么删除所有断点 https://yq.aliyun.com/ask/104781java怎么让程序暂停 https://yq.aliyun.com/ask/107765java怎么去掉斜杠 https://yq.aliyun.com/ask/111013java怎么取数组里的值 https://yq.aliyun.com/ask/105772java怎么区分变量和方法 https://yq.aliyun.com/ask/108772java怎么求最大和最小 https://yq.aliyun.com/ask/110974java怎么求余数 https://yq.aliyun.com/ask/109109java怎么清空list数据 https://yq.aliyun.com/ask/106435java怎么清空byte数组 https://yq.aliyun.com/ask/108477java怎么拼接双引号 https://yq.aliyun.com/ask/110730java怎么匹配abab https://yq.aliyun.com/ask/103790java怎么配置环境 https://yq.aliyun.com/ask/103781java怎么判断字符串为空 https://yq.aliyun.com/ask/111295java怎么判断值的类型的 https://yq.aliyun.com/ask/106814java怎么判断异常 https://yq.aliyun.com/ask/104075java怎么判断一个质数 https://yq.aliyun.com/ask/103020java怎么判断一个类的类型 https://yq.aliyun.com/ask/110095java怎么判断输入的是否是数字 https://yq.aliyun.com/ask/106288java怎么判断是数字和字母 https://yq.aliyun.com/ask/111369java怎么判断是否重复的数据 https://yq.aliyun.com/ask/111668java怎么排列数组 https://yq.aliyun.com/ask/110796java怎么弄支付宝沙箱测试 https://yq.aliyun.com/ask/106627java怎么弄无限循环 https://yq.aliyun.com/ask/109210java怎么能看到源码 https://yq.aliyun.com/ask/111627java怎么链接mysql https://yq.aliyun.com/ask/102841java怎么连接字符串 https://yq.aliyun.com/ask/104057java怎么连接本地数据库 https://yq.aliyun.com/ask/103939java怎么连接url https://yq.aliyun.com/ask/104266java怎么连接sqlserver https://yq.aliyun.com/ask/104486java怎么连接sql server 2008 https://yq.aliyun.com/ask/110337java怎么控制单片机 https://yq.aliyun.com/ask/106416java怎么开启线程池 https://yq.aliyun.com/ask/106566java怎么开发数据接口 https://yq.aliyun.com/ask/106458java怎么开发安卓 https://yq.aliyun.com/ask/106826java怎么解决哈希冲突 https://yq.aliyun.com/ask/102533java怎么结束while https://yq.aliyun.com/ask/110964java怎么接收用户输入 https://yq.aliyun.com/ask/103570java怎么接收jsonlist https://yq.aliyun.com/ask/110330java怎么将密码加密 https://yq.aliyun.com/ask/106945java怎么将两数组去重 https://yq.aliyun.com/ask/104764java怎么将集合以字符串 https://yq.aliyun.com/ask/102744java怎么将变量注入到方法 https://yq.aliyun.com/ask/104270java怎么建立一个类 https://yq.aliyun.com/ask/102546java怎么建立副本 https://yq.aliyun.com/ask/104772java怎么建抽象类 https://yq.aliyun.com/ask/106307java怎么建测试类 https://yq.aliyun.com/ask/111579java怎么监听输入的东西 https://yq.aliyun.com/ask/106628java怎么监听个路径 https://yq.aliyun.com/ask/106711java怎么加一个日志功能 https://yq.aliyun.com/ask/102750java怎么继承多个类 https://yq.aliyun.com/ask/103618java怎么继承抽象类 https://yq.aliyun.com/ask/111735java怎么计算字符串的长度 https://yq.aliyun.com/ask/111739java怎么获取字体颜色 https://yq.aliyun.com/ask/104071java怎么获取文件目录 https://yq.aliyun.com/ask/106705java怎么获取数组的值 https://yq.aliyun.com/ask/104476java怎么获取摄像头权限 https://yq.aliyun.com/ask/104778java怎么获取毫秒时间 https://yq.aliyun.com/ask/111306java怎么获取服务器时间 https://yq.aliyun.com/ask/109525java怎么获取到token https://yq.aliyun.com/ask/103938java怎么获取当前线程 https://yq.aliyun.com/ask/102779java怎么获取当前ip https://yq.aliyun.com/ask/103960java怎么获得当前时间 https://yq.aliyun.com/ask/104330java怎么绘制图形 https://yq.aliyun.com/ask/106617java怎么画个长方形 https://yq.aliyun.com/ask/109144java怎么和硬件通信 https://yq.aliyun.com/ask/111106java怎么给类重命名 https://yq.aliyun.com/ask/109946java怎么格式化字符串 https://yq.aliyun.com/ask/104495java怎么改变图形大小 https://yq.aliyun.com/ask/103287java怎么改变浏览器url https://yq.aliyun.com/ask/102725java怎么封装json数据类型 https://yq.aliyun.com/ask/110189java怎么分割文档中字符串 https://yq.aliyun.com/ask/7132java怎么访问静态变量 https://yq.aliyun.com/ask/104063java怎么防止内存泄露 https://yq.aliyun.com/ask/103012java怎么反向输出数字 https://yq.aliyun.com/ask/112378java怎么发送post请求 https://yq.aliyun.com/ask/103279java怎么多行输入文本框的值 https://yq.aliyun.com/ask/109822java怎么对比时间是否相同 https://yq.aliyun.com/ask/108290java怎么读取图片内容 https://yq.aliyun.com/ask/104798java怎么读取缓存字典 https://yq.aliyun.com/ask/104271java怎么读取excel https://yq.aliyun.com/ask/109592java怎么定义一个接口 https://yq.aliyun.com/ask/105979java怎么定义一个常量 https://yq.aliyun.com/ask/105616java怎么定义类和方法有哪些 https://yq.aliyun.com/ask/105658java怎么定义静态类 https://yq.aliyun.com/ask/109195java怎么定义long https://yq.aliyun.com/ask/107482java怎么定义json字符串 https://yq.aliyun.com/ask/106918java怎么得到当前星期几 https://yq.aliyun.com/ask/106674java怎么导入math类 https://yq.aliyun.com/ask/103085java怎么打印集合 https://yq.aliyun.com/ask/107699java怎么打开一个文件夹 https://yq.aliyun.com/ask/111366java怎么从键盘获取字符 https://yq.aliyun.com/ask/110962java怎么创建一个集合容器 https://yq.aliyun.com/ask/106331java怎么创建方法 https://yq.aliyun.com/ask/110960java怎么创建抽象类 https://yq.aliyun.com/ask/103218java怎么创建list集合 https://yq.aliyun.com/ask/107542java怎么创建listhttps://yq.aliyun.com/ask/106978java怎么传照片 https://yq.aliyun.com/ask/108665java怎么传空指针 https://yq.aliyun.com/ask/111751java怎么处理json数据 https://yq.aliyun.com/ask/111581java怎么初始化数组 https://yq.aliyun.com/ask/105646java怎么查源代码 https://yq.aliyun.com/ask/103944java怎么查内存泄漏 https://yq.aliyun.com/ask/105939java怎么查看教程 https://yq.aliyun.com/ask/104072java怎么查看txt https://yq.aliyun.com/ask/106706java怎么测试内存泄露 https://yq.aliyun.com/ask/111364java怎么测试接口测试 https://yq.aliyun.com/ask/102784java怎么表示10^2 https://yq.aliyun.com/ask/111022java怎么变量赋值为空 https://yq.aliyun.com/ask/111583java怎么编写一个线程 https://yq.aliyun.com/ask/111378java怎么编写数组 https://yq.aliyun.com/ask/112137java怎么编写阶乘 https://yq.aliyun.com/ask/110967java怎么编程的 https://yq.aliyun.com/ask/107512java怎么比较两个中文 https://yq.aliyun.com/ask/108808java怎么保留小数点后一位 https://yq.aliyun.com/ask/109473java怎么把字符串转换为数字 https://yq.aliyun.com/ask/108140java怎么把随机数固定 https://yq.aliyun.com/ask/109468java怎么把数字转化为字符串 https://yq.aliyun.com/ask/111985java怎么把数字转成字符串 https://yq.aliyun.com/ask/106302java怎么把数字变成字符串 https://yq.aliyun.com/ask/109150java怎么把日期格式成2016-09-12 https://yq.aliyun.com/ask/103612java怎么把包导入 https://yq.aliyun.com/ask/103726java怎么new一个类 https://yq.aliyun.com/ask/110983java运行环境什么意思 https://yq.aliyun.com/ask/105943java源码怎么使用 https://yq.aliyun.com/ask/110979java语言怎么样 https://yq.aliyun.com/ask/111244java语言怎么读 https://yq.aliyun.com/ask/104882java语言在变量前面加上static和不加static有什么区别 https://yq.aliyun.com/ask/110477java语言用什么编程软件 https://yq.aliyun.com/ask/108225java语言是用什么语言开发的 https://yq.aliyun.com/ask/112286java语言是一种什么语言 https://yq.aliyun.com/ask/112315java语言能开发什么 https://yq.aliyun.com/ask/111749java语言可以干什么的 https://yq.aliyun.com/ask/106366java语言大型网站买什么数据库好 https://yq.aliyun.com/ask/111820java语言采用什么编码 https://yq.aliyun.com/ask/103119java语句中感叹号什么意思 https://yq.aliyun.com/ask/106632java与c的区别是什么意思 https://yq.aliyun.com/ask/104404java有什么用吗 https://yq.aliyun.com/ask/105629java有什么书籍推荐 https://yq.aliyun.com/ask/111398java有什么框架 https://yq.aliyun.com/ask/110300java有什么好的书籍 https://yq.aliyun.com/ask/108470java游戏怎么编写的 https://yq.aliyun.com/ask/109115java用什么字体 https://yq.aliyun.com/ask/111578java用什么书比较好 https://yq.aliyun.com/ask/103097java用什么软件写 https://yq.aliyun.com/ask/111667java用什么编程软件有哪些 https://yq.aliyun.com/ask/107992java用可以什么编辑软件 https://yq.aliyun.com/ask/105626java用可以什么编辑器 https://yq.aliyun.com/ask/107124java音标怎么读 https://yq.aliyun.com/ask/102793java异常捕获什么意思 https://yq.aliyun.com/ask/107518java一维数组怎么求和 https://yq.aliyun.com/ask/103878java一年面试会问什么问题 https://yq.aliyun.com/ask/108782java一般用什么字体大小 https://yq.aliyun.com/ask/108773java一般用什么写日志 https://yq.aliyun.com/ask/106677java循环一般包括什么 https://yq.aliyun.com/ask/105653java需要装什么软件 https://yq.aliyun.com/ask/109823java需要掌握什么 https://yq.aliyun.com/ask/103123java虚拟机是用什么开发的 https://yq.aliyun.com/ask/103862java写什么作用 https://yq.aliyun.com/ask/103866java消息机制是什么意思 https://yq.aliyun.com/ask/106042java项目怎么调用微信接口 https://yq.aliyun.com/ask/106314java项目怎么部署到服务器上 https://yq.aliyun.com/ask/107779java项目怎么部署到tomcat https://yq.aliyun.com/ask/111109java项目遇到的问题怎么解决 https://yq.aliyun.com/ask/107092java项目发包怎么发 https://yq.aliyun.com/ask/104467java项目的事务怎么处理 https://yq.aliyun.com/ask/103572java线程怎么断点 https://yq.aliyun.com/ask/110764java线程堆栈 怎么查看死锁 https://yq.aliyun.com/ask/103876java显示错误怎么解决 https://yq.aliyun.com/ask/110157java下什么软件 https://yq.aliyun.com/ask/103050java析构函数 是什么 https://yq.aliyun.com/ask/106459java文件字节码怎么生成 https://yq.aliyun.com/ask/102786java文件中的 汉字乱码怎么办 https://yq.aliyun.com/ask/105177java文件乱码怎么解决 https://yq.aliyun.com/ask/106356java文件编译后额外生成的$1.class是怎么一回事 https://yq.aliyun.com/ask/104533java位异或怎么打出来 https://yq.aliyun.com/ask/102542java为什么又火了 https://yq.aliyun.com/ask/110987java为什么用单例模式 https://yq.aliyun.com/ask/111741java为什么要有多态 https://yq.aliyun.com/ask/106044java为什么要使用接口 https://yq.aliyun.com/ask/105642java为什么要设置环境变量 https://yq.aliyun.com/ask/109470java为什么要区分数据类型 https://yq.aliyun.com/ask/109469java为什么效率低 https://yq.aliyun.com/ask/112140java为什么那么火 2016 https://yq.aliyun.com/ask/109454java为什么那么多人用 https://yq.aliyun.com/ask/107720java为什么面向接口编程 https://yq.aliyun.com/ask/112240java为什么打包好的.exe文件在电脑上可以直接运行 https://yq.aliyun.com/ask/104564java为什么除法不能算 https://yq.aliyun.com/ask/103797java微课是什么 https://yq.aliyun.com/ask/109817java微服务什么意思 https://yq.aliyun.com/ask/109351java网页怎么加一个按钮 https://yq.aliyun.com/ask/106720java网络协议是什么 https://yq.aliyun.com/ask/107481java外包项目怎么分配 https://yq.aliyun.com/ask/110344java退出程序用什么 https://yq.aliyun.com/ask/108102java图形界面怎么换行 https://yq.aliyun.com/ask/104077java通过请求头如何得到文件类型后缀 https://yq.aliyun.com/ask/16576java随机字母怎么生成器 https://yq.aliyun.com/ask/104480java死循环怎么设计 https://yq.aliyun.com/ask/107535java双引号作用是什么意思 https://yq.aliyun.com/ask/107662java数组怎么算总和 https://yq.aliyun.com/ask/112300java数组怎么去重 https://yq.aliyun.com/ask/105075java数组的长度怎么获取 https://yq.aliyun.com/ask/103327java数组大小怎么获取 https://yq.aliyun.com/ask/111996java数字代码怎么写 https://yq.aliyun.com/ask/106710java输入文件是乱码怎么办 https://yq.aliyun.com/ask/107971java售前岗位怎么样 https://yq.aliyun.com/ask/103634java守护线程有什么作用 https://yq.aliyun.com/ask/104215java手机怎么解压zip文件 https://yq.aliyun.com/ask/106620java适合写什么程序员 https://yq.aliyun.com/ask/112107java是怎么诞生的 https://yq.aliyun.com/ask/110709java是使用什么数据库 https://yq.aliyun.com/ask/104374java事务怎么实现 https://yq.aliyun.com/ask/109678java实体类中日期使用什么类型 https://yq.aliyun.com/ask/107359java时间戳是什么类型 https://yq.aliyun.com/ask/109600java声明包有什么用 https://yq.aliyun.com/ask/111690java什么是组件 https://yq.aliyun.com/ask/103782java什么是文件摘要 https://yq.aliyun.com/ask/111110java什么是冒泡查询 https://yq.aliyun.com/ask/104262java什么是静态常量 https://yq.aliyun.com/ask/106719java什么是函数? https://yq.aliyun.com/ask/103794java什么是构造重载 https://yq.aliyun.com/ask/103622java什么是构造器 https://yq.aliyun.com/ask/108481java什么是方法引用 https://yq.aliyun.com/ask/106043java什么是二重循环 https://yq.aliyun.com/ask/109464java什么是对象的引用 https://yq.aliyun.com/ask/112130java什么是短路 https://yq.aliyun.com/ask/105460java什么是标准输入流和标准输出流? https://yq.aliyun.com/ask/110963java什么是orm https://yq.aliyun.com/ask/105025java什么是file https://yq.aliyun.com/ask/106474java什么时候用双等于1 https://yq.aliyun.com/ask/105784java什么时候用单实例化 https://yq.aliyun.com/ask/108399java什么时候用import https://yq.aliyun.com/ask/106428java什么时候需要实例化一个对象 https://yq.aliyun.com/ask/106463java什么时候适合跳槽 https://yq.aliyun.com/ask/111974java什么时候记录日志 https://yq.aliyun.com/ask/104405java什么时候诞生的 https://yq.aliyun.com/ask/112336java什么软件编写 https://yq.aliyun.com/ask/104400java什么情况用强制退出 https://yq.aliyun.com/ask/102723java什么情况下序列化 https://yq.aliyun.com/ask/103402java什么教材 https://yq.aliyun.com/ask/104274java什么叫死锁 https://yq.aliyun.com/ask/107539java什么叫流 https://yq.aliyun.com/ask/112115java什么叫递归 https://yq.aliyun.com/ask/106218java什么电子书 https://yq.aliyun.com/ask/102729java三年什么水平 https://yq.aliyun.com/ask/110994java软件工程师就业前景怎么样 https://yq.aliyun.com/ask/103094java如何做无符号乘法和除法 https://yq.aliyun.com/ask/7425java如何在在timer里传递全局变量? https://yq.aliyun.com/ask/12103java如何消除繁琐的if else 语句? https://yq.aliyun.com/ask/9333java如何实现单线程任务? https://yq.aliyun.com/ask/9591java如何实现闭包? https://yq.aliyun.com/ask/9339Java如何从这串字符串中单独取出uuid? https://yq.aliyun.com/ask/12589java容器里可以放什么意思 https://yq.aliyun.com/ask/105438java日期怎么加一天 https://yq.aliyun.com/ask/102827java日期格式如何转换 https://yq.aliyun.com/ask/12938java热部署有什么用 https://yq.aliyun.com/ask/104229java热部署 是什么意思 https://yq.aliyun.com/ask/103278java全局变量怎么定义 https://yq.aliyun.com/ask/107850java求余数怎么写 https://yq.aliyun.com/ask/106362java钱用什么类型 https://yq.aliyun.com/ask/107122java前期需要什么系统 https://yq.aliyun.com/ask/112406java前端需要考什么证 https://yq.aliyun.com/ask/104796java前端和后端怎么交互 https://yq.aliyun.com/ask/111756java企业框架要怎么搭 https://yq.aliyun.com/ask/111312java平方代码怎么写 https://yq.aliyun.com/ask/105637java培训完简历怎么做 https://yq.aliyun.com/ask/111011java培训班出来怎么样 https://yq.aliyun.com/ask/108894java抛出异常怎么处理 https://yq.aliyun.com/ask/105446java判断字符串数组中是否存在某个值arrays类有这个方法吗 https://yq.aliyun.com/ask/7868JAVA排序问题求若干个数的数组中第k个最大值 https://yq.aliyun.com/ask/20558java能做什么项目 https://yq.aliyun.com/ask/103262java能用什么浏览器下载 https://yq.aliyun.com/ask/111755java能写什么软件 https://yq.aliyun.com/ask/107817java能开发出什么软件 https://yq.aliyun.com/ask/111592java内存溢出 是什么异常 https://yq.aliyun.com/ask/102748java内部类有什么用 https://yq.aliyun.com/ask/112290java南京怎么样 https://yq.aliyun.com/ask/107807java目前的版本是什么意思 https://yq.aliyun.com/ask/109035java默认的是什么编码 https://yq.aliyun.com/ask/112228java默认包是什么 https://yq.aliyun.com/ask/104048java面向什么对象 https://yq.aliyun.com/ask/104067java面向什么 https://yq.aliyun.com/ask/106136java面试注意什么 https://yq.aliyun.com/ask/110750java面试问我擅长什么 https://yq.aliyun.com/ask/109828java面试开发为什么要转测试? https://yq.aliyun.com/ask/111320java面试二面问些什么 https://yq.aliyun.com/ask/107803java面试不过怎么办 https://yq.aliyun.com/ask/110042java面试 jvm是什么意思 https://yq.aliyun.com/ask/109306java面试 jvm是什么 https://yq.aliyun.com/ask/109718java枚举有什么好处 https://yq.aliyun.com/ask/111957java枚举是做什么的 https://yq.aliyun.com/ask/111567java没有运行怎么办 https://yq.aliyun.com/ask/111384java两个等号是什么 https://yq.aliyun.com/ask/109756java连接数据库的一个项目怎么发布到没有安装数据库的机器上使用呢 https://yq.aliyun.com/ask/102781java里怎么取相反数 https://yq.aliyun.com/ask/108106java里怎么定义数组 https://yq.aliyun.com/ask/103096java里有引号怎么办 https://yq.aliyun.com/ask/108839java里小于号怎么写 https://yq.aliyun.com/ask/105448java里为什么没有委托 https://yq.aliyun.com/ask/111154java里什么快捷键自动导包 https://yq.aliyun.com/ask/107148Java里面重载和重写有什么区别啊? https://yq.aliyun.com/ask/7654java里面怎么定义数组 https://yq.aliyun.com/ask/109435java里面空怎么判断 https://yq.aliyun.com/ask/106477java里面的小于等于符号怎么打出来 https://yq.aliyun.com/ask/105479java里面jre是什么东西 https://yq.aliyun.com/ask/106168java里冒号是什么意思 https://yq.aliyun.com/ask/104474java里两个变量怎么相除 https://yq.aliyun.com/ask/111981java里对象是什么 https://yq.aliyun.com/ask/106559java里等于符号怎么打出来 https://yq.aliyun.com/ask/105660java里的构造器是什么 https://yq.aliyun.com/ask/107109java里的super是什么意思 https://yq.aliyun.com/ask/108689java里的static作用是什么意思 https://yq.aliyun.com/ask/103783java里的dao是什么意思 https://yq.aliyun.com/ask/107143java里的catch块是什么 https://yq.aliyun.com/ask/111101java里的Annotation注解的作用 https://yq.aliyun.com/ask/19173java里throws是什么 https://yq.aliyun.com/ask/107670java里operate什么意思 https://yq.aliyun.com/ask/104074java里object是什么 https://yq.aliyun.com/ask/103147java里f7健什么作用 https://yq.aliyun.com/ask/111586java类型转换问题求助 https://yq.aliyun.com/ask/16688java类写法是什么 https://yq.aliyun.com/ask/105795java类里为什么有main https://yq.aliyun.com/ask/105423java类和对象区别是什么意思 https://yq.aliyun.com/ask/109652java类对象方法是什么 https://yq.aliyun.com/ask/104416java垃圾回收怎么调用 https://yq.aliyun.com/ask/102727java框架怎么用 https://yq.aliyun.com/ask/102647java跨域怎么解决 https://yq.aliyun.com/ask/104776java跨域怎么访问web https://yq.aliyun.com/ask/104537java跨域问题怎么解决 https://yq.aliyun.com/ask/107574java跨平台是什么意思 https://yq.aliyun.com/ask/111503java跨平台的原理是什么 https://yq.aliyun.com/ask/105466java夸平台是什么意思 https://yq.aliyun.com/ask/103976java控制台为什么输出乱码 https://yq.aliyun.com/ask/111757java控制台输入怎么接收 https://yq.aliyun.com/ask/106629java空格怎么表示 https://yq.aliyun.com/ask/109893java空参怎么写 https://yq.aliyun.com/ask/105080java可以用在做什么 https://yq.aliyun.com/ask/104675java开源怎么赚钱 https://yq.aliyun.com/ask/110346java开发有什么证书吗 https://yq.aliyun.com/ask/111401java开发用什么系统 https://yq.aliyun.com/ask/106792java开发用什么ide https://yq.aliyun.com/ask/106578java开发需要什么工具 https://yq.aliyun.com/ask/110147
极客公益活动还在进行中,还有大量问题等待回复,邀请你来用知识帮助他人https://yq.aliyun.com/tags/type_ask-tagid_19795?spm=a2c4e.11153987.askr.6.1954503aiQlLFo社区还有Java新人必学课程,Java进阶学习全路线,可以更系统学习Java知识https://yq.aliyun.com/articles/598741