精华内容
下载资源
问答
  • 最近最项目,项目的持久化部分用的是spring jdbc,...在写的过程中,发现一个问题,就是涉及到一个很大的对象,属性非常多,但每次查询出来的属性却又都一样,这样的公用mapRow 该怎么写呢,能否根据结果集中是...

    最近最项目,项目的持久化部分用的是spring jdbc,查询出来的结果集要映射为对象,每次都在查询SQL的方法内定义私有的mapper 变量,内部实现mapRow 方法,似乎有些浪费,就想着定义一个公用的mapRow 实现,节省代码,方便维护。

    在写的过程中,发现一个问题,就是涉及到一个很大的对象,属性非常多,但每次查询出来的属性却又都不一样,这样的公用mapRow 该怎么写呢,能否根据结果集中是否有某个属性,才让其映射,没有的就不再映射呢?

    立马翻开jdk api,找到ResultSet ,找了又找,没有找到相应的方法。

    但jdk中有一个方法,可以利用起来,什么方法呢?

    findColumn

    int findColumn(String columnLabel)

    throws SQLException将给定的 ResultSet 列标签映射到其 ResultSet 列索引。

    参数:

    columnLabel - 使用 SQL AS 子句指定的列标签。如果未指定 SQL AS 子句,则标签是列名称

    返回:

    给定列名称的列索引

    抛出:

    SQLException - 如果 ResultSet 对象不包含标记为 columnLabel 的列,发生数据库访问错误或在已关闭的结果集上调用此方法

    ResultSet 中的findColumn方法,返回指定的列名在结果集中的索引,索引值从1开始。

    假如返回结果集中依次包含id,name,age ,则

    findColumn("id") // 1

    findColumn("name") // 2

    findColumn("age") // 3

    如果通过findColumn去查找一个不存在的列名时,出现什么情况呢?抛出SQLException。

    这里介绍的方法,就是将findColumn 和SQLException 组合起来,组成的方法。

    /**

    * 判断查询结果集中是否存在某列

    * @param rs 查询结果集

    * @param columnName 列名

    * @return true 存在; false 不存咋

    */

    public boolean isExistColumn(ResultSet rs, String columnName) {

    try {

    if (rs.findColumn(columnName) > 0 ) {

    return true;

    }

    }

    catch (SQLException e) {

    return false;

    }

    return false;

    }

    if 条件内,如果rs.findColumn(columnName) > 0 ,ResultSet结果集中的列索引从1开始,不同于数组和list的从0开始,所以如果找到某列,那么它的索引值必然大于0;如果没有找到呢,那么就会有SQLException

    异常抛出来,我们这里将这个SQLException 异常利用起来,如果进入异常块,则说明没有找到该列,那么直接返回false就可以了。

    这样在mapRow 中,如果多个属性的时候,每次可以判断下,该ResultSet 中是否查询出来该列,查询出来了就做映射,没有查询出,则不做具体事情,从而更好的公用了mapRow。

    原文:http://blog.csdn.net/magi1201/article/details/44732137

    展开全文
  • 项目里要为一张表添加不同的字段,大概有几十个,还要判断原表中存不存在字段,存在就不操作,不存在才添加字段,最好是可以循环重复添加的,像JAVA程序那样有循环遍历不同的字段然后去判断不存在再添加。...
  • 此方法返回值是int型,为数据行数,有数据则大于等于1无数据则为0,拿到查询回来的行数后在java代码中判断是否为0,即是否有数据!看下面代码://创建或者打开数据库SQLiteDatabase db = openOrCreateDatabase("test...

    这里我们要用Cursor中的getCount()方法去获得表中数据的行数(即,是否有数据)

    注意!此方法返回值是int型,为数据行数,有数据则大于等于1无数据则为0,

    拿到查询回来的行数后在java代码中判断是否为0,即是否有数据!看下面代码:

    //创建或者打开数据库

    SQLiteDatabase db = openOrCreateDatabase("test.db", Context.MODE_PRIVATE, null);

    //实例化一个Cursor 为c做查询

    Cursor c=db.rawQuery("select * from person where id=1",null);

    int re = c.getCount();//定义一个int型变量re接收查询行数的返回值

    //对re(数据行数)进行判断,为0执行下面insert,非0执行update if(re==0){

    db.execSQL("insert into person(id,name,password) values(1,2,3)");

    }else{

    db.execSQL("update person set name=? ,password=? where id=1",new Object[]{name,password});

    }

    基本每一行都有注释,纯手打。SQL语句改一下即可套用

    取消

    评论

    展开全文
  • 有两张表 主订单表 和订单详情表 假设一个订单里面有多个详情 当其中一条详情的状态变更为 发货的时候 需要判断这个订单下面所有的详情 是不是... 这个怎么解决啊 我马上改了之后应该是查到zhe'tiao'shu'ju'de
  • Java中,内存由虚拟机管理,控制着回收什么,什么时候...存在一些根节点(GC Roots)作为起始点,从这些节点向下搜索,通过的路径为引用链,当对象与GC Roots间不存在任何引用链时,该对象不再被需要。GC Root包括:...

    e8e475cf909080e752f7d48306f788b1.png

    Java中,内存由虚拟机管理,控制着回收什么,什么时候回收,怎么回收。

    在栈中内存的随线程产生和分配,销毁而回收,在堆中,需要制定一系列策略来判断该回收哪些区域,以及何时回收。

    可达性分析

    主流的做法是通过可达性分析来判断对象是否存活。存在一些根节点(GC Roots)作为起始点,从这些节点向下搜索,通过的路径为引用链,当对象与GC Roots间不存在任何引用链时,该对象不再被需要。

    GC Root包括:

    • 虚拟机栈中引用的对象
    • 方法区中类静态属性引用的对象
    • 方法区常量引用的对象
    • Native方法引用的对象

    引用

    Java为引用提供了四种级别,除了强引用之外,还有其他引用,在垃圾回收时有着不同的表现

    • 强引用:默认的引用方式,引用还在,对象就不会被回收
    • 软引用(SoftReference):垃圾回收后内存不够用会在软引用中再回收一次,还没有足够内存,则内存溢出
    • 弱引用(WeekReference):垃圾收集时,回收
    • 虚引用:最弱的关系,当对象被收集时,可以获得通知

    标记

    在对象进行可达性分析后如果没有GC引用链,则被第一次标记

    之后有线程调用finalize()方法,如果重新进入引用链,则不会回收,否则,被回收

    垃圾回收算法

    标记-清除算法

    最基础的算法,标记就是上述过程,完成标记之后清除对应的内存空间,它的不足有2点:

    • 效率:标记和清除效率都不高
    • 空间:清楚之后会产生大量的空间碎片,在有大的对象时,可能会提前触发GC

    复制算法

    将内存分为2块,一块内存用完了,就把存活的对象移动到另一块,然后全部清除之前的一块。另一块内存用完之后,同理。

    优点是不用考虑内存碎片,但是缺点就是内存只有原来的一半

    标记-整理算法

    和标记-清除类似,但是清除有所不同,将以存活对象移动到一端,然后对其他区域进行清除。

    分代收集算法

    把堆分为新生代和老年代,根据分代的特点使用不同的收集算法。

    内存分配和回收策略

    新生代

    在新生代每次垃圾收集时都有大量的对象死去,少量的对象存活,比较适合复制算法。

    但是并不是上面所说的1:1,通常采用的是1个Eden区,2个Survivor,默认8:1:1的比例,新的对象默认进入Eden区,当内存不足时,进行新生代GC,存活的对象进入1个Survivor区,完成之后新的对象继续分配进入Eden区,再次发生GC时,Eden区的和Survivor区的存活对象进入另一个Survivor区

    当对象很大时,会直接进入老年代,包括分配阶段和回收阶段

    当对象存活很多轮时,也会进入老年代 -XX:MaxTenuringThreshold=15

    动态年龄判断

    当低龄对象很多时,超过Survivor一半时,大于该年龄的将直接进入老年代,而不需要等到默认的15

    空间分配担保

    当发生Minor GC时,虚拟机会检查老年代的最大可用的连续空间是否大于新生代的所有对象的总空间。如果成立,Minor GC是安全的。

    否则,虚拟机会查看HandlePromotionFailure是否允许担保失败。

    如果允许,那么检查老年代的最大连续可用空间是否大于历次晋升老年代的平均大小。

    如果大于,进行Minor GC。此时有可能这次存活的对象比较多,大于之前的平均水平,因此会担保失败,重新Full GC

    如果小于或不允许HandlePromotionFailure,进行Full GC

    老年代

    老年代中对象存活率高,没有额外的空间担保,一般采用标记-清理或标记整理算法

    枚举根节点

    虚拟机需要分析全局性的引用和执行上下文,在GC停顿时,必须分析到某个暂停的时间点上。检查HotSpot中的OopMap。OopMap记录着对象的偏移量和引用的位置。

    安全点

    如果在每个改变引用关系的指令都生产OopMap,那么就占用大量的空间。因此只在特定的位置记录,称为安全点。

    当开始GC时,设定一个标志,线程去轮询这个标志,当发现标志时中断挂起

    安全区域

    对于不在执行时的线程,比如sleep,无法响应中断,GC不可能等待这些线程

    因此有了安全区域机制,对于不改变对象引用关系的区域,可以被称为安全区域

    线程进入安全区域时,无需理会GC

    当线程离开安全区域时,如果GC枚举根节点或全部GC过程已结束,则继续执行

    如果没结束,需要等待GC可安全离开安全区域的信号

    垃圾回收器

    Serial收集器

    最早的垃圾收集器,单线程收集器,当工作时,需要暂停全部工作线程

    简单而高效

    ParNew收集器

    Serial收集器的多线程版本,GC时同样需要暂停全部线程

    可以和老年代收集器CMS配合使用

    Parallel Scavenge收集器

    新生代收集器,使用复制算法,对现场

    与ParNew不同的是,其目标是达到可控制的吞吐量。

    提供了2个参数可控制吞吐量

    MaxGCPauseMillis:最大GC暂停时间,收集器将尽可能不超过该时间,并不一定是越小越好,GC时间的缩短是以牺牲吞吐量和新生代空间换取的

    GCTimeRatio:垃圾收集时间占总时间的比率,默认99,即 1/(1+99) = 1%, 基于运行时的测量,JVM将会尝试修改堆和GC设置以期达到目标吞吐量。

    Parallel Scavenge收集器提供 -XX:_UseAdaotiveSizePolicy来自适应的调节新生代的大小,以及新生代中各区的大小。

    Serial Old收集器

    Serial收集器的老年代版本,单线程收集器,标记-整理算法

    Parallel Old收集器

    Parallel Scavenge收集器的老年代版本,可以配合使用,吞吐量优先

    CMS收集器

    以最短回收停顿时间为目标的收集器。希望停顿时间最短,提高相应速度。

    CMS收集器的垃圾收集线程可以和工作线程同时工作

    CMS基于标记-清除算法,分为4个步骤

    • 初始标记:标记GC Roots关联对象,停止全部工作线程,速度很快
    • 并发标记:GC Roots Tracing,和工作线程一起执行
    • 重新标记:修改并发标记期间用户程序修改导致的标记变动的对象标记记录,停止全部工作线程,速度较快
    • 并发清除:并发清理

    缺点

    • 因为是和工作线程并发执行,会占用线程导致应用程序变慢
    • 无法清除浮动垃圾(并发清理阶段工作线程产生的垃圾),因此并不能等到老年代完全满了再Full GC,而是选择一个阈值-XX:CMSInitiatingOccupancyFraction,启动Full GC,当预留的内存满了的时候,会出现 Concurrent Mode failure 错误,使用Serial Old收集器收集器收集,从而停顿
    • 基于标记-清除算法,会产生碎片,提供-XX:+UseCMSCompactAtFullCollection参数用于开启碎片的合并整理过程。每次都碎片整理也会慢,因此提供-XX:CMSFullGCsBeforeCompaction,用于每过多少次进行一次碎片整理

    G1收集器

    G1是最新的JDK上默认的垃圾回收器,技术更加先进。目标是替代CMS收集器。

    之前的垃圾回收器的范围都是整个新生代或老年代,而G1不是。它将整个Java堆分为多个大小相等的独立区域,新生代和老年代都是一部分不需要连续的区域集合

    G1可预测停顿,能够在执行时间内,垃圾回收时间不超过一定时间。G1有计划的避免整个Java堆中进行全区域的垃圾回收。G1会根据每个区域的垃圾回收价值的大小维护优先列表,优先回收价值最大(回收所获得的内存大小以及对应的时间的自适应值)的区域

    G1的收集过程,和CMS类似:

    • 初始标记:标记GC Roots关联对象,停止全部工作线程,速度很快
    • 并发标记:GC Roots Tracing,和工作线程一起执行
    • 最终标记:修改并发标记期间用户程序修改导致的标记变动的对象标记记录,停止全部工作线程,速度较快
    • 筛选回收:对区域进行排序,然后回收,因为只回收一部分区域,因而是可控的

    关注我的Github项目,开启Java进阶之路,欢迎star

    Asens/Java-Advancegithub.com
    0ebf31565ce00ff0b38cd6a6f50563ff.png
    展开全文
  • 且,或,某个字段不为空,某个字段不存在,查询在某个范围内,删除等等查询。一. 常用查询:1. 查询一条数据:(多用于保存时判断db中是否已有当前数据,这里 is 精确匹配,模糊匹配 使用regex...)?2. 查询多...

    本意是想查查mongo数据库的int类型的like怎么查,但是好像没 解决这个问题。

    精确查询;模糊查询;分页查询,每页多少:按某个字段排序(或升或降):查询数量:大于,小于,等于;且,或,某个字段不为空,某个字段不存在,查询在某个范围内,删除等等查询。

    一. 常用查询:

    1. 查询一条数据:(多用于保存时判断db中是否已有当前数据,这里 is  精确匹配,模糊匹配 使用regex...)

    ?

    2. 查询多条数据:linkUrl.id 属于分级查询

    ?

    3.模糊查询:-----关键字---regex

    ?

    最下面,我在代码亲自实践过的模糊查询,只支持字段属性是字符串的查询,你要是查字段属性是int的模糊查询,还真没辙。

    4.gte: 大于等于,lte小于等于...注意查询的时候各个字段的类型要和mongodb中数据类型一致

    ?

    查询字段不存在的数据 -----关键字---not

    ?

    查询字段不为空的数据     -----关键字---ne

    ?

    查询或语句:a || b     ----- 关键字---orOperator

    ?

    查询且语句:a && b     ----- 关键字---and

    ?

    查询一个属性的子属性,例如:查下面数据的key2.keyA的语句

    ?

    5. 查询数量:----- 关键字---count

    ?

    查找包含在某个集合范围:----- 关键字---in

    ?

    6. 更新一条数据的一个字段:

    ?

    7. 更新一条数据的多个字段:

    ?

    8. 删除数据:

    ?

    9.保存数据:

    ?

    我自己使用的例子:

    下面例子涉及到:

    精确查询:is;

    模糊查询:regex;

    分页查询,每页多少:skip,limit

    按某个字段排序(或升或降):new Sort(new Sort.Order(Sort.Direction.ASC, "port"))

    查询数量:count

    ?

    mongo数据库里面像搜索数据类型为int的字段,

    然后想使用like语句来着,但是没有实现,

    因为我的port端口存的事int属性,

    但是在列表页面,要支持字段搜索的话,然后我的int类型的端口字段,就不支持搜索了,

    然后就考虑,既然是端口,那就是一个固定的,唯一的,

    为什么要支持like语句呢?

    你搜索端口号是1的就搜出来的是1的端口号就对了,而不是1,11,21,,,等等都个搜索出来,

    所以,

    对去其他的字符串 类型的字段,你使用like语句搜索,

    我是没意见的,

    要是非得 实现int类型的like搜索,

    我 也不知道啊。

    只有改数据结构,

    让int型变成string型的话,

    就可以like搜索啦。

    原文链接:http://blog.csdn.net/qq_27093465/article/details/51578369

    展开全文
  • 且,或,某个字段不为空,某个字段不存在,查询在某个范围内,删除等等查询。 一. 常用查询: 1. 查询一条数据:(多用于保存时判断db中是否已有当前数据,这里 is 精确匹配,模糊匹配 使用regex…) public PageUrl ...
  • 但是使用多线程时我有个疑问, 就是怎么判断是否到了1秒. 如果使用本地时钟计算肯定会与服务器有出入, 每秒几千条差别肯定小; 后来我想从接受到的数据时间戳来判断, 但是又想到多线程可能会存在数据到达的顺序与...
  • 且,或,某个字段不为空,某个字段不存在,查询在某个范围内,删除等等查询。 一. 常用查询: 1. 查询一条数据:(多用于保存时判断db中是否已有当前数据,这里is 精确匹配,模糊匹配 使用regex.....
  • 且,或,某个字段不为空,某个字段不存在,查询在某个范围内,删除等等查询。 一. 常用查询: 1. 查询一条数据:(多用于保存时判断db中是否已有当前数据,这里 is 精确匹配,模糊匹
  • 且,或,某个字段不为空,某个字段不存在,查询在某个范围内,删除等等查询。一. 常用查询:1. 查询一条数据:(多用于保存时判断db中是否已有当前数据,这里 is 精确匹配,模糊匹配 使用regex...)public ...
  • 且,或,某个字段不为空,某个字段不存在,查询在某个范围内,删除等等查询。一. 常用查询:1. 查询一条数据:(多用于保存时判断db中是否已有当前数据,这里is 精确匹配,模糊匹配 使用regex...) public...
  • java常用工具类的使用

    热门讨论 2012-03-19 20:11:37
    比如现在木工做家具,已经不存在自己砍树、加工木板、一点一点的雕刻了,如果需要木板,直接到市场上购买,需要各种图案,直接到市场购买,木工的工作就是把这些木板修理一下组装成一套家具即可。“工欲善其事,必先...
  • JAVA 正则表达式

    热门讨论 2010-01-15 11:16:37
    Java 正则的功用还有很多,事实上只要是字符处理,就没有正则做到的事情存在。(当然,正则解释时 较耗时间就是了|||……) JAVA中正则表达式的应用 (一) 陈广佳 (cgjmail@163.net) 电子信息工程系...
  • java面试宝典2012

    2012-12-16 20:43:41
    81、java中会存在内存泄漏吗,请简单描述。 59 82、能能自己写个类,也叫java.lang.String? 62 83. Java代码查错 63 二. 算法与编程 67 1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt...
  • JAVA面试宝典2010

    2011-12-20 16:13:24
    81、java中会存在内存泄漏吗,请简单描述。 53 82、能能自己写个类,也叫java.lang.String? 57 83. Java代码查错 57 二. 算法与编程 61 1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt...
  • Java面试宝典-经典

    2015-03-28 21:44:36
    81、java中会存在内存泄漏吗,请简单描述。 53 82、能能自己写个类,也叫java.lang.String? 57 83. Java代码查错 57 二. 算法与编程 61 1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt...
  • Java 面试宝典

    2013-02-01 10:02:08
    Java 基础部分..................................................................................................................... 7 1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么...
  • Java面试宝典2012版

    2012-12-03 21:57:42
    81、java中会存在内存泄漏吗,请简单描述。 53 82、能能自己写个类,也叫java.lang.String? 57 83. Java代码查错 57 二. 算法与编程 61 1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c...
  • 最新Java面试宝典pdf版

    热门讨论 2011-08-31 11:29:22
    81、java中会存在内存泄漏吗,请简单描述。 53 82、能能自己写个类,也叫java.lang.String? 57 83. Java代码查错 57 二. 算法与编程 61 1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt...
  • Java面试宝典2012新版

    2012-06-26 19:20:00
    81、java中会存在内存泄漏吗,请简单描述。 53 82、能能自己写个类,也叫java.lang.String? 57 83. Java代码查错 57 二. 算法与编程 61 1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt...
  • Java面试笔试资料大全

    热门讨论 2011-07-22 14:33:56
    81、java中会存在内存泄漏吗,请简单描述。 53 82、能能自己写个类,也叫java.lang.String? 57 83. Java代码查错 57 二. 算法与编程 61 1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt...
  • Java面试宝典2010版

    2011-06-27 09:48:27
    81、java中会存在内存泄漏吗,请简单描述。 82、能能自己写个类,也叫java.lang.String? 83. Java代码查错 二. 算法与编程 1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,...
  • 81、java中会存在内存泄漏吗,请简单描述。 53 82、能能自己写个类,也叫java.lang.String? 57 83. Java代码查错 57 二. 算法与编程 61 1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt...
  • 81、java中会存在内存泄漏吗,请简单描述。 53 82、能能自己写个类,也叫java.lang.String? 57 83. Java代码查错 57 二. 算法与编程 61 1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt...
  • // 如果传入的sheet名不存在则默认指向第1个sheet. sheet = wb.getSheetAt(0); } if (sheet == null) { throw new IOException("文件sheet不存在"); } // 获取最后一个非空行的行下标...
  • Java基础部分......................................................................................................2 1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?.....2 2、...

空空如也

空空如也

1 2 3
收藏数 46
精华内容 18
关键字:

java怎么判断字段不存在

java 订阅