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

常用数据库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

不受支持的 SQL 类型 1111 rainy

Sybase 的官方驱动 jConnect4 (链接字符串:jdbc:sybase:Tds:127.0.0.1:5000/xxx) 结合myBatis使用时,发现如下问题,当insert或者update语句的变量含有null值,会报错:

 ### Cause: java.sql.SQLException: JZ006: 捕获到 IO 例外:java.io.IOException: JZ0SL: 不受支持的 SQL 类型 1111。

Cause: java.sql.SQLException: JZ006: Caught IOException: java.io.IOException: JZ0SL: Unsupported SQL type 1111.

由于参数出现了null值,myBatis进行操作的时候,指定jdbcType类型的参数时,mybatis默认设置为jdbcType.OTHER,导致Sybase数据库无法识别此格式。

解决方法:给参数加上jdbcType可解决(注意大小写) 。

比如:
insert into xxx(a,b) values(#{a,jdbcType=VARCHAR}, #{b,jdbcType=DATE})
update xxx set a=#{a,jdbcType=VARCHAR} where id=#{id}

目前jdbcType含有以下类型:

ARRAY(Types.ARRAY),
BIT(Types.BIT),
...

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 

...

mysql 安装常见问题 suny

 今天在CentOS下安装mysql碰见几个问题,发出来共享一下:

1、# mysql 命令报错:mysql: command not found
原因是系统找不到mysql的路径,即没有配置环境变量:

# vi /etc/profile

在 pathmunge /usr/local/sbin 下面新增一行:
pathmunge /usr/local/mysql/bin

蓝色字体是你的mysql安装路径。然后保存退出,使其立即生效:

方法1:# source /etc/profile
方法2:# . /etc/profile (注意: . 和 /etc/profile 有空格)

2、启动MySQL报错:Starting MySQL.Manager of pid-file quit without updating fi[FAILED]
查看数据库目录下的err文件内容有如下错误:
File './mysql-bin.index' not found (Errcode: 13)

其实当前目录mysql-bin.index是存在的,但是报错是因为没有写入权限。解决方法:

返回 data 的上一层目录,然后赋予写入权限:
...

MYSQL中TIMESTAMP类型的使用 suny

MYSQL中TIMESTAMP类型的默认值

MYSQL中TIMESTAMP类型可以设定默认值,就像其他类型一样。
1、自动UPDATE 和INSERT 到当前的时间:
表:
---------------------------------
...

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、一般能用#的就别用$。


...

[转]Facebook是如何管理代码的 suny

FaceBook  我对facebook的运转着迷。这是一个很独特的环境,不容易被复制(他们的体系并不适合所有的公司,即使他们努力尝试过)。下面是我和facebook的朋友们关于他们如何开发和管理项目的记录。

  现在距离我收集的这些信息又过去6个月了,我相信facebook肯定又对他们的项目开发实践进行了改进。所以这些记录可能会有点过时。同时facebook的工程师驱动文化也越来越为大众所知。非常感谢那些帮助我整理这篇文章的facebook的朋友们。

  记录: 

...

jSQL Manager Version 1.0.0 Beta(测试版)低调发布 cloudy

什么是jSQL Manager?

      笔者从事JAVA开发2年多,期间开发和维护了不少项目,深知数据库管理的重要性。程序排错、系统更新、日常维护都和数据库管理息息相关。特别是一些在Linux系统部署的系统维护更为头疼,由于采用SSH远程连接,直接在控制台敲命令。SSH没有图形化可视操作,而且对中文的支持也很不友好,数据库管理很不方便。而且大部分系统为了安全考虑,并没有开放数据库和SSH的外网远程访问权限,常常需要使用QQ的远程协助功能和其系统内部的一些技术员进行远程控制操作,受网络传输影响,常常卡得心烦气躁,头疼不已。

      因此,我开始有了开发一个在线管理数据库的软件的想法,jSQL Manager应运而生。

      jSQL Manager是一款基于Java/jsp语言开发的在线管理数据库的软件,适用于MySQL、MSSQL、Oracle的数据库在线管理。(目前测试版仅支持MySQL5)。

...

Linux rpm 命令详解 suny

虽然现在N多人都使用yum去替代rpm了,但是rpm在一些特俗场合下还是有其作用的,比如查询跟验证已安装的rpm包,rpm全称Redhat Package Manager,是一种用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中,它生成具有.RPM扩展名的文件,与Dpkg类似。

1.安装软件包
rpm -ivh ***.rpm 其中i表示安装,v表示输出,h表示用#作进度标记

2.升级软件包
rpm -Uhv ***.rpm

...


Total:3112344 Pages