10月15
一、Hibernate是JDBC的轻量级的对象封装,它是一个独立的对象持久层框架,和App Server,和EJB没有什么必然的联系。Hibernate可以用在任何JDBC可以使用的场合,例如Java应用程序的数据库访问代码,DAO接口的实现类,甚至可以是BMP里面的访问数据库的代码。从这个意义上来说,Hibernate和EB不是一个范畴的东西,也不存在非此即彼的关系。

二、Hibernate是一个和JDBC密切关联的框架,所以Hibernate的兼容性和JDBC驱动,和数据库都有一定的关系,但是和使用它的Java程序,和App Server没有任何关系,也不存在兼容性问题。

三、Hibernate不能用来直接和Entity Bean做对比,只有放在整个J2EE项目的框架中才能比较。并且即使是放在软件整体框架中来看,Hibernate也是做为JDBC的替代者出现的,而不是Entity Bean的替代者出现的,让我再列一次我已经列n次的框架结构:
传统的架构:
1) Session Bean <-> Entity Bean <-> DB
为了解决性能障碍的替代架构:
2) Session Bean <-> DAO <-> JDBC <-> DB
使用Hibernate来提高上面架构的开发效率的架构:
3) Session Bean <-> DAO <-> Hibernate <-> DB
就上面3个架构来分析:
1、内存消耗:采用JDBC的架构2无疑是最省内存的,Hibernate的架构3次之,EB的架构1最差。
2、运行效率:如果JDBC的代码写的非常优化,那么JDBC架构运行效率最高,但是实际项目中,这一点几乎做不到,这需要程序员非常精通JDBC,运用Batch语句,调整PreapredStatement的Batch Size和Fetch Size等参数,以及在必要的情况下采用结果集cache等等。而一般情况下程序员是做不到这一点的。因此Hibernate架构表现出最快的运行效率。EB的架构效率会差的很远。
3、开发效率:在有JBuilder的支持下以及简单的项目,EB架构开发效率最高,JDBC次之,Hibernate最差。但是在大的项目,特别是持久层关系映射很复杂的情况下,Hibernate效率高的惊人,JDBC次之,而EB架构很可能会失败。
4、分布式,安全检查,集群,负载均衡的支持
由于有SB做为Facade,3个架构没有区别。
10月15
先看以下有没有

如果路径不见了:

1.看是否将计算机的名字给改了
2.如果没有改 在dos 环境下运行 lsnrctl start

原因:
Windows优化大师将Oracle的监听服务给优化了
还有一种造成本地oracle无法启动的原因是安装时的主机名与当前主机名不同,也就是说安装完oracle后
更改了主机名造成。

解决办法1;
打开注册表(regedit)找到  
HKEY_LOCAL_MACHINE/SYSTEM/CurrentContorlSet/Services/OracleOraHome92TNSListener找到后单击,
在右侧里面单击右键,新建一个(可扩充字符串值) 起名字为 ImagePath 在 数值数据 中写入
C:\oracle\ora92\BIN\TNSLSNR 后退出注册表, 重新启动即可。(其中 C:\oracle\ora92\BIN\TNSLSNR 是你oracle安装目录中的一个.exe文件。
10月15
数据库服务器字符集更改步骤
问题描述:
在客户端插入字符“咪咪”,从数据库中查询显示时出现乱码

处理步骤:
1.对数据库做全库导出,备份全库数据,以防故障发生
首先设定客户端的字符集,必须以ZHS16GBK的字符集导出,然后才能在更改失败后顺利倒入新建的库。
#setenv NLS_LANG "SIMPLIFIED CHINESE_CHINA.ZHS16GBK";
#stty -istrip -parity cs8;
#setenv LANG zh
拟在/sybdata(磁盘阵列)下建立一个目录orabak,用于存放dmp文件。
#mkdir /sybdata/orabak
#chown oracle:oinstall /sybdata/orabak
#su – oracle
#cd /sybdata/orabak
%exp system/manager@hnsdh file=hnsdh_2010-8-17 log=hnsdh_exp_2010-8-17 full=y
(此处命名为示例,以实施当日日期为准)
察看日志结尾,以判定导出是否成功。
#cat hnsdh_2010-8-17.dmp | od -x | head
看第二和第三个字节组成的十六进制数是多少可判断导出文件的字符集。
10月15
java二进制,字节数组,字符,十六进制,BCD编码转换
   /*
    * 把16进制字符串转换成字节数组
    * @param hex
    * @return
    */
public static byte[] hexStringToByte(String hex) {
    int len = (hex.length() / 2);
    byte[] result = new byte[len];
    char[] achar = hex.toCharArray();
    for (int i = 0; i < len; i++) {
     int pos = i * 2;
     result[i] = (byte) (toByte(achar[pos]) << 4 | toByte(achar[pos + 1]));
    }
    return result;
}

private static byte toByte(char c) {
    byte b = (byte) "0123456789ABCDEF".indexOf(c);
    return b;
}
10月15
在做项目的时候,可能会碰到这样的一个问题,就是需要把一个对象的属性完全拷贝到另一个对象上.

当这个对象是个简单对象(即属性不包括对其他对象的引用)时
用浅拷贝来完成对象的拷贝.即在实体类中实现Clonable接口,实现 public Object Clone()方法.

通过调用父类的super.clone()方法(浅拷贝)可以重新生成一个对象,解决因对象引用赋值造成的原对象的修改.
如  Student s=new Student("Heck",23);
   Student s2=s;
   s2.setName("ZhangSan"); //实际上改的是Student s, 使得 Heck=>ZhangSan
而应该才用浅拷贝的方法
  Student s2=s.clone();
  s2.setName("ZhangSan");
10月15
         在前面的两篇日志中我们提到了有关Android平台蓝牙的配对、发现、启用等操作,本文开始通过BluetoothSocket类建立有关蓝牙通讯的套接字。从Android 2.0开始支持这一特性,蓝牙和LAN一样通过MAC地址来识别远程设备,建立完通讯连接RFCOMM通道后以输入、输出流方式通讯。

  一、连接设备

  蓝牙通讯分为server服务器端和client客户端,它们之间使用BluetoothSocket 类的不同方法来获取数据,

  1. 作为服务器

  如果一个设备需要和两个或多个设备连接时,就需要作为一个server来传输,在android中提供了BluetoothServerSocket类来处理用户发来的信息,服务器端套接字在接受(accepted) 一个客户发来的BluetoothSocket时作出相应的响应。示例代码如下:

  private class AcceptThread extends Thread {
  private final BluetoothServerSocket cwjServerSocket;
  public AcceptThread() {
  BluetoothServerSocket tmp = null; //使用一个临时对象代替,因为cwjServerSocket定义为final
  try {
  tmp = myAdapter.listenUsingRfcommWithServiceRecord(NAME, CWJ_UUID); //服务仅监听
  } catch (IOException e) { }
  cwjServerSocket = tmp;
  }
10月15
public class ScreenTest extends Activity {    
        
    class SmsContent extends ContentObserver{    
        private Cursor cursor = null;    
        public SmsContent(Handler handler) {    
            super(handler);    
        }    
            
        /**  
         * @Description 当短信表发送改变时,调用该方法    
         *              需要两种权限  
         *              android.permission.READ_SMS读取短信  
         *              android.permission.WRITE_SMS写短信  
         * @Author Snake  
         * @Date 2010-10-12  
         */  
        @Override  
        public void onChange(boolean selfChange) {    
            // TODO Auto-generated method stub    
            super.onChange(selfChange);    
            //读取收件箱中指定号码的短信    
            cursor = managedQuery(Uri.parse("content://sms/inbox"), new String[]{"_id", "address", "read"}, " address=? and read=?", new String[]{"12345678901", "0"}, "date desc");
10月15
1.查看是否有存储卡插入
String status=Environment.getExternalStorageState();
if(status.equals(Enviroment.MEDIA_MOUNTED))
{
   说明有SD卡插入
}
2.让某个Activity透明

OnCreate中不设Layout

this.setTheme(R.style.Theme_Transparent);

以下是Theme_Transparent的定义(注意transparent_bg是一副透明的图片)

3.在屏幕元素中设置句柄
使用Activity.findViewById来取得屏幕上的元素的句柄. 使用该句柄您可以设置或获取任何该对象外露的值.
TextView msgTextView = (TextView)findViewById(R.id.msg);
   msgTextView.setText(R.string.push_me);

4:发送短信

            String body=”this is mms demo”;

           Intent mmsintent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts(”smsto”, number, null));
           mmsintent.putExtra(Messaging.KEY_ACTION_SENDTO_MESSAGE_BODY, body);
           mmsintent.putExtra(Messaging.KEY_ACTION_SENDTO_COMPOSE_MODE, true);
           mmsintent.putExtra(Messaging.KEY_ACTION_SENDTO_EXIT_ON_SENT, true);
            startActivity(mmsintent);
10月15
Android 多个APK共享数据(Shared User ID):

Android给每个APK进程分配一个单独的用户空间,其manifest中的userid就是对应一个Linux 用户
(Android 系统是基于Linux)的.
所以不同APK(用户)间互相访问数据默认是禁止的.
但是它也提供了2种APK间共享数据的形式:
1. Share Preference. / Content Provider
APK可以指定接口和数据给任何其他APK读取. 需要自己实现接口和Share的数据.
本文对于这个不做详细解释

2. Shared User id
通过Shared User id,拥有同一个User id的多个APK可以配置成运行在同一个进程中.所以默认就是
可以互相访问任意数据. 也可以配置成运行成不同的进程, 同时可以访问其他APK的数据目录下的
数据库和文件.就像访问本程序的数据一样.
比如某个公司开发了多个Android 程序, 那么可以把数据,图片等资源集中放到APK  A中去. 然后
这个公司的所有APK都使用同一个User ID, 那么所有的资源都可以从APK A中读取.
10月15

内存溢出的解决办法

14:26编程杂谈  From: 本站原创
         昨天在模拟器上给gallery放入图片的时候,出现java.lang.OutOfMemoryError: bitmap size exceeds VM budget 异常,图像大小超过了RAM内存。
      模拟器RAM比较小,只有8M内存,当我放入的大量的图片(每个100多K左右),就出现上面的原因。由于每张图片先前是压缩的情况。放入到Bitmap的时候,大小会变大,导致超出RAM内存,具体解决办法如下:

                //解决加载图片 内存溢出的问题
                //Options 只保存图片尺寸大小,不保存图片到内存
                BitmapFactory.Options opts = new BitmapFactory.Options();
                //缩放的比例,缩放是很难按准备的比例进行缩放的,其值表明缩放的倍数,SDK中建议其值是2的指数值,值越大会导致图片不清晰
                opts.inSampleSize = 4;
                Bitmap bmp = null;
                bmp = BitmapFactory.decodeResource(getResources(), mImageIds[position],opts);                              
                ...              
                //回收
                bmp.recycle();

通过上面的方式解决了,但是这并不是最完美的解决方式。
分页: 5/8 第一页 上页 1 2 3 4 5 6 7 8 下页 最后页 [ 显示模式: 摘要 | 列表 ]