数据库(SQLite)
Oct 1

打开SQLite数据库报异常qAdmin: Cannot perform this operation on a closed dataset的解决方法

当使用SQLite administrator,打开SQLite 数据库,抛出如下异常,
qAdmin: Cannot perform this operation on a closed dataset.

通过dos进去也报错

百度后得知,当出现这种情况时,请查看你的.db数据库的路径是否包含有中文字符。
如果有,把db数据库移到其他英文路径下重新即可。

Tags:
May 3

一直在找一直方法,不去改php.ini 的配置,而是通过动态修改才是来配置,来支持sqlite3.
但是还是不行,因为配置完需要重启。下面为收集的相关比较:

I do not have access to /etc/php.ini and cannot uncomment the lines required to activate php extensions I require.

extensions can only be disabled by editing php.ini 
or use dl() function,such as
***
if (!extension_loaded('php_pdo')) {  
 if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { 
  dl('php_pdo.dll');  
  } else { 
  dl('php_pdo.so'); 
  }
 }

***
but :
Warning: dl() [function.dl]: Not supported in multithreaded Web servers - use extension=php_sqlite.dll

Only if the extension has an attribute for that.
Like:
extension.bla_enabled = 0/1 in php.ini

Then you can set it in runtime by:
ini_set("extension.bla_enabled", "0");

ini_set to update settings of php.ini file
We can't change all the configured settings of php.ini file. PHP will permit to change some data by using ini_set function. We will verify after changing the configured data by using ini_get function. Here is the code. Please note the outputs shown here will change based on your server settings when you try.
echo ini_get('mysql.connect_timeout'); // OUTPUT 60
ini_set('mysql.connect_timeout',100);
echo "<br>";
echo ini_get('mysql.connect_timeout'); // output 100

Tags: ,
May 1

http://cn.php.net/manual/zh/book_sqlite3.php


php5.3_sqlite3_example

刚刚开始使用php+sqlite 的时候,一直以为自己使用的是sqlite3 ,
其实不是,php从php5 >=5.3.0 的时候才开始默认支持sqlite3
参照官方文档http://www.php.net/manual/zh/sqlite3.open.php
默认的方法接口:
public void SQLite3::open ( string $filename [, int $flags = SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE [, string $encryption_key ]] )

利用PHP操作数据库时发现PHP默认只支持到Sqlite2,不支持最新版的Sqlite3。如果想支持Sqlite3就要使用PDO。要想使用PDO,需要在php.ini里面载入php_pdo.dll和php_pdo_sqlite.dll两个模块。如下:
extension=php_pdo.dll
extension=php_pdo_sqlite.dll

如果没有使用pdo ,即使你打开了上面的参数,其实还是使用sqlite2 的,不信你访问
看一下生成的数据库在文件的开头是不是提示:
** This file contains an SQLite 2.1 database **

当php环境没有开启上面支持的配置时将报如下错误:
Fatal error: Call to undefined function sqlite_open()

******sqlite3 demo ***
<html>
<?php
//$dsn = 'sqlite:sql.db';
try
{
//$dbh = new PDO($dsn, $user, $password);  //建立连接
// $dbh = new PDO('sqlite:yourdatabase.db');
$dbh = new PDO('sqlite:itlife365.com');
echo 'Create Db ok' ;
//建表
$dbh->exec("CREATE TABLE itlife365(id integer,name varchar(255))");
echo 'Create Table itlife365 ok<BR>';

$dbh->exec("INSERT INTO itlife365 values(1,'itlife365.com')");
echo 'Insert Data ok<BR>';
$dbh->beginTransaction();
$sth = $dbh->prepare('SELECT * FROM itlife365');
$sth->execute();
//获取结果
$result = $sth->fetchAll();
print_r($result);
$dsn=null;
}
catch (PDOException $e)
{
echo 'Connection failed: ' . $e->getMessage();
$dsn = null;
}
?>
</html>
******
验证:查看数据库:
在文件头显示:
SQLite format 3***


其他例子:
更多例子:
http://www.if-not-true-then-false.com/2012/php-pdo-sqlite3-example/
http://www.php.net/manual/zh/intro.sqlite3.php
when done consulting or administrating a database that relies on PDO access, it is generally a good idea to either issue a

<?php $dbh = null; ?>
or
<?php unset($dbh); ?>
http://cn.php.net/manual/zh/ref.pdo-sqlite.php

Tags: ,
Mar 4
sqlite3 判断非空
下面的两种都可以
select * from itlife365_student  where  id is not null ;
或者
select * from itlife365_student  where  id !='';
Tags:
Feb 12

1、Mysql 分页语法:
SELECT * FROM table LIMIT [offset,] rows
SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset

Mysql select 的语法:
SELECT [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [HIGH_PRIORITY] [DISTINCT | DISTINCTROW | ALL] select_expression,... [INTO OUTFILE 'file_name' export_options] [FROM table_references [WHERE where_definition] [GROUP BY col_name,...] [HAVING where_definition] [ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC] ,...] [LIMIT [offset,] rows] [PROCEDURE procedure_name] ]

LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是 0(而不是 1): 为了与 PostgreSQL 兼容,MySQL 也支持句法: LIMIT # OFFSET #。
其中offset是偏移量,为可选参数,说明从第几行开始读取数据。
rows是返回的结果集的最大行数
这两个参数要求为整数。

例如:
返回前15行产品信息
select * from itlife365 limit 15; 相当于limit 0,15
返回第31到第45行数据
select * from itlife365 limit 30,15; 注意offset的序号从0开始
返回第18行后的所有数据
select * from itlife365 limit 18,-1; 这里-1表示返回所有数据直到记录的最后一行。

【利用limit进行分页】
学习了Limit的用法,下面我们看在MySQL中如何进行分页。
我们假设每页要显示pageSize行数据,当前要显示的是第pageCount页,所用的SQL语句为:

select * from itlife365 limit (pageCount-1)*pageSize,pageSize

其中(pageCount-1)*pageSize是前面几页要显示的行数,共提取pageSize行数据。

2、sqlite3 的分页语法:
官方网站:http://www.sqlite.org/lang_select.html#orderby

sqlite> select * from student limit 5 offset 10

注意:mysql 与sqlite3.exe 分页的参数offset 的位置不同,位置不对将报错。
在hibernate 与sqlite3.exe 进行分页的时候,记得区别。
hibernate 默认传递的值第一个是 offset 的值,第二个是limit的值。
关于hibernate分页的原理查看。


Tags:
分页: 1/2 第一页 1 2 下页 最后页 [ 显示模式: 摘要 | 列表 ]