如何修改Sybase数据库sa密码

在UNIX及某些系统内不能启动Sybase Center,那么在这种情况下怎样修改sa密码呢,同时如果我们不需要密码时也可以使用该方法将sa密码置为空

解决方案:

$isql -Usa -P1222 -SSYBASE 

1>sp_configure "upgrade version" 

2>go 

#记录打印的版本号,我的系统版本好是11920 (sybase 11.9.2) 


1>sp_configure "upgrade version",492 

2>go 

#更改版本号为492 


1>sp_password '123456',NULL,sa 

2>go 

#修改密码将123456密码置为空 


1>sp_configure "upgrade version",11920 

2>go 

#更改版本号为原来的版本号 

使用一条SQL语句从一个切入点获取该切入点的全部相关信息

父子关系型纪录集或者树状关系数据记录集是我们在软件开发中一种较为常见的数据组织形式。例如办公系统中的组织架构,例如用户系统中的省份城市区域,例如电子商务网站中的产品分类,例如留言板系统中的留言回复关系,诸如此类。

对于这一类型的数据我们常常会使用主从表或者主从字段的方法来满足结构上的需求。

所谓主从表就是将各级数据分别存放在不同的数据表中(例如大类存放在一个数据表,小类存放在另一个数据表;又如省份存放一个数据表,城市存放在另一个数据表),但是这样有一个问题,就是数据有多少层就必须建立多少个数据表,这样不利于数据结构层次的扩展,比如电子商务网站中的产品,初期规划只有大类和小类,随着产品的增加却发现仅有大类和小类已经无法满足产品的分类需求,这时候会需要添加一个中类的概念,为了满足这个变化我们就需要新增一个中类的数据表,这样会造成较大的变更,所以我们说这种分表存放各级数据的设计有一定的局限性。而如果使用另外的一个解决办法-主从字段-则能够较好的解决这个问题,也就是说我们把省份和城市,产品的大类与小类,这些物理结构相同、逻辑结构不同的数据存放在同一个数据表中,以ID和ParentID两个字段来表明各条数据之间的逻辑关系。

几个常见set语句的应用举例

在大家写脚本的时候,我们常常用set语句在设置一些需要的格式规范。下面,列举了几个常见set语句的应用。
[code]

SQL> set echo on—————————————————设置运行命令是是否显示语句

SQL> set feedback on———————————————-设置显示“已选择XX行”

SQL> set colsep | —————————————————设置列与列之间的分割符号

SQL> set pagesize 10———————————————–设置每一页的行数

SQL> SET SERVEROUTPUT ON——————————-设置允许显示输出类似dbms_output.putline

SQL> set heading on————————————————设置显示列名

SQL> set timing on————————————————–设置显示“已用时间:XXXX”

SQL> set time on—————————————————–设置显示当前时间

SQL> set autotrace on———————————————–设置允许对执行的sql进行分析

00:38:28 SQL> set echo on

解困:通配符泛型的使用

在 Java 语言中,数组是协变的(因为一个 Integer 同时也是一个 Number,一个 Integer 数组同时也是一个 Number 数组),但是泛型不是这样的(List 并不等于 List)。人们会争论哪些选择是 “正确的”,哪些选择是 “错误的” — 当然,每种选择都各有优缺点 — 但有一点毫无疑问,存在两种使用差别很小的语义构造派生类型的类似机制,这将导致大量错误和误解。

有界通配符(一些有趣的 “? extends T” 通用类型说明符)是语言提供的一种工具,用来处理协变性缺乏 — 有界通配符允许类声明方法参数或返回值何时具有协变性(或相反,声明方法参数或返回值何时具有逆变性(contravariant))。虽然了解何时使用有界通配符是泛型较为复杂的方面,但是,使用有界通配符的压力通常都落在库作者的身上,而非库用户。最常见的有界通配符错误就是忘记使用它们,这就限制了类的使用,或是强制用户不得不重用现有的类。

SQL Server数据库查询优化方法总结

本文中,abigale代表查询字符串,ada代表数据表名,alice代表字段名。

技巧一:

问题类型:ACCESS数据库字段中含有日文片假名或其它不明字符时查询会提示内存溢出。

解决方法:修改查询语句

sql="select * from ada where alice like '%"&abigale&"%'"

改为

sql="select * from ada"
rs.filter = "alice like '%"&abigale&"%'"

如何正确地在WEB容器中获取持久化上下文

想写这篇文章,是因为看了网上相关的几篇文章,没有一篇能真正说清楚如何正确地在WEB容器中获取持久化上下文, 要么根本就不知道如何获取,要么存在极度大的性能问题,要么存在线程安全性的隐患.

在EJB容器,如果你愿意,由容器注入一个EntityManager后,你可以把一切交给容器管理.如果你愿意使用可扩展事务, 当然你已经了解如何管理EntityManager.规范在那儿定着,没有什么可多说的. 在Java SE环境下,没有容器能帮助你做任何事,一切都要由你纯手工创建,当然一切也由你负责管理,关闭,销毁.都是你的事,所以反而变得简单(是说获取持久化手段简单了,不是操作单了).

中国公民身份证号码校验程序

/**

     * roonten.practice.tools.identitycard\IdentityCard.java

     *

     * Copyright (c) 2008 patulous function toolkit for java, individual

     * All rights reserved.

     *

     * This toolkit all my items one is the last edition. All the tools in the toolkit are defining

     * some handy discreteness for me. So I can doing items easily. I hope you unfeignedly

     * for use it.

     */

     package roonten.practice.tools.identitycard;

     import java.util.Calendar;

Office漏洞导致访问特定网站执行任意代码

7月11日公布的office组件access快照ActiveX漏洞,可导致访问黑客精心设计的恶意网站时下载并执行任意代码。

漏洞涉及的office组件:

Snapshot Viewer for Microsoft Access
Microsoft Office Access 2000
Microsoft Office Access 2002
Microsoft Office Access 2003

漏洞的检测:

运行注册表编辑器,在HKEY_CLASSES_ROOT\CLSID下检查是否存在以下三个子键之一,如果发现任意一个子键存在,就证实存在该漏洞。

{F0E42D50-368C-11D0-AD81-00A0C90DC8D9}
{F0E42D60-368C-11D0-AD81-00A0C90DC8D9}
{F2175210-368C-11D0-AD81-00A0C90DC8D9}

漏洞的利用:

黑客利用该漏洞在特定网页植入木马,用户访问这些网站,会自动下载并执行木马。

漏洞的风险:

因office是安装量非常高的应用软件,缺省情况下,即使很多不用access,也会被安装该组件;

office组件的漏洞修补并不被大多数office用户所重视,往往不去修补;

盗版office用户还担心补丁会影响盗版软件的使用,而故意不去修补;

office用户升级产品版本的诉求并不强烈。

以上诸多原因造成该漏洞的影响将会比较持久,因此,该漏洞必将为黑客产业链中的网马制作者热衷采用。

目前微软尚未发布补丁

漏洞的修补:

1.关注微软相关补丁的发布,一旦升级,应该立即修补;

2.手动修改注册表相关键值;

将HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\ActiveX Compatibility下的

{F0E42D50-368C-11D0-AD81-00A0C90DC8D9}
{F0E42D60-368C-11D0-AD81-00A0C90DC8D9} 
{F2175210-368C-11D0-AD81-00A0C90DC8D9}

这三个键的"Compatibility Flags"值设置为0x0000

0400

3.使用金山清理专家的漏洞修复功能完成漏洞的检测和修补,请等待清理专家的应急升级。

字符串拆分具体方法

之前开发过一个拆分字符串的SQL函数,现在把它贴出来,与大家共勉学习。

该函数如下:

CREATE function [dbo].[StringSplit](@str nvarchar(max),@spliter nvarchar(10)) 
returns @tb table(ch nvarchar(256)) 
AS 
BEGIN 
DECLARE @Num int,@Pos int, @NextPos int 
SET @Num = 0 
SET @Pos = 1 
WHILE(@Pos <= LEN(@str)) 
BEGIN 
SELECT @NextPos = CHARINDEX(@spliter, @str, @Pos) 
IF (@NextPos = 0 OR @NextPos IS NULL) 
SELECT @NextPos = LEN(@str) + 1 
INSERT INTO @tb VALUES(RTRIM(LTRIM(SUBSTRING(@str, @Pos, @NextPos - @Pos)))) 
SELECT @Pos = @NextPos+1 
END 
return 
END 

在Java中实现DES算法

    import java.security.Key;
    import java.security.SecureRandom;
    import javax.crypto.Cipher;
    import javax.crypto.KeyGenerator;

    /**
     * 使用DES加密与解密,可对byte[],String类型进行加密与解密 密文可使用String,byte[]存储.
     * 方法: void getKey(String strKey)从strKey的字条生成一个Key
     * String getEncString(String strMing)对strMing进行加密,返回String密文 String
     * getDesString(String strMi)对strMin进行解密,返回String明文
     * byte[] getEncCode(byte[] byteS)byte[]型的加密 byte[] getDesCode(byte[]
     * byteD)byte[]型的解密
     */

    public class DesEncrypt {
        Key key;
        /**
         * 根据参数生成KEY
         *
         * @param strKey
         */

        public void getKey(String strKey) {
            try {
                KeyGenerator _generator = KeyGenerator.getInstance("DES");
                _generator.init(new SecureRandom(strKey.getBytes()));
                this.key = _generator.generateKey();
                _generator = null;
            } catch (Exception e) {
                e.printStackTrace();
            }
        } 

        /**
         * 加密String明文输入,String密文输出
          *
         * @param strMing
         * @return
         */

        public String getEncString(String strMing) {
            byte[] byteMi = null;
            byte[] byteMing = null;
            String strMi = "";
            try {
                return byte2hex(getEncCode(strMing.getBytes()));
                // byteMing = strMing.getBytes("UTF8");
                // byteMi = this.getEncCode(byteMing);
                // strMi = new String( byteMi,"UTF8");
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                byteMing = null;
                byteMi = null;
            }
            return strMi;
        }

        /**
         * 解密 以String密文输入,String明文输出
          *
         * @param strMi
         * @return
         */

        public String getDesString(String strMi) {
            byte[] byteMing = null;
            byte[] byteMi = null;
            String strMing = "";
            try {
                return new String(getDesCode(hex2byte(strMi.getBytes())));
                // byteMing = this.getDesCode(byteMi);
                // strMing = new String(byteMing,"UTF8");
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                byteMing = null;
                byteMi = null;
            }
            return strMing;
        }

        /**
         * 加密以byte[]明文输入,byte[]密文输出
          *
         * @param byteS
         * @return
         */

        private byte[] getEncCode(byte[] byteS) {
            byte[] byteFina = null;
            Cipher cipher;
            try {
                cipher = Cipher.getInstance("DES");
                cipher.init(Cipher.ENCRYPT_MODE, key);
                byteFina = cipher.doFinal(byteS);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                cipher = null;
            }
            return byteFina;
        }

        /**
         * 解密以byte[]密文输入,以byte[]明文输出
         *
         * @param byteD
         * @return
         */

    private byte[] getDesCode(byte[] byteD) {
            Cipher cipher;
            byte[] byteFina = null;
            try {
                cipher = Cipher.getInstance("DES");
                cipher.init(Cipher.DECRYPT_MODE, key);
                byteFina = cipher.doFinal(byteD);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                cipher = null;
            }
            return byteFina;
        }

        /**
         * 二行制转字符串
         *
         * @param b
         * @return
         */

        public static String byte2hex(byte[] b) { // 一个字节的数,
        // 转成16进制字符串
            String hs = "";
            String stmp = "";
            for (int n = 0; n < b.length; n++) {
                // 整数转成十六进制表示
                stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));
                if (stmp.length() == 1)
                    hs = hs + "0" + stmp;
                else
                    hs = hs + stmp;
            }
            return hs.toUpperCase(); // 转成大写
        } 

        public static byte[] hex2byte(byte[] b) {
            if ((b.length % 2) != 0)
                throw new IllegalArgumentException("长度不是偶数");
            byte[] b2 = new byte[b.length / 2];
            for (int n = 0; n < b.length; n += 2) {
                String item = new String(b, n, 2);
                // 两位一组,表示一个字节,把这样表示的16进制字符串,还原成一个进制字节
                b2[n / 2] = (byte) Integer.parseInt(item, 16);
            }
            return b2;
        }

        public static void main(String[] args) {
            System.out.println("hello");
            DesEncrypt des = new DesEncrypt();//实例化一个对像
            des.getKey("aadd");//生成密匙
            String strEnc = des.getEncString("云海飞舞雲122");//加密字符串,返回String的密文
            System.out.println(strEnc);
            String strDes = des.getDesString(strEnc);//把String 类型的密文解密
            System.out.println(strDes);
            new DesEncrypt();
        }
    }

用java操作word文件

想用java操作word文件?jacob是个不错的选择,也就是java-com桥,你可以在http://sourceforge.net/projects/jacob-project/下载,我下载的版本是1.12,注意版本太低的话可能会报错。

如果没有特殊需求,可以直接使用jacob_*.zip中提供的jacob.jar和jacob.dll。把jacob.dll文件放在系统可以找得到的路径上,一般放c:/windows/system32下就行了,注意你用的jacob.dll文件和你的jacob.jar包要匹配,否则会报错哦!

雅虎将提供PHP网站托管服务

在Yahoo新技术策略Y! OS(Yahoo Open Strategy)中,未来将提供开发者网页应用的代管服务,而且会支持PHP语言。目前Yahoo已经发表YAP第一个功能SearchMonkey,这服务类似Google的定制搜索功能。Yahoo全球技术长Aristotle Balogh到访台湾时表示,在Yahoo新技术策略Y! OS(Yahoo Open Strategy)中,未来将提供开发者网页应用的代管服务,而且会支持PHP语言。

Aristotle说:「Yahoo将推出整合性的开放平台YAP(Yahoo Application Platform),最快年底会有第一个版本释出。」他进一步解释,Y! OS会整合Yahoo既有服务,推出统一标准的开放服务与API组件,凡运用这些服务与组件的应用程序,都可以将网站程序放在Yahoo的YAP平台中,由Yahoo代管。

目前Yahoo已经发表YAP第一个功能SearchMonkey,这服务类似Google的定制搜索功能,通过引导介面,让开发人员汇总多种网络资源,来强化Yahoo提供的搜索结果,并且开发者可以将结果整合到自己的网页应用程序中。为了吸引更多本地开发者运用Yahoo的API来开放网络应用,台湾Yahoo奇摩将在九月举办创意日(Hacking Day)。

微软计划八月正式发布SQL Server 2008

北京时间7月10日消息,微软基础服务器营销副总裁Bob Kelly在7月9日在休斯敦召开的全球合作伙伴会议上宣布,公司将在八月份发布SQL Server 2008。他还透露说,SQL Server 2008的售价将与SQL Server 2005一样。

微软之前在6月初曾经发布了一版接近最终版本的RC 0测试版SQL Server 2008。

微软在今年2月份正式宣布了SQL Server 2008,同时还宣布的产品有Visual Studio 2008和Windows Server 2008。微软官员曾在今年早些时候表示,公司打算在2008年中期发布SQL Server 2008。后来微软官员在两个月之前改口称,公司计划在2008年第三季度发布正式版本的SQL Server 2008。

Kelly还宣布,微软已经发布了接近最终正式版本的RC 1测试版Windows Essential Business Server 2008以及Windows Small Business Server 2008。微软官员称,公司将在微软连接网站上提供上述RC 1测试版产品的下载。公司计划在12月12日正式发布这两款服务器产品。实际上,它很可能会在那个日期之前发布最终正式版产品。

Google公开数据交换格式Protocol Buffers源码

Google于周一(7/7)宣布释出数据交换格式─Protocol Buffers原始码,这是Google内部用来加密网络或磁盘上大量数据的技术,Google宣称该格式比XML更胜一筹。

Google软件技术团队Kenton Varda表示,Google的任务为组织全球的数据,现在全球有上千种不同的数据格式,绝大多数的格式都是结构化的,所面临的重要挑战为如何全部将其加密,而就算像是XML这么好的格式都无法有效解决如此大规模的数据转换工作。

在Google所发表的文件中说明了Protocol Buffers在串行化结构性数据时胜过XML的优势,包括比XML更简单,程序小3~10倍,执行速度快20~100倍,比XML更清楚而且所产生的数据存取类别更容易被用来程序化。

Protocol Buffers与XML的设计概念不同,XML定义表格及数据组的架构,然而Protocol Buffers主要着重在程序逻辑。

Varda说,Protocol Buffers让使用者可以透过特定的语言定义简单的数据架构,并将其编译成可代表这些架构的类别,透过优化的程序代码以最大压缩格式分析与串行化这些讯息并完成这些类别,而且,这些类别非常容易使用。

JDK 6 Update 7 发布 包含VisualVM及改进安全方面

JDK 6u7改进一些安全方面,查看详情:Deploying Java Applets With Family JRE Versions in Java Plug-in for Internet Explorer

VisualVM 1.0 伴随着JDK 6 Update 7发布了,JDK中又内置了一个不可多的实用工具。VisualVM简单说是一个整合了几个JDK命令行工具的可视化工具,具有一定的profiling能力,针对生产环境和开发环境设计,提供了远程和本地访问途径,帮助监控Java SE平台并提供性能分析的能力。通过执行/bin/jvisualvm可以启动VisualVM。VisualVM具有以下特性,个人觉得非常实用,对于Java程序调式和诊断非常有帮助,简单总结如下:

如何用XML实现INI文件格式

这几天写个数据库查询分析器,要用到XML记录用户注册的数据库连接地址、端口等信息,最开始想用java的propertie类来完成。但propertie不支持[小结名--键值名--键值]这种结构,如果要记录用户注册的多个数据库信息的话,propertie中就必须用[小结名.键值名=键值]这种格式进行记录,后来用到xml,完成了类似ini文件读取和保存的功能,删除功能目前还没做,要实现很简单,所以就没包含在代码里面了。

类的介绍--java.text.Format

如果我们用下列语句输出一个数

    System.out.println(123456.789);

将会在Console看到输出123456.789

那么如何得到123,456.789这种格式化的输出呢?这里就需要用到java.text.Format这个类。不仅是数字,它还提供了货币值和百分数的格式化输出,比如0.58的百分数输出形式是58%。要获得本地的默认格式,可以用下列方法获得:

    NumberFormat.getNumberInstance()

    NumberFormat.getCurrencyInstance()

    NumberFormat.getOPercentInstance()

生成连续流水号的方法介绍

方法一:采用最大号表的形式

在数据库中创建一个表专门存放其他数据库的最大流水号,table_maxOrderID {table1_max,table2_max};

在向数据库中插入数据的时候,首先想table_maxOrderId表查询到当前表的最大号加1,先更新最大号表,然后保存到业务数据。

优点:效率高

缺点:号码浪费大一些(例如保存的时候失败了,那么这个号码就浪费了。)

讲解 java runtime.exec()

Runtime类,是一个与JVM运行时环境有关的类,这个类是Singleton的。说几个自己觉得重要的地方。

1、Runtime.getRuntime()可以取得当前JVM的运行时环境,这也是在Java中唯一一个得到运行时环境的方法。

2、Runtime上其他大部分的方法都是实例方法,也就是说每次进行运行时调用时都要用到getRuntime方法。

3、Runtime中的exit方法是退出当前JVM的方法,估计也是唯一的一个吧,因为我看到System类中的exit实际上也是通过调用Runtime.exit()来退出JVM的,这里说明一下Java对Runtime返回值的一般规则(后边也提到了),0代表正常退出,非0代表异常中止,这只是Java的规则,在各个操作系统中总会发生一些小的混淆。

4、Runtime.addShutdownHook()方法可以注册一个hook在JVM执行shutdown的过程中,方法的参数只要是一个初始化过但是没有执行的Thread实例就可以。(注意,Java中的Thread都是执行过了就不值钱的哦)

5、说到addShutdownHook这个方法就要说一下JVM运行环境是在什么情况下shutdown或者abort的。文档上是这样写的,当最后一个非精灵进程退出或者收到了一个用户中断信号、用户登出、系统shutdown、Runtime的exit方法被调用时JVM会启动shutdown的过程,在这个过程开始后,他会并行启动所有登记的shutdown hook(注意是并行启动,这就需要线程安全和防止死锁)。当shutdown过程启动后,只有通过调用halt方法才能中止shutdown的过程并退出JVM。

数组使用范例

数组使用示例
本部分通过一系列的示例,熟悉数组的基本语法,并演示一些使用数组可以解决的基本问题。在实际使用数组时,数组的长度以及数组中每个元素存储的数据,都根据逻辑需要进行设计。
1 循环初始化数组元素
要求:初始化一个长度为100的int数组,数组中的元素依次为1-100。
这是一个基本的使用,主要是熟悉数组的语法,在实际编写时,需要发现数组下标和数组元素值之间的规律即可。

页面

订阅 JAVA技术网 RSS