小编dim*_*414的帖子

我们什么时候应该使用PreparedStatement而不是Statement?

我知道使用的优点PreparedStatement,这些都是

  • 查询由数据库服务器重写和编译
  • 防止SQL注入

但我想知道我们何时使用它而不是Statement

java database prepared-statement

27
推荐指数
4
解决办法
3万
查看次数

Java8 Streams - 删除具有Stream Distinct的重复项

我有一个流如:

Arrays.stream(new String[]{"matt", "jason", "michael"});
Run Code Online (Sandbox Code Playgroud)

我想删除以相同字母开头的名称,以便只留下以该字母开头的一个名称(无关紧要).

我试图了解该distinct()方法的工作原理.我在文档中读到它基于对象的"等于"方法.但是,当我尝试包装String时,我注意到从不调用equals方法,也没有删除任何内容.这里有什么我想念的吗?

包装类:

static class Wrp {
    String test;
    Wrp(String s){
        this.test = s;
    }
    @Override
    public boolean equals(Object other){
        return this.test.charAt(0) == ((Wrp) other).test.charAt(0);
    }
}
Run Code Online (Sandbox Code Playgroud)

还有一些简单的代码:

public static void main(String[] args) {
    Arrays.stream(new String[]{"matt", "jason", "michael"})
    .map(Wrp::new)
    .distinct()
    .map(wrp -> wrp.test)
    .forEach(System.out::println);
}
Run Code Online (Sandbox Code Playgroud)

java string java-8 java-stream

27
推荐指数
2
解决办法
6万
查看次数

在给出其素数因子分解的情况下生成数字的所有因子

如果您已经对数字进行了素数分解,那么获得该数字的所有因子的最简单方法是什么?我知道我可以从2循环到sqrt(n)并找到所有可分的数字,但这似乎效率低,因为我们已经有了素数分解.

我想它基本上是组合/选择功能的修改版本,但我似乎找到的只是计算组合数量的方法,以及计算因子数量的方法,而不是实际生成组合/因子.

java algorithm math primes factorization

23
推荐指数
2
解决办法
9661
查看次数

可以使Terminal.app遵守ANSI转义码吗?

我注意到,与TERM设置为环境变量xterm或者xterm-256color是Mac OS X的Terminal.app实用尊重大多数ANSI转义码,当为至少那些转义代码涉及到更改文本颜色.

例如:

echo -e "\033[0;31mERROR:\033[0m It worked"
Run Code Online (Sandbox Code Playgroud)

生产:

截图

但是,我对ANSI转义码提供的光标位置操作功能更感兴趣.不幸的是,这种类型的代码在Terminal.app中似乎没有太好用,我已经能够收集到了.例如,我想要做的是这样的事情:

echo -e "\033[sHello world\033[uG'day"
Run Code Online (Sandbox Code Playgroud)

ESC[s保存当前光标位置,同时ESC[u恢复上次保存的位置.由于运行上面的脚本,我希望"G'day"中的五个字符在重新定位光标后覆盖"Hello"的五个字符,产生以下结果:

G'day world
Run Code Online (Sandbox Code Playgroud)

实际上,这正是我用iTerm2.app,ConEmu for Windows(运行MinGW或MSYS Git的bash.exe副本)等所得到的.然而,我在Terminal.app中看到的是:

Hello worldG'day
Run Code Online (Sandbox Code Playgroud)

有没有理由这样做,除了Terminal.app之外,只是缺乏对这些代码的支持?有没有办法启用此功能?我有可能有错误配置的东西吗?我的TERM设置?别的什么?

我一直在各处搜索,但没有发现任何与Terminal.app相关的内容.我觉得很奇怪它会通过ANSI转义码支持彩色文本,但不会通过完全相同的技术重新定位光标.这似乎是一个相当明确的标准的相当随意的子集.这就是让我觉得我有一些错误配置的东西,而不是说Terminal.app是应该责备的......但是,我认为它可能根本无法完成.(可能是iTerm2首先存在的原因之一?)

如果有人能对这种情况有所了解,我们将不胜感激!

UPDATE

所以,我做了一些阅读和实验,并发现了以下奇怪之处:

在查看下面的nm答案之后,我决定将返回的字节写出来,tput以查看它们与常规ANSI指令的不同之处.

$ echo "$(tput sc)Hello world$(tput rc)G'day" > out.bin
$ cat -e out.bin
^[7Hello world^[8G'day$
Run Code Online (Sandbox Code Playgroud)

看起来一切正常,如果我把它的序列ESC 7ESC 8,但如果我把它ESC [sESC [u分别,这是我理解的事情是ANSI SCP和RCP代码(保存光标位置较典型的代表性和还原光标位置, ).由于输入ASCII十进制字符78在转义的八进制字节表示旁边是不可能的(\0337!= …

macos terminal ansi-escape iterm2

23
推荐指数
1
解决办法
6999
查看次数

PreparedStatement.addBatch()可用于SELECT查询吗?

想象一下,我有100个SELECT查询,它们因一个输入而不同.PreparedStatement可用于该值.

我在Web上看到的所有文档都是批量插入/更新/删除.我从未见过用于select语句的批处理.

可以这样做吗?如果是这样,请在下面的示例代码中帮助我.

我想这可以使用"IN"子句来完成,但我更喜欢使用批处理的select语句.

示例代码:

public void run(Connection db_conn, List value_list) {
    String sql = "SELECT * FROM DATA_TABLE WHERE ATTR = ?";
    PreparedStatement pstmt = db_conn.prepareStatement(sql);
    for (String value: value_list) {
        pstmt.clearParameters();
        pstmt.setObject(1, value);
        pstmt.addBatch();
    }
    // What do I call here?
    int[] result_array = pstmt.executeBatch()
    while (pstmt.getMoreResults()) {
        ResultSet result_set = pstmt.getResultSet();
        // do work here
    }
}

我想这也可能是依赖于驱动程序的行为.我正在使用他们的JDBC驱动程序编写针对IBM AS/400 DB2数据库的查询.

java sql prepared-statement

22
推荐指数
2
解决办法
3万
查看次数

Gson Java保留关键字

我有一些JSON,我使用Gson反序列化.

{
"resp": {
"posts": [
  {
    ...
    "public": true,
    ...
  }] 
}
Run Code Online (Sandbox Code Playgroud)

我的问题是它public是一个Java关键字,那么我如何在我的类中创建一个与publicJSON中的字段相关的字段?

java keyword gson

21
推荐指数
1
解决办法
2994
查看次数

检查列表是否是另一个与重复项一起使用的列表的轮换

我有这个函数来确定列表是否是另一个列表的轮换:

def isRotation(a,b):
  if len(a) != len(b):
    return False

  c=b*2
  i=0

  while a[0] != c[i]:
    i+=1

  for x in a:
    if x!= c[i]:
      return False
    i+=1

  return True
Run Code Online (Sandbox Code Playgroud)

例如

>>> a = [1,2,3]
>>> b = [2,3,1]
>>> isRotation(a, b)
True
Run Code Online (Sandbox Code Playgroud)

如何使用重复项进行此操作?例如

a = [3,1,2,3,4]
b = [3,4,3,1,2]
Run Code Online (Sandbox Code Playgroud)

它可以及时完成O(n)吗?

python arrays algorithm time-complexity

18
推荐指数
3
解决办法
5264
查看次数

如何在PHP中识别请求的页面

有没有简单的方法来初步确定了文件的处理请求,忽略得到的参数和操作(至少基本)的映射,比如//index.php

理想情况下,我正在寻找的是类似的东西$_SERVER['REQUEST_URI'],除了它返回相同的值,无论get参数如何,该值是请求的文件,而不是URI,也不是当前正在执行的文件($_SERVER['PHP_SELF']).换句话说,一个$_SERVER['REQUESTED_FILE']或什么的.我没见过这样的东西.它是否存在,还是需要手动编写?

更新 以下是一些示例网址与我希望的结果配对:

example.com/mypage.php       : /mypage.php
example.com/                 : /index.php
example.com/foo/?hello=world : /foo/index.php
Run Code Online (Sandbox Code Playgroud)

即使在包含的文件中,这些返回值也是如此.在回答之前看到我的答案,我想我找到了我想要的东西.

php

17
推荐指数
2
解决办法
3万
查看次数

为什么没有StrongReference对象?

我正在实现一些可能从某些时候使用弱引用中受益的行为.我希望班级的用户能够在施工时指出是否是这种情况.由于WeakReference延伸Reference乍一看这似乎我可以做这样的事情(这是一个样机,没有什么,我实际上是想这样做):

public class Container<T> {
    private boolean useWeakRef;
    private Reference<T> ref;

    public Container(boolean isWeak) {
        useWeakRef = isWeak;
    }

    public void store(T val) {
        if(useWeakRef) {
            ref = new WeakReference<>(val);
        } else {
            ref = new StrongReference<>(val);
        }
    }

    // May return null
    public T get() {
        return ref.get();
    }
}
Run Code Online (Sandbox Code Playgroud)

但是没有StrongReference类,根据参考javadocs:

由于引用对象是与垃圾收集器密切配合实现的,因此该类可能不会直接进行子类化.

因此,我无法创建自己的Reference子类,该子类包含对象的强(即正常)引用.这似乎意味着不可能创建一个隐藏它是否使用来自调用者的弱(或软)引用的类.

我真的不明白为什么这个类不存在,一个StrongReference对象应该总是从get()返回对象,除非调用了clear().这为什么会丢失?是否StrongReferenceReference某种方式不一致?这将使构建通用引用持有者对象变得更加简单.

java memory-management reference

17
推荐指数
1
解决办法
2031
查看次数

用于在括号之间提取文本的模式

如何提取字符串"("")"使用模式匹配或任何东西.例如,如果文本是`

"你好(Java)"

然后如何获得"Java".

谢谢.

java pattern-matching

16
推荐指数
3
解决办法
5万
查看次数