我在MySQL中使用了一个存储过程,带有CASE语句.
在CASE的ELSE子句中(相当于默认值:)我想选择并返回一个空结果集,从而避免因不处理ELSE情况而抛出SQL错误,而是返回一个空结果集,就好像一个常规查询一样本来没有返回任何行.
到目前为止,我已经设法使用类似的东西:
Select NULL From users Where False
但是我必须命名一个现有的表,比如本例中的"users".它可以工作,但我更喜欢一种更优雅的方式,如果最终重命名或删除所使用的表名,它不会中断.
我试过Select NULL Where False但它不起作用.
使用Select NULL不返回空集,但是一行具有名为NULL且具有NULL值的列.
想象一下,我有一个类似的查询
SELECT * from table1 a, table2 b where (WHATEVER)
Run Code Online (Sandbox Code Playgroud)
也许两个表都具有相同的列名.所以我虽然通过它访问数据会很好
resultSet.getString("a.columnName");
resultSet.getString("b.columnName");
Run Code Online (Sandbox Code Playgroud)
但这对我不利,我一无所获.我读了API,但他们并没有真正谈论这个案例.这样的功能供应商是否依赖?
我想从带有JDBC的Oracle DB表中获取DATETIME列.这是我的代码:
int columnType = rsmd.getColumnType(i);
if(columnType == Types.DATE)
{
Date aDate = rs.getDate(i);
valueToInsert = aDate.toString();
}
else if(columnType == Types.TIMESTAMP)
{
Timestamp aTimeStamp = rs.getTimestamp(i);
valueToInsert = aTimeStamp.toString();
}
else
{
valueToInsert = rs.getString(i);
}
Run Code Online (Sandbox Code Playgroud)
我必须首先确定列类型.我感兴趣的字段被识别为Types.DATE,但它实际上是数据库中的DATETIME,因为它具有以下格式:"07.05.2009 13:49:32"
getDate截断时间:"07.05.2009"并且getString将".0"附加到它:"07.05.2009 13:49:32.0"
当然我可以删除最终的.0并一直使用getString,但这是一个肮脏的解决方法.
有任何想法吗 ?我一直在寻找一个getDateTime方法.
干杯,蒂姆
当我查询数据库并接收(仅向前,只读)ResultSet时,ResultSet就像一个数据库行列表.
我试图找到一些方法来像Scala一样对待这个ResultSet Stream.这将允许这样的操作的filter,map等等,而不是消耗大量的内存.
我实现了一个尾递归方法来提取单个项目,但是这要求所有项目同时在内存中,如果ResultSet非常大,则会出现问题:
// Iterate through the result set and gather all of the String values into a list
// then return that list
@tailrec
def loop(resultSet: ResultSet,
accumulator: List[String] = List()): List[String] = {
if (!resultSet.next) accumulator.reverse
else {
val value = resultSet.getString(1)
loop(resultSet, value +: accumulator)
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个不返回命中的sql语句.例如,'select * from TAB where 1 = 2'.
我想查看返回的行数,
cursor.execute(query_sql)
rs = cursor.fetchall()
Run Code Online (Sandbox Code Playgroud)
在这里我得到了异常:"(0,'没有结果集')"
如何预先设置此异常,检查结果集是否为空?
我们目前基于命名查询返回的两个字段手动构建映射,因为JPA仅提供getResultList().
@NamedQuery{name="myQuery",query="select c.name, c.number from Client c"}
HashMap<Long,String> myMap = new HashMap<Long,String>();
for(Client c: em.createNamedQuery("myQuery").getResultList() ){
myMap.put(c.getNumber, c.getName);
}
Run Code Online (Sandbox Code Playgroud)
但是我觉得自定义映射器或者类似物会更高效,因为这个列表很容易就会产生30,000多个结果.
任何想法,无需手动迭代即可构建Map.
(我使用的是OpenJPA,而不是休眠)
我有一个实现Iterator的类,ResultSet作为数据成员.基本上这个类看起来像这样:
public class A implements Iterator{
private ResultSet entities;
...
public Object next(){
entities.next();
return new Entity(entities.getString...etc....)
}
public boolean hasNext(){
//what to do?
}
...
}
Run Code Online (Sandbox Code Playgroud)
如何检查ResultSet是否有另一行,以便我可以创建一个有效的hasNext方法,因为ResultSet没有自己定义hasNext?我正在考虑进行SELECT COUNT(*) FROM...查询以获取计数并管理该数字以查看是否有另一行但我想避免这种情况.
关于JDBC编码的几个问题:
我知道对close()的调用会释放资源.但是如果我们知道我们稍后会使用它,为什么要释放它然后再请求它呢?
多客户端应用程序怎么样?我们需要连接池,所以我们每次都需要创建和关闭Connection,Statement和PreparedStatement?
谢谢,
$("#experiences tr")
Run Code Online (Sandbox Code Playgroud)
对于上面的一个,如何判断它是否为空?
我认为它的布尔值应该是假的,但似乎不是.