搜索到关键字为 from 的相关日志 20 篇: ("[空格]和"+"[加号] 可作搜索分隔符号使用.)

常用数据库validationQuery语句 suny

在配置数据库连接池的时候,有一个选项validationQuery,该选项用来验证数据库连接的有效性,下表是从网上收集的常用数据库的validationQuery语句。

数据库 validationQuery
Oracle select 1 from dual
DB2 select 1 from sysibm.sysdummy1
mysql select 1
microsoft sql select 1
hsqldb select 1 from INFORMATION_SCHEMA.SYSTEM_USERS
postgresql select version();
ingres select 1
derby select 1
H2 select 1

myBatis 存储过程返回值的问题 cloud

今天在调试myBatis调用Sybase数据库的存储过程的时候,出现了如下错误:

org.apache.ibatis.binding.BindingException: Mapper method 'getNextKey' (interface com.xxxxxxx.PackHandleMapper) attempted to return null from a method with a primitive return type (long).
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:37)
at $Proxy17.getNextKey(Unknown Source)
....

报错信息言下之意是返回值为空,可是我的存储过程明明是返回了一个记录集,存储过程如下:

   sql代码
  1. CREATE PROCEDURE prc_seq(@seq_name varchar(20)) 
  2. AS 
  3. BEGIN
  4.     UPDATE seq SET val=val+1 WHERE [name]=@seq_name 
  5.     SELECT val from seq WHERE [name]=@seq_name 
  6. END 
  7. GO 

而且在数据库终端,可以成功执行和返回数据:
exec prc_seq 'xxx'

--------------------------------------------------------------------------------------------------------

经过排查得知,故障是由于update语句引起的,执行上面的语句,会产生两条执行记录,myBatis获取了update语句的执行情况:

1 record(s) affected
1 record(s) selected  [Fetch MetaData: 0/ms]  [Fetch Data: 0/ms] 

解决方法,去掉update语句的执行情况返回,即增加语句:SET NOCOUNT ON

   sql代码
  1. CREATE PROCEDURE prc_seq(@seq_name varchar(20)) 
  2. AS 
  3. BEGIN 
  4.     SET NOCOUNT ON 
  5.     UPDATE seq SET val=val+1 WHERE [name]=@seq_name 
  6.     SELECT val from seq WHERE [name]=@seq_name 
  7. END 
  8. GO 

...

DB2 SEQUENCE 序列的问题 suny

1、创建索引的时候,最好不要加双引号,比如:

db2 ==> CREATE SEQUENCE "seq_test" ...

应该改为:

db2 ==> CREATE SEQUENCE seq_test ...

加了双引号,表示大小写敏感,如果你使用以下语句去查找序列的话,则会报错:

db2 ==> select (nextval for seq_test) from sysibm.sysdummy1;

SQL0204N  "XXX.SEQ_TEST" is an undefined name.  SQLSTATE=42704

2、select nextval for seq_test from sysibm.syssequences 会列出CACHE缓存中的所有值,获取一个值应该使用:

select (nextval for seq_test) from sysibm.sysdummy1;

或者

select (next value for seq_test) from sysibm.sysdummy1;

3、序列设置开始值

 DB2:ALTER SEQUENCE 序列名  RESTART WITH 下一值

...

DB2 带update,insert的Function函数 cloud

DB2 的自定义函数,默认不允许修改表数据,有INSERT UPDATE DELETE之类的语句则会报错:

The "MODIFIES SQL DATA" clause has not been specified in the CREATE FUNCTION statement for LANGUAGE SQL function "UMP.SEQ" but an examination of the function body reveals that it should be specified.. SQLCODE=-374, SQLSTATE=428C2, DRIVER=3.63.108

如果需要修改表数据,则需要增加 MODIFIES SQL DATA 的修饰符,并且返回类型必须是TABLE,否则会报错:

An SQL TABLE function must return a table result.. SQLCODE=-20120, SQLSTATE=428F1, DRIVER=3.63.108

完整示例:

CREATE FUNCTION seq(seq_name char (20)) RETURNS TABLE(col bigint) MODIFIES SQL DATA
BEGIN ATOMIC
      UPDATE seq SET val=val+1 WHERE NAME=seq_name;
      RETURN (SELECT val FROM seq WHERE NAME=seq_name);
END

Update from 子查询更新 suny

在更新表数据的时候,我们时常需要把另外一个表的关联值的数据更新到当前表,此时就需要用到子查询了:

MS SQL Server的写法:

update child set parent_name =p.name from child c,parent p where c.parent_id=p.id
或者
update child set parent_name =(select name from parent p where p.id=parent_id)

但是MySQL执行如上语句则会报错:
Error Code: 1093. You can´t specify target table ´xxx´ for update in FROM clause

MySQL不支持子查询更新,MySQL我们应该这样写:

update child c inner join parent p on p.id=c.parent_id set c.parent_name=p.name;

mysql导出和导入txt数据 rainy

1:将数据导出生成txt

mysql>select name from user into outfile 't.txt';

t.txt即是你要查询的数据文件,在mysql的安装目录下,你可以使用find . -name 't.txt',全局查询一下即可

2:批量导入文本数据的mysql命令:
mysql> use dbname;
mysql> load data local infile "/data/mobile.txt" into table tbname fields terminated by '\t' lines terminated by '\r\n';

命令说明:
mysql> load data local infile "要导入的文本文件" into table 表名 fields terminated by '\t' lines terminated by '\r\n';
其中fields terminated by 表示字段分隔符
lines terminated by 表示行分隔符(就是行与行之间的分隔符)


...

sql server 锁表 select for update suny

SELECT 语句中“加锁选项”的功能说明

SQL Server提供了强大而完备的锁机制来帮助实现数据库系统的并发性和高性能。用户既能使用SQL Server的缺省设置也可以在select 语句中使用“加锁选项”来实现预期的效果。 本文介绍了SELECT语句中的各项“加锁选项”以及相应的功能说明。

功能说明: 

NOLOCK(不加锁)
此选项被选中时,SQL Server 在读取或修改数据时不加任何锁。 在这种情况下,用户有可能读取到未完成事务(Uncommited Transaction)或回滚(Roll Back)中的数据, 即所谓的“脏数据”。

HOLDLOCK(保持锁)
此选项被选中时,SQL Server 会将此共享锁保持至整个事务结束,而不会在途中释放。

UPDLOCK(修改锁)
此选项被选中时,SQL Server 在读取数据时使用修改锁来代替共享锁,并将此锁保持至整个事务或命令结束。使用此选项能够保证多个进程能同时读取数据但只有该进程能修改数据。

TABLOCK(表锁)
此选项被选中时,SQL Server 将在整个表上置共享锁直至该命令结束。 这个选项保证其他进程只能读取而不能修改数据。

PAGLOCK(页锁)
此选项为默认选项, 当被选中时,SQL Server 使用共享页锁。

TABLOCKX(排它表锁)
...

myBatis 使用Select top 动态参数出现“´@P0´ 附近有语法错误”的解决 cloudy

今天在使用myBatis使用 select top #{num} * from tableName... 传递动态参数的时候会无法执行SQL语句,报错:'@P0'附近有语法错误

最后寻得解决方法应该为:select top ${num} * from tableName...

iBatis2对应语法是:#num# 和 $num$。

具体解释如下:(转自:wangkuoguang的“成长”空间)

1、#是把传入的数据当作字符串,如#field#传入的是id,则sql语句生成是这样,order by "id",这当然会报错。
2、$传入的数据直接生成在sql里,如#field#传入的是id,则sql语句生成是这样,order by id, 这就对了。
3、#方式能够很大程度防止sql注入。
4、$方式无法方式sql注入。
5、$方式一般用于传入数据库对象,例如传入表名。
6、一般能用#的就别用$。


...

[转]Netty Channel 接口名词理解 cloudy

1.Channel
channel 是负责数据读,写的对象,有点类似于老的io里面的stream,他和stream的区别,channel是双向的
既可以write 也可以read,而stream要分outstream和inputstream。而且在NIO中用户不应该直接从channel中读写数据,
而是应该通过buffer,通过buffer再将数据读写到channel中。
一个channel 可以提供给用户下面几个信息
(1)channel的当前状态,比如open 还是closed
...

CentOS 5.3快速搭建Apache+PHP5+MySQL完美Web服务器 suny

LAMP是Linux, Apache, MySQL, PHP组合的简称,本文旨在CentOS 5.3 i386/x86_64上快速安装Apache2 Web服务器,还有PHP、MySQL等支持组件,另外,再简单地介绍一下MySQL管理利器phpMyAdmin的安装。

1. 一些说明
本文将和大家一起在Ubuntu 9.04 Server上快速搭建支持Apache2、PHP5、MySQL的最佳Web服务器。文中使用的一些基础配置信息如下: 

  • hostname:server1.example.com 
  • IP地址:192.168.0.100 

实际应用中,改为自己的相应配置即可。

2. 安装MySQL 5.0
...


Total:20122 Pages