代码 4. insert TABLE 表的 SQL 插入(insert)语句 5. line 每行一个值 6. list 由 .separator 字符串分隔的值 7. tabs 由 Tab 分隔的值 8. tcl TCL 列表元素
.nullvalue STRING
在 NULL 值的地方输出 STRING 字符串。
.output FILENAME
发送输出到屏幕。
.print STRING
逐字地输出 STRING 字符串
.prompt MAIN CONTINUE
替换标准提示符。
.quit
退出 SQLite 提示符。
.read FILENAME
执行 FILENAME 文件中的 SQL。
.schema ?TABLE?
显示 CREATE 语句。如果指定了 TABLE 表,则只显示匹配 LIKE 模式的 TABLE 表。
.separator STRING
改变输出模式和 .import 所使用的分隔符。
.show
显示各种设置的当前值。
.stats ON/OFF
开启或关闭统计。
.tables ?PATTERN?
列出匹配 LIKE 模式的表的名称。
.timeout MS
尝试打开锁定的表 MS 毫秒。
.width NUM NUM
为 “column” 模式设置列宽度。
.timer ON/OFF
开启或关闭 CPU 定时器。
修改设置值
设置格式化输出
SQLite语法
数据库操作
注释 SQL 注释以两个连续的 “-” 字符为注释。
SQLite遵循SQL标准,语法也大致相似。SQLite与SQL差异和SQLite语法
数据类型
创建数据库 sqlite3 database_name.db
用于创建一个数据库并进入该数据库。如果sqlite3后面没有参数就会进入默认的main
数据库。
也可以通过.open test.db
在main
中新建或打开test数据库。 查看数据库 创建后通过.databses
查看 退出数据库 .quit
退出数据库
导出数据库 .dump
命令来导出完整的数据库在一个文本文件中
sqlite3 testDB.db .dump > testDB.sql
可以通过简单的方式从生成的 testDB.sql 恢复,如下所示:
sqlite3 testDB.db < testDB.sql
表操作
创建表 CREATE TABLE 语句的基本语法:
CREATE TABLE database_name. table_name(
column1 datatype PRIMARY KEY ( one or more columns ) ,
column2 datatype,
column3 datatype,
. . . . .
columnN datatype,
) ;
.tables
查看表
删除表 DROP TABLE 语句:
DROP TABLE COMPANY
修改表 SQLite 的 ALTER TABLE 命令不通过执行一个完整的转储和数据的重载来修改已有的表。您可以使用 ALTER TABLE 语句重命名表,使用 ALTER TABLE 语句还可以在已有的表中添加额外的列。
在 SQLite 中,除了重命名表和在已有的表中添加列,ALTER TABLE 命令不支持其他操作。
重命名已有的表的 ALTER TABLE 的基本语法如下:
ALTER TABLE database_name. table_name RENAME TO new_table_name;
用来在已有的表中添加一个新的列的 ALTER TABLE 的基本语法如下:
ALTER TABLE database_name. table_name ADD COLUMN column_def. . . ;
删除表 DELETE 命令从已有的表中删除全部的数据。
DELETE FROM table_name;
数据操作
插入数据 INSERT INTO 语句用于向数据库的某个表中添加新的数据行。
INSERT INTO TABLE_NAME [ ( column1, column2, column3,.. .columnN) ]
VALUES ( value1, value2, value3,.. .valueN) ;
查询数据
SELECT 语句用于从 SQLite 数据库表中获取数据,以结果表的形式返回数据。这些结果表也被称为结果集。
SELECT column1, column2, columnN FROM table_name;
SELECT * FROM table_name;
可以结合where
,and
,or
来实现条件查询
输出的格式可以通过.mode
命令改变。
使用 SELECT 语句获取并显示所有这些记录。可以通过命令来设置格式化的输出。
sqlite> . header on
sqlite> . mode column
sqlite> SELECT * FROM user ;
格式化输出
有时数据宽度比较长,通过命令设置输出列的宽度。由于要显示的列的默认宽度导致 .mode column
,这种情况下,输出被截断。此时,您可以使用 .width num, num....
命令设置显示列的宽度,如下所示:
sqlite> . width 10 , 20 , 10
sqlite> SELECT * FROM COMPANY;
更新数据 UPDATE 查询用于修改表中已有的记录。可以使用带有 WHERE 子句的 UPDATE 查询来更新选定行,否则所有的行都会被更新。
UPDATE table_name
SET column1 = value1, column2 = value2.. .. , columnN = valueN
WHERE [ condition] ;
删除数据 DELETE 查询用于删除表中已有的记录。可以使用带有 WHERE 子句的 DELETE 查询来删除选定行,否则所有的记录都会被删除。
DELETE FROM table_name
WHERE [ condition] ;
可以使用 AND 或 OR 运算符来结合 N 个数量的条件。
Schema视图
点命令只在 SQLite 提示符中可用,所以当您进行带有 SQLite 的编程时,您要使用下面的带有 sqlite_master 表的 SELECT 语句来列出所有在数据库中创建的表:
# 主视图命名
.schema sqlite_master
# 查询表视图
SELECT tbl_name FROM sqlite_master WHERE type = 'table';
# 表的完整信息
SELECT sql FROM sqlite_master WHERE type = 'table' AND tbl_name = 'COMPANY';
SQLite运算符
算术运算符 比较运算符
逻辑运算符
SQLite表达式 avg()、sum()、count(),等等,执行被称为对一个表或一个特定的表列的汇总数据计算。
SELECT COUNT( *) AS "RECORDS" FROM COMPANY;
日期表达式返回当前系统日期和时间值,这些表达式将被用于各种数据操作。
SELECT CURRENT_TIMESTAMP;
SQLite复杂查询
模糊查询like LIKE 运算符是用来匹配通配符指定模式的文本值。如果搜索表达式与模式表达式匹配,LIKE 运算符将返回真(true),也就是 1。这里有两个通配符与 LIKE 运算符一起使用:
百分号(%)代表零个、一个或多个数字或字符。下划线(_)代表一个单一的数字或字符。这些符号可以被组合使用。
匹配通配符查询 GLOB 运算符是用来匹配通配符指定模式的文本值。如果搜索表达式与模式表达式匹配,GLOB 运算符将返回真(true),也就是 1。与 LIKE 运算符不同的是,GLOB 是大小写敏感的。
星号(*)代表零个、一个或多个数字或字符。问号(?)代表一个单一的数字或字符。这些符号可以被组合使用。
限制查询 LIMIT 子句用于限制由 SELECT 语句返回的数据数量。
SELECT column1, column2, columnN
FROM table_name
LIMIT [ start]
SELECT column1, column2, columnN
FROM table_name
LIMIT [ start] OFFSET [ end]
排序查询 ORDER BY 子句是用来基于一个或多个列按升序或降序顺序排列数据。
SELECT column-list
FROM table_name
[ WHERE condition]
[ ORDER BY column1, column2, .. columnN] [ ASC | DESC] ;
asc升序,desc降序
分组查询 GROUP BY 子句用于与 SELECT 语句一起使用,来对相同的数据进行分组。在 SELECT 语句中,GROUP BY 子句放在 WHERE 子句之后,放在 ORDER BY 子句之前。
SELECT column-list
FROM table_name
WHERE [ conditions ]
GROUP BY column1, column2.. .. columnN
ORDER BY column1, column2.. .. columnN
将group by后的相同字段分为一组
过滤查询 HAVING 子句允许指定条件来过滤将出现在最终结果中的分组结果。WHERE 子句在所选列上设置条件,而 HAVING 子句则在由 GROUP BY 子句创建的分组上设置条件。
SELECT column1, column2
FROM table1, table2
WHERE [ conditions ]
GROUP BY column1, column2
HAVING [ conditions ]
ORDER BY column1, column2
对分组查询再一次过滤
去重查询 SQLite 的 DISTINCT 关键字与 SELECT 语句一起使用,来消除所有重复的记录,并只获取唯一一次记录。
SELECT DISTINCT column1, column2, . . . . . columnN
FROM table_name
WHERE [ condition]
嵌套查询
SQLite 约束
约束是在表的数据列上强制执行的规则。这些是用来限制可以插入到表中的数据类型。这确保了数据库中数据的准确性和可靠性。
约束可以是列级或表级。列级约束仅适用于列,表级约束被应用到整个表。
NOT NULL 约束 默认情况下,列可以保存 NULL 值。如果您不想某列有 NULL 值,那么需要在该列上定义此约束,指定在该列上不允许 NULL 值。
CREATE TABLE COMPANY(
ID INT PRIMARY KEY NOT NULL ,
NAME TEXT NOT NULL ,
AGE INT NOT NULL ,
ADDRESS CHAR ( 50 ) ,
SALARY REAL
) ;
DEFAULT 约束 DEFAULT 约束在 INSERT INTO 语句没有提供一个特定的值时,为列提供一个默认值。
CREATE TABLE COMPANY(
ID INT PRIMARY KEY NOT NULL ,
NAME TEXT NOT NULL ,
AGE INT NOT NULL ,
ADDRESS CHAR ( 50 ) ,
SALARY REAL DEFAULT 50000.00
) ;
UNIQUE 约束 UNIQUE 约束防止在一个特定的列存在两个记录具有相同的值。
CREATE TABLE COMPANY(
ID INT PRIMARY KEY NOT NULL ,
NAME TEXT NOT NULL ,
AGE INT NOT NULL UNIQUE ,
ADDRESS CHAR ( 50 ) ,
SALARY REAL DEFAULT 50000.00
) ;
PRIMARY KEY 约束 PRIMARY KEY 约束唯一标识数据库表中的每个记录。在一个表中可以有多个 UNIQUE 列,但只能有一个主键。在设计数据库表时,主键是很重要的。主键是唯一的 ID。
主键是表中的一个字段,唯一标识数据库表中的各行/记录。主键必须包含唯一值。主键列不能有 NULL 值。
一个表只能有一个主键,它可以由一个或多个字段组成。当多个字段作为主键,它们被称为复合键。
CREATE TABLE COMPANY(
ID INT PRIMARY KEY NOT NULL ,
NAME TEXT NOT NULL ,
AGE INT NOT NULL ,
ADDRESS CHAR ( 50 ) ,
SALARY REAL
) ;
CHECK 约束 CHECK 约束启用输入一条记录要检查值的条件。如果条件值为 false,则记录违反了约束,且不能输入到表。
CREATE TABLE COMPANY3(
ID INT PRIMARY KEY NOT NULL ,
NAME TEXT NOT NULL ,
AGE INT NOT NULL ,
ADDRESS CHAR ( 50 ) ,
SALARY REAL CHECK ( SALARY > 0 )
) ;
SQLite 支持 ALTER TABLE 的有限子集。在 SQLite 中,ALTER TABLE 命令允许用户重命名表,或向现有表添加一个新的列。重命名列,删除一列,或从一个表中添加或删除约束都是不可能的。
Autoincrement(自动递增)自增约束 SQLite 的 AUTOINCREMENT 是一个关键字,用于表中的字段值自动递增。我们可以在创建表时在特定的列名称上使用 AUTOINCREMENT 关键字实现该字段值的自动增加。关键字 AUTOINCREMENT 只能用于整型(INTEGER)字段。
CREATE TABLE table_name(
column1 INTEGER AUTOINCREMENT,
column2 datatype,
column3 datatype,
. . . . .
columnN datatype,
) ;
SQLite连接查询
SQLite 的 Join 子句用于结合两个或多个数据库中表的记录。JOIN 是一种通过共同值来结合两个表中字段的手段。
交叉连接(CROSS JOIN)把第一个表的每一行与第二个表的每一行进行匹配。如果两个输入表分别有 x 和 y 行,则结果表有 x*y 行。由于交叉连接(CROSS JOIN)有可能产生非常大的表,使用时必须谨慎,只在适当的时候使用它们。
SELECT . . . FROM table1 CROSS JOIN table2 . . .
交叉连接的操作,它们都返回被连接的两个表所有数据行的笛卡尔积,返回到的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。
内连接(INNER JOIN)根据连接谓词结合两个表(table1 和 table2)的列值来创建一个新的结果表。查询会把 table1 中的每一行与 table2 中的每一行进行比较,找到所有满足连接谓词的行的匹配对。当满足连接谓词时,A 和 B 行的每个匹配对的列值会合并成一个结果行。
内连接(INNER JOIN)是最常见的连接类型,是默认的连接类型。INNER 关键字是可选的。
SELECT . . . FROM table1 [ INNER ] JOIN table2 ON conditional_expression . . .
外连接(OUTER JOIN)是内连接(INNER JOIN)的扩展。虽然 SQL 标准定义了三种类型的外连接:LEFT、RIGHT、FULL,但 SQLite 只支持 左外连接(LEFT OUTER JOIN)。
外连接(OUTER JOIN)声明条件的方法与内连接(INNER JOIN)是相同的,使用 ON、USING 或 NATURAL 关键字来表达。最初的结果表以相同的方式进行计算。一旦主连接计算完成,外连接(OUTER JOIN)将从一个或两个表中任何未连接的行合并进来,外连接的列使用 NULL 值,将它们附加到结果表中。
SELECT . . . FROM table1 LEFT OUTER JOIN table2 ON conditional_expression . . .
查询连接
SQLite的 UNION 子句/运算符用于合并两个或多个 SELECT 语句的结果,不返回任何重复的行。
为了使用 UNION,每个 SELECT 被选择的列数必须是相同的,相同数目的列表达式,相同的数据类型,并确保它们有相同的顺序,但它们不必具有相同的长度。
SELECT column1 [ , column2 ]
FROM table1 [ , table2 ]
[ WHERE condition]
UNION
SELECT column1 [ , column2 ]
FROM table1 [ , table2 ]
[ WHERE condition]
UNION ALL 运算符用于结合两个 SELECT 语句的结果,包括重复行。适用于 UNION 的规则同样适用于 UNION ALL 运算符。
SELECT column1 [ , column2 ]
FROM table1 [ , table2 ]
[ WHERE condition]
UNION ALL
SELECT column1 [ , column2 ]
FROM table1 [ , table2 ]
[ WHERE condition]
SQLite 事务
事务(Transaction)是一个对数据库执行工作单元。事务(Transaction)是以逻辑顺序完成的工作单位或序列,可以是由用户手动操作完成,也可以是由某种数据库程序自动完成。
BEGIN TRANSACTION 命令 事务(Transaction)可以使用 BEGIN TRANSACTION 命令或简单的 BEGIN 命令来启动。此类事务通常会持续执行下去,直到遇到下一个 COMMIT 或 ROLLBACK 命令。不过在数据库关闭或发生错误时,事务处理也会回滚。
BEGIN ;
or
BEGIN TRANSACTION ;
COMMIT 命令 COMMIT 命令是用于把事务调用的更改保存到数据库中的事务命令。
COMMIT ;
or
END TRANSACTION ;
ROLLBACK 命令 ROLLBACK 命令是用于撤消尚未保存到数据库的事务的事务命令。
ROLLBACK ;
SQLite常用函数
SELECT count ( * ) FROM COMPANY;
SELECT max ( salary) FROM COMPANY;
SELECT min ( salary) FROM COMPANY;
时间和日期
修饰符(Modifier)时间字符串后边可跟着零个或多个的修饰符,这将改变有上述五个函数返回的日期和/或时间。
SQLite接口
Java接口
在 Java 程序中使用 SQLite 之前,我们需要确保机器上已经有 SQLite JDBC Driver 驱动程序。并且在 classpath路径中添加下载的 jar 文件 sqlite-jdbc-(VERSION).jar工具包。
连接sqlite数据库
import java. sql. * ;
public class SQLiteJDBC
{
public static void main ( String args[ ] )
{
Connection c = null ;
try {
Class . forName ( "org.sqlite.JDBC" ) ;
c = DriverManager . getConnection ( "jdbc:sqlite:test.db" ) ;
} catch ( Exception e ) {
System . err. println ( e. getClass ( ) . getName ( ) + ": " + e. getMessage ( ) ) ;
System . exit ( 0 ) ;
}
System . out. println ( "Opened database successfully" ) ;
}
}
创建表 和JDBC操作差不多。
import java. sql. * ;
public class SQLiteJDBC
{
public static void main ( String args[ ] )
{
Connection c = null ;
Statement stmt = null ;
try {
Class . forName ( "org.sqlite.JDBC" ) ;
c = DriverManager . getConnection ( "jdbc:sqlite:test.db" ) ;
System . out. println ( "Opened database successfully" ) ;
stmt = c. createStatement ( ) ;
String sql = "CREATE TABLE COMPANY " +
"(ID INT PRIMARY KEY NOT NULL," +
" NAME TEXT NOT NULL, " +
" AGE INT NOT NULL, " +
" ADDRESS CHAR(50), " +
" SALARY REAL)" ;
stmt. executeUpdate ( sql) ;
stmt. close ( ) ;
c. close ( ) ;
} catch ( Exception e ) {
System . err. println ( e. getClass ( ) . getName ( ) + ": " + e. getMessage ( ) ) ;
System . exit ( 0 ) ;
}
System . out. println ( "Table created successfully" ) ;
}
}
INSERT 操作
import java. sql . * ;
public class SQLiteJDBC
{
public static void main( String args[ ] )
{
Connection c = null ;
Statement stmt = null ;
try {
Class. forName( "org.sqlite.JDBC" ) ;
c = DriverManager. getConnection( "jdbc:sqlite:test.db" ) ;
c. setAutoCommit( false ) ;
System. out . println( "Opened database successfully" ) ;
stmt = c. createStatement( ) ;
String sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " +
"VALUES (1, 'Paul', 32, 'California', 20000.00 );" ;
stmt. executeUpdate( sql ) ;
sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " +
"VALUES (2, 'Allen', 25, 'Texas', 15000.00 );" ;
stmt. executeUpdate( sql ) ;
sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " +
"VALUES (3, 'Teddy', 23, 'Norway', 20000.00 );" ;
stmt. executeUpdate( sql ) ;
sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " +
"VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 );" ;
stmt. executeUpdate( sql ) ;
stmt. close ( ) ;
c. commit ( ) ;
c. close ( ) ;
} catch ( Exception e ) {
System. err. println( e. getClass( ) . getName( ) + ": " + e. getMessage( ) ) ;
System. exit ( 0 ) ;
}
System. out . println( "Records created successfully" ) ;
}
}
SELECT 操作
import java. sql . * ;
public class SQLiteJDBC
{
public static void main( String args[ ] )
{
Connection c = null ;
Statement stmt = null ;
try {
Class. forName( "org.sqlite.JDBC" ) ;
c = DriverManager. getConnection( "jdbc:sqlite:test.db" ) ;
c. setAutoCommit( false ) ;
System. out . println( "Opened database successfully" ) ;
stmt = c. createStatement( ) ;
ResultSet rs = stmt. executeQuery( "SELECT * FROM COMPANY;" ) ;
while ( rs. next ( ) ) {
int id = rs. getInt( "id" ) ;
String name = rs. getString( "name" ) ;
int age = rs. getInt( "age" ) ;
String address = rs. getString( "address" ) ;
float salary = rs. getFloat( "salary" ) ;
System. out . println( "ID = " + id ) ;
System. out . println( "NAME = " + name ) ;
System. out . println( "AGE = " + age ) ;
System. out . println( "ADDRESS = " + address ) ;
System. out . println( "SALARY = " + salary ) ;
System. out . println( ) ;
}
rs. close ( ) ;
stmt. close ( ) ;
c. close ( ) ;
} catch ( Exception e ) {
System. err. println( e. getClass( ) . getName( ) + ": " + e. getMessage( ) ) ;
System. exit ( 0 ) ;
}
System. out . println( "Operation done successfully" ) ;
}
}
UPDATE 操作
import java. sql . * ;
public class SQLiteJDBC
{
public static void main( String args[ ] )
{
Connection c = null ;
Statement stmt = null ;
try {
Class. forName( "org.sqlite.JDBC" ) ;
c = DriverManager. getConnection( "jdbc:sqlite:test.db" ) ;
c. setAutoCommit( false ) ;
System. out . println( "Opened database successfully" ) ;
stmt = c. createStatement( ) ;
String sql = "UPDATE COMPANY set SALARY = 25000.00 where ID=1;" ;
stmt. executeUpdate( sql ) ;
c. commit ( ) ;
ResultSet rs = stmt. executeQuery( "SELECT * FROM COMPANY;" ) ;
while ( rs. next ( ) ) {
int id = rs. getInt( "id" ) ;
String name = rs. getString( "name" ) ;
int age = rs. getInt( "age" ) ;
String address = rs. getString( "address" ) ;
float salary = rs. getFloat( "salary" ) ;
System. out . println( "ID = " + id ) ;
System. out . println( "NAME = " + name ) ;
System. out . println( "AGE = " + age ) ;
System. out . println( "ADDRESS = " + address ) ;
System. out . println( "SALARY = " + salary ) ;
System. out . println( ) ;
}
rs. close ( ) ;
stmt. close ( ) ;
c. close ( ) ;
} catch ( Exception e ) {
System. err. println( e. getClass( ) . getName( ) + ": " + e. getMessage( ) ) ;
System. exit ( 0 ) ;
}
System. out . println( "Operation done successfully" ) ;
}
}
DELETE 操作
import java. sql . * ;
public class SQLiteJDBC
{
public static void main( String args[ ] )
{
Connection c = null ;
Statement stmt = null ;
try {
Class. forName( "org.sqlite.JDBC" ) ;
c = DriverManager. getConnection( "jdbc:sqlite:test.db" ) ;
c. setAutoCommit( false ) ;
System. out . println( "Opened database successfully" ) ;
stmt = c. createStatement( ) ;
String sql = "DELETE from COMPANY where ID=2;" ;
stmt. executeUpdate( sql ) ;
c. commit ( ) ;
ResultSet rs = stmt. executeQuery( "SELECT * FROM COMPANY;" ) ;
while ( rs. next ( ) ) {
int id = rs. getInt( "id" ) ;
String name = rs. getString( "name" ) ;
int age = rs. getInt( "age" ) ;
String address = rs. getString( "address" ) ;
float salary = rs. getFloat( "salary" ) ;
System. out . println( "ID = " + id ) ;
System. out . println( "NAME = " + name ) ;
System. out . println( "AGE = " + age ) ;
System. out . println( "ADDRESS = " + address ) ;
System. out . println( "SALARY = " + salary ) ;
System. out . println( ) ;
}
rs. close ( ) ;
stmt. close ( ) ;
c. close ( ) ;
} catch ( Exception e ) {
System. err. println( e. getClass( ) . getName( ) + ": " + e. getMessage( ) ) ;
System. exit ( 0 ) ;
}
System. out . println( "Operation done successfully" ) ;
}
}
Python接口
Python定义了一套操作数据库的API接口,任何数据库要连接到Python,只需要提供符合Python标准的数据库驱动即可。由于SQLite的驱动内置在Python标准库中,所以我们可以直接来操作SQLite数据库。
Python sqlite3 模块 API
连接数据库
import sqlite3
conn = sqlite3. connect( 'test.db' )
创建表
import sqlite3
conn = sqlite3. connect( 'test.db' )
print ( "数据库打开成功" )
c = conn. cursor( )
c. execute( '''CREATE TABLE COMPANY
(ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL);''' )
print ( "数据表创建成功" )
conn. commit( )
conn. close( )
INSERT 操作
import sqlite3
conn = sqlite3. connect( 'test.db' )
c = conn. cursor( )
print ( "数据库打开成功" )
c. execute( "INSERT INTO COMPANY ( ID, NAME, AGE, ADDRESS, SALARY) \
VALUES ( 1 , 'Paul' , 32 , 'California' , 20000.00 ) ")
c. execute( "INSERT INTO COMPANY ( ID, NAME, AGE, ADDRESS, SALARY) \
VALUES ( 2 , 'Allen' , 25 , 'Texas' , 15000.00 ) ")
c. execute( "INSERT INTO COMPANY ( ID, NAME, AGE, ADDRESS, SALARY) \
VALUES ( 3 , 'Teddy' , 23 , 'Norway' , 20000.00 ) ")
c. execute( "INSERT INTO COMPANY ( ID, NAME, AGE, ADDRESS, SALARY) \
VALUES ( 4 , 'Mark' , 25 , 'Rich-Mond ' , 65000.00 ) ")
conn. commit( )
print ( "数据插入成功" )
conn. close( )
SELECT 操作 =
import sqlite3
conn = sqlite3. connect( 'test.db' )
c = conn. cursor( )
print ( "数据库打开成功" )
cursor = c. execute( "SELECT id, name, address, salary from COMPANY" )
for row in cursor:
print "ID = " , row[ 0 ]
print "NAME = " , row[ 1 ]
print "ADDRESS = " , row[ 2 ]
print "SALARY = " , row[ 3 ] , "\n"
print ( "数据操作成功" )
conn. close( )
UPDATE 操作
import sqlite3
conn = sqlite3. connect( 'test.db' )
c = conn. cursor( )
print ( "数据库打开成功" )
c. execute( "UPDATE COMPANY set SALARY = 25000.00 where ID=1" )
conn. commit( )
print "Total number of rows updated :" , conn. total_changes
cursor = conn. execute( "SELECT id, name, address, salary from COMPANY" )
for row in cursor:
print "ID = " , row[ 0 ]
print "NAME = " , row[ 1 ]
print "ADDRESS = " , row[ 2 ]
print "SALARY = " , row[ 3 ] , "\n"
print ( "数据操作成功" )
conn. close( )
DELETE 操作
import sqlite3
conn = sqlite3. connect( 'test.db' )
c = conn. cursor( )
print ( "数据库打开成功" )
c. execute( "DELETE from COMPANY where ID=2;" )
conn. commit( )
print "Total number of rows deleted :" , conn. total_changes
cursor = conn. execute( "SELECT id, name, address, salary from COMPANY" )
for row in cursor:
print "ID = " , row[ 0 ]
print "NAME = " , row[ 1 ]
print "ADDRESS = " , row[ 2 ]
print "SALARY = " , row[ 3 ] , "\n"
print ( "数据操作成功" )
conn. close( )
案例
import os, sqlite3
db_file = os. path. join( os. path. dirname( __file__) , 'test.db' )
if os. path. isfile( db_file) :
os. remove( db_file)
conn = sqlite3. connect( db_file)
cursor = conn. cursor( )
cursor. execute( 'create table user(id varchar(20) primary key, name varchar(20), score int)' )
cursor. execute( r"insert into user values ('A-001', 'Adam', 95)" )
cursor. execute( r"insert into user values ('A-002', 'Bart', 62)" )
cursor. execute( r"insert into user values ('A-003', 'Lisa', 78)" )
conn. commit( )
cursor. close( )
conn. close( )
def get_score_in ( low, high) :
cursor. execute( "select * from user where score between(%s,%s)" , low, high)
assert get_score_in( 80 , 95 ) == [ 'Adam' ] , get_score_in( 80 , 95 )
assert get_score_in( 60 , 80 ) == [ 'Bart' , 'Lisa' ] , get_score_in( 60 , 80 )
assert get_score_in( 60 , 100 ) == [ 'Bart' , 'Lisa' , 'Adam' ] , get_score_in( 60 , 100 )
print ( "successful" )
你可能感兴趣的:(数据库,sqlite)
Oracle证书靠谱吗?值得考吗?
噗老师
Oracle认证 oracle 数据库
Oracle认证在数据库管理领域享有极高的声誉和价值,是许多专业人士职业生涯中的重要里程碑。那么,Oracle认证是否值得投入时间和精力去考取呢?这个问题的答案很大程度上取决于你的职业规划、个人兴趣和对未来的展望。首先,Oracle认证的价值还体现在其广泛的行业需求上。在金融、医疗、政府等多个行业中,对数据库管理和分析的依赖性日益增加,这导致了对Oracle专业人才的巨大需求。Oracle数据库在
python flask 使用教程 快速搭建一个 Web 应用
莫忘初心丶
python flask 前端
目录一、Flask简介二、Flask安装三、创建一个简单的Flask应用四、Flask路由与视图五、接收和处理用户输入六、模板引擎Jinja2七、Flask与数据库八、总结一、Flask简介Flask是一个轻量级的PythonWeb框架,旨在帮助开发者快速搭建Web应用。相比于Django等重量级框架,Flask更加简洁和灵活,非常适合用于小型Web项目的开发,甚至可以用于构建RESTfulAPI
Oracle OCP认证是否值得考?
博睿谷IT99_
数据库 oracle 开闭原则 数据库
OracleOCP(OracleCertifiedProfessional)认证是数据库领域的传统权威认证,但随着云数据库和开源技术的崛起,其价值正面临分化。是否值得考取,需结合你的职业定位、行业需求及长期规划综合判断。以下是关键分析:一、什么情况下值得考?1.职业定位明确:扎根传统数据库领域适用人群:从事金融、电信、能源等传统行业的DBA(数据库管理员);需维护Oracle旧版本(如11g/12
【MySQL基础-10】MySQL中的LENGTH()函数:用法详解与实例分析
AllenBright
# MySQL mysql 数据库
在MySQL数据库中,LENGTH()函数是一个非常常用的字符串函数,用于计算字符串的字节长度。理解并掌握LENGTH()函数的用法,对于处理字符串数据、优化查询以及进行数据验证都非常有帮助。本文将详细介绍LENGTH()函数的用法,并通过实例演示其在实际中的应用。1.LENGTH()函数的基本语法LENGTH()函数的基本语法如下:LENGTH(str)str:要计算长度的字符串或字段。可以是字
MySQL的多租户和多云部署架构设计
vipfanxu
mysql 数据库
引言MySQL是一种流行的关系型数据库管理系统,被广泛应用于大型企业和云计算环境中。随着云计算的兴起,多租户和多云部署的需求逐渐增加。本文将探讨MySQL在多租户和多云部署架构设计方面的考虑和实践。一、多租户部署架构设计多租户是指在一个系统中,通过虚拟化技术将多个租户隔离开来,每个租户都拥有自己的独立环境和资源。在MySQL的多租户部署架构设计中,需要考虑以下几个方面:数据库隔离、数据安全和性能优
麒麟服务器操作系统Redis部署手册
太极淘
麒麟操作系统管理工具 服务器 redis 运维
软件简介Redis****介绍REmoteDIctionaryServer(Redis)是一个由SalvatoreSanfilippo写的key-value存储系统,是跨平台的非关系型数据库。Redis是一个开源的使用ANSIC语言编写、遵守BSD协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的API。Redis通常被称为数据结构服务器,因为
达梦主备集群部署
sunny05296
数据库 数据库 达梦
DM数据守护(DataWatch)介绍DM数据守护(DataWatch)是一种集成化的高可用、高性能数据库解决方案,是数据库异地容灾的首选方案。达梦数据守护可快速恢复服务,只需数秒时间就可以将备库切换为主库对外提供数据库服务。DM数据守护提供多种解决方案,可以配置成实时主备、MPP主备、DMDSC主备或读写分离集群。实时主备由一个主库以及一个或者多个配置了实时(Realtime)归档的备库组成,其
麒麟服务器操作系统PostgreSQL环境部署手册
太极淘
麒麟操作系统管理工具 linux 服务器
软件简介PostgreSQL是一个免费的对象-关系数据库服务器(ORDBMS),在灵活的BSD许可证下发行。ORDBMS(对象关系数据库系统)是面向对象技术与传统的关系数据库相结合的产物,查询处理是ORDBMS的重要组成部分,它的性能优劣将直接影响到DBMS的性能。软件环境操作系统环境操作系统版本操作系统架构银河麒麟服务器操作系统V10SP系列X86-64银河麒麟服务器操作系统V10SP系列ARM
查询、插入、更新、删除数据的SQL语句(SQLite)
C++ 老炮儿的技术栈
sql c++ 算法 笔记 学习
以下以SQLite数据库为例,展示在C++中使用SQLite库来执行查询、插入、更新和删除数据的操作示例代码。首先确保你已经安装了SQLite库,并且在C++项目中包含了相关的头文件。#include#include#include//回调函数,用于查询结果处理staticintcallback(void*NotUsed,intargc,char**argv,char**azColName){fo
nebula graph传统使用Docker进行项目发版
boy快快长大
解决问题合集 Nebula Graph数据库 docker java 容器
nebulagraph传统使用Docker进行项目发版1.nebulagraph服务2.搭建ES集群3.注意事项3.1图数据库的启动顺序3.2模糊查询失效1.nebulagraph服务1.在测试服务器中执行如下命令dockercommit85b6e2b8xxxxxx_nebula_es:1.0.0.2执行dockerimages之后能看到新的镜像xxx_nebula_es:1.0.0.2这里将测试
DMDDM文档数据库学习分享
合作愉快:)
数据库 学习
达梦新云文档数据库(简称DMDDM),是一款由达梦公司独立研发的分布式原生文档数据库产品。一、关键特性1、高性能、高可用性:DMDDM文档数据库支持快速的数据读写操作,能够满足高性能应用的需求。支持主备集群和分布式集群部署方式,单个节点故障不影响整个系统的正常运行。提供DDM-Meta、DDM-Store和DDM-Engine三个核心组件,分别负责存储数据库元数据和集群调度、存储实际的数据库数据以
达梦数据库学习笔记
lwq979991632
数据库
达梦数据库学习资料一、操作系统安装1、配置信息CPU:4核心内存:4G网络:NAT2.安装包选择选择带GUI的服务器,勾选Java平台、KDE二、安装前准备1.数据库远程访问:关闭防火墙systemctlstopfirewalld(禁用)systemctldisablefirewalld(停止,关闭开机自启动)systemctlstatusfirewalld(查看状态)2.安装gcc包rpm-qa
达梦数据库学习之旅
不是,哥们~
数据库 学习
一、开篇:走进达梦数据库的世界在当今数字化浪潮汹涌澎湃的时代,数据已然成为企业乃至国家发展的核心驱动力,而数据库作为数据存储、管理与高效运用的关键基础设施,其重要性不言而喻。达梦数据库,作为国产数据库领域的璀璨明珠,正凭借其卓越性能、高度可靠性以及强大的自主可控特性,在金融、电信、政务等诸多关键行业崭露头角,逐步打破国外数据库产品长期以来的垄断格局。对于广大技术爱好者与从业者而言,深入学习达梦数据
利用Pinecone和Hybrid Search实现高效向量检索
dgay_hua
python
在当今数据驱动的世界中,快速准确的信息检索变得尤为重要。Pinecone作为一个功能强大的向量数据库,提供了广泛的功能,包括HybridSearch。本文将详细介绍如何使用Pinecone和HybridSearch构建高效的信息检索系统。1.技术背景介绍Pinecone是专为高效向量检索设计的数据库,可以处理高维数据。HybridSearch结合了密集向量和稀疏向量检索的优势,在提高检索准确性的同
【达梦数据库学习】数据库体系架构-逻辑结构理解
合作愉快:)
数据库 数据库架构 学习
1.1数据库和实例在有些情况下,数据库的概念包含的内容会很广泛。如在单独提到DM数据库时,可能指的是DM数据库产品,也有可能是正在运行的DM数据库实例,还可能是DM数据库运行中所需的一系列物理文件的集合等。但是,当同时出现DM数据库和实例时,DM数据库指的是磁盘上存放在DM数据库中的数据的集合,一般包括:数据文件、日志文件、控制文件以及临时数据文件等。实例一般是由一组正在运行的DM后台进程/线程以
青少年编程与数学 02-011 MySQL数据库应用 09课题、规则、约束和默认值
明月看潮生
编程与数学 第02阶段 数据库 青少年编程 mysql 编程与数学
青少年编程与数学02-011MySQL数据库应用09课题、规则、约束和默认值一、规则1.规则的概念2.规则的类型3.规则的定义和应用3.1创建表3.2定义规则3.3应用规则4.规则的管理和维护5.规则的性能影响6.其他相关概念二、规则应用示例(一)、检查约束(CHECKConstraints)示例1.限制年龄范围2.限制性别取值(二)、触发器(Triggers)示例1.自动记录日志2.防止非法删除
springboot 项目如何提高并发量
LCY133
spring后端 spring boot java 后端
提升基于SpringBoot的Web项目并发量需要从应用优化、数据库调优、缓存策略、异步处理、水平扩展等多方面综合改进。以下是具体方案和实践建议:一、应用层优化1.代码性能优化•避免阻塞操作:减少同步锁、长事务、大文件处理等耗时操作。•优化SQL查询:避免N+1查询,使用索引,减少全表扫描。•复用对象:避免频繁创建大对象(如JSON解析工具),使用线程安全对象池。2.线程池配置•调整Web服务器线
oracle数据库——游标 隐式游标 显式游标 带参数的游标 带锁的游标 动态游标 强类型
一JJL
数据库 游标 隐式游标 显式游标 带参数的游标 带锁的游标 动态游标 强类型
游标逐行提取查询结果,所以返回结果可以超过一行%NOTFOUND--如果FETCH语句失败,则该属性为"TRUE",否则为"FALSE";%FOUND--如果FETCH语句成功,则该属性为"TRUE",否则为"FALSE";%ROWCOUNT--返回游标当前行的行数;1.隐式游标--查看修改数据后会影响到多少行数据beginupdateempsetsal=sal+100wheredeptno=&d
MySQL海量数据深度分页优化——后端开发
技术征途者
mysql 数据库
在后端开发中,当面对MySQL数据库中包含千万级别的数据,并需要进行深度分页查询时,需要考虑优化的问题。在本文中,我们将探讨如何有效地优化MySQL数据库的深度分页查询,以提高查询性能和响应速度。使用索引优化查询索引在数据库查询中起着至关重要的作用。在处理海量数据时,为需要进行深度分页的字段创建合适的索引是提高查询性能的关键。通常情况下,使用主键或唯一键作为排序字段,并为需要筛选的字段和排序字段创
如何解决MySQL 的深度分页问题?
运维小雅
mysql 数据库
前言在构建高性能、可扩展的Web应用程序时,数据库查询性能往往是影响整体系统响应速度的关键因素之一。尤其是在处理大规模数据时,如何高效地进行分页查询成为了开发者需要重点关注的问题。本文将深入探讨MySQL中LIMIT...OFFSET...语法带来的性能挑战,并介绍一种更高效的解决方案——游标分页方法(CursorPagination)。背景介绍假设我们有一个包含500万条记录的表my_table
Python, C ++开发工厂管理APP
Geeker-2025
python c++
开发一款通用的**工厂管理App**,结合Python和C++的优势,可以实现高效的后端数据处理、实时的生产监控以及用户友好的前端界面。以下是一个详细的开发方案,涵盖技术选型、功能模块、开发步骤等内容。##技术选型###后端(Python)-**编程语言**:Python-**Web框架**:Django或Flask-**数据库**:PostgreSQL或MySQL-**实时通信**:WebSoc
Flink Cdc TiDB详解
24k小善
flink 大数据 java
1.什么是FlinkTiDBCDC?简单说就是用Flink实时抓取TiDB数据库的数据变化(比如新增、修改、删除),并将这些变化数据以流的形式处理,用于实时分析、同步到其他系统等场景。TiDB本身是分布式数据库,而Flink是流处理引擎,两者的结合适合需要高吞吐、低延迟的大规模数据处理场景[7][8]。2.底层原理TiDB侧:通过TiCDC组件(TiDB的变更数据捕获工具)捕获数据变更,类似MyS
Flink CDC 与 SeaTunnel CDC 简单对比
窝窝和牛牛
flink 大数据 cdc SeaTunnel
FlinkCDC与SeaTunnelCDC简单对比CDC技术概述变更数据捕获(ChangeDataCapture,简称CDC)是一种用于捕获数据库中数据变更的技术,能够实时识别、捕获并输出数据库中的插入、更新和删除操作。CDC技术在现代数据架构中扮演着至关重要的角色,特别是在实时数据集成、数据同步和事件驱动架构等场景中。CDC的工作原理CDC主要通过以下几种方式捕获数据变更:基于日志的CDC:直接
MySQL 8.0新特性深度解析:窗口函数与JSON数据处理的10大技巧
墨瑾轩
一起学学数据库【一】 mysql json
关注墨瑾轩,带你探索编程的奥秘!超萌技术攻略,轻松晋级编程高手技术宝库已备好,就等你来挖掘订阅墨瑾轩,智趣学习不孤单即刻启航,编程之旅更有趣第1章:MySQL8.0简介嗨,亲爱的小伙伴们!欢迎来到MySQL8.0的奇妙世界,这里充满了新鲜和惊喜。MySQL8.0是一个数据库界的超级英雄,它带着一系列令人兴奋的新特性,比如窗口函数和JSON数据处理,来拯救我们的数据处理任务。1.1MySQL8.0的
【MySQL】事务
熬夜超级玩家
MySQL数据库 mysql android 数据库
目录基本概念事务操作自动提交事务开启事务提交事务回滚事务代码示例事务的特性ACID事务的隔离级别读未提交readuncommitted读已提交readcommitted可重复读repeatableread序列化(串行)serializable操作示例基本概念在MySQL中的事务(Transaction)是由存储引擎实现的,在MySQL中,只有InnoDB存储引擎才支持事务事务处理可以用来维护数据库
Node.js系列(2)--性能优化指南
一进制ᅟᅠ
Node.js node.js 性能优化
Node.js性能优化指南⚡引言Node.js应用的性能优化是确保应用高效运行的关键。本文将深入探讨Node.js性能优化的各个方面,包括内存管理、CPU优化、I/O优化等,帮助开发者构建高性能的Node.js应用。性能优化概述Node.js性能优化主要包括以下方面:内存优化:内存泄漏检测、垃圾回收优化CPU优化:代码执行效率、异步处理、工作线程I/O优化:文件操作、网络请求、数据库访问缓存优化:
查询数据库中第n行数据
weixin_44231698
一般情况下分页的时候是需要的关键字。Oracle中则是rownum,MSSQL中是top关键字,MySQL中是limit关键字。查第n条数据,如:(1)select*from(SELECTROWNUMrn,A.*FROMTABLEA)bwhereb.rn=n;(2)selecttop1*fromTABLEAwhereidnotin(selecttopn-1idfromTABLEA);(3)用mys
深度剖析哈希表数据结构:原理、冲突解决与优化策略
麻辣酸甜
笔记
摘要哈希表作为一种高效的数据结构,在计算机科学领域广泛应用。本文深入探讨哈希表的工作原理,详细分析常见的冲突解决方法,如开放地址法、链地址法等,并进一步研究哈希表在不同场景下的优化策略,旨在帮助读者全面理解哈希表数据结构及其应用。一、引言在计算机程序中,快速查找和插入数据是常见需求。哈希表以其平均时间复杂度为O(1)的高效查找和插入特性,成为解决这类问题的有力工具。从数据库索引到编程语言的集合类实
【 现代后端架构演进:微服务设计与云原生】
蝉叫醒了夏天
架构 云原生 微服务
现代后端架构演进:微服务设计与云原生一、架构演进历程1.单体架构到分布式系统单体架构瓶颈典型问题:代码耦合(代码行超百万级)、扩展困难(垂直扩容成本>105>10^5>105美元/节点)、技术栈固化故障扩散:数据库连接池耗尽导致全站瘫痪SOA(面向服务架构)引入ESB(企业服务总线),服务间通信延迟增加30-50ms典型案例:电信计费系统(服务拆分粒度以模块为单位)2.微服务革命(2014-)核心
AWS SAP学习笔记-概念
HainesFreeman
AWS aws
1、什么是ETL应用程序,举个例子说明?ETL(Extract,Transform,Load)应用程序是一种用于数据处理和迁移的工具或程序,它主要负责从多个数据源提取数据,对数据进行转换和清洗,然后将处理后的数据加载到目标数据仓库或数据库中。ETL应用程序广泛应用于数据集成、数据仓库构建、数据分析和数据迁移等场景。ETL的三个主要步骤:Extract(提取):从各种数据源(如数据库、文件、API等
JAVA中的Enum
周凡杨
java enum 枚举
Enum是计算机编程语言中的一种数据类型---枚举类型。 在实际问题中,有些变量的取值被限定在一个有限的范围内。 例如,一个星期内只有七天 我们通常这样实现上面的定义:
public String monday;
public String tuesday;
public String wensday;
public String thursday
赶集网mysql开发36条军规
Bill_chen
mysql 业务架构设计 mysql调优 mysql性能优化
(一)核心军规 (1)不在数据库做运算 cpu计算务必移至业务层; (2)控制单表数据量 int型不超过1000w,含char则不超过500w; 合理分表; 限制单库表数量在300以内; (3)控制列数量 字段少而精,字段数建议在20以内
Shell test命令
daizj
shell 字符串 test 数字 文件比较
Shell test命令
Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。 数值测试 参数 说明 -eq 等于则为真 -ne 不等于则为真 -gt 大于则为真 -ge 大于等于则为真 -lt 小于则为真 -le 小于等于则为真
实例演示:
num1=100
num2=100if test $[num1]
XFire框架实现WebService(二)
周凡杨
java webservice
有了XFire框架实现WebService(一),就可以继续开发WebService的简单应用。
Webservice的服务端(WEB工程):
两个java bean类:
Course.java
package cn.com.bean;
public class Course {
private
重绘之画图板
朱辉辉33
画图板
上次博客讲的五子棋重绘比较简单,因为只要在重写系统重绘方法paint()时加入棋盘和棋子的绘制。这次我想说说画图板的重绘。
画图板重绘难在需要重绘的类型很多,比如说里面有矩形,园,直线之类的,所以我们要想办法将里面的图形加入一个队列中,这样在重绘时就
Java的IO流
西蜀石兰
java
刚学Java的IO流时,被各种inputStream流弄的很迷糊,看老罗视频时说想象成插在文件上的一根管道,当初听时觉得自己很明白,可到自己用时,有不知道怎么代码了。。。
每当遇到这种问题时,我习惯性的从头开始理逻辑,会问自己一些很简单的问题,把这些简单的问题想明白了,再看代码时才不会迷糊。
IO流作用是什么?
答:实现对文件的读写,这里的文件是广义的;
Java如何实现程序到文件
No matching PlatformTransactionManager bean found for qualifier 'add' - neither
林鹤霄
java.lang.IllegalStateException: No matching PlatformTransactionManager bean found for qualifier 'add' - neither qualifier match nor bean name match!
网上找了好多的资料没能解决,后来发现:项目中使用的是xml配置的方式配置事务,但是
Row size too large (> 8126). Changing some columns to TEXT or BLOB
aigo
column
原文:http://stackoverflow.com/questions/15585602/change-limit-for-mysql-row-size-too-large
异常信息:
Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAM
JS 格式化时间
alxw4616
JavaScript
/**
* 格式化时间 2013/6/13 by 半仙
[email protected]
* 需要 pad 函数
* 接收可用的时间值.
* 返回替换时间占位符后的字符串
*
* 时间占位符:年 Y 月 M 日 D 小时 h 分 m 秒 s 重复次数表示占位数
* 如 YYYY 4占4位 YY 占2位<p></p>
* MM DD hh mm
队列中数据的移除问题
百合不是茶
队列移除
队列的移除一般都是使用的remov();都可以移除的,但是在昨天做线程移除的时候出现了点问题,没有将遍历出来的全部移除, 代码如下;
//
package com.Thread0715.com;
import java.util.ArrayList;
public class Threa
Runnable接口使用实例
bijian1013
java thread Runnable java多线程
Runnable接口
a. 该接口只有一个方法:public void run();
b. 实现该接口的类必须覆盖该run方法
c. 实现了Runnable接口的类并不具有任何天
oracle里的extend详解
bijian1013
oracle 数据库 extend
扩展已知的数组空间,例:
DECLARE
TYPE CourseList IS TABLE OF VARCHAR2(10);
courses CourseList;
BEGIN
-- 初始化数组元素,大小为3
courses := CourseList('Biol 4412 ', 'Psyc 3112 ', 'Anth 3001 ');
--
【httpclient】httpclient发送表单POST请求
bit1129
httpclient
浏览器Form Post请求
浏览器可以通过提交表单的方式向服务器发起POST请求,这种形式的POST请求不同于一般的POST请求
1. 一般的POST请求,将请求数据放置于请求体中,服务器端以二进制流的方式读取数据,HttpServletRequest.getInputStream()。这种方式的请求可以处理任意数据形式的POST请求,比如请求数据是字符串或者是二进制数据
2. Form
【Hive十三】Hive读写Avro格式的数据
bit1129
hive
1. 原始数据
hive> select * from word;
OK
1 MSN
10 QQ
100 Gtalk
1000 Skype
2. 创建avro格式的数据表
hive> CREATE TABLE avro_table(age INT, name STRING)STORE
nginx+lua+redis自动识别封解禁频繁访问IP
ronin47
在站点遇到攻击且无明显攻击特征,造成站点访问慢,nginx不断返回502等错误时,可利用nginx+lua+redis实现在指定的时间段 内,若单IP的请求量达到指定的数量后对该IP进行封禁,nginx返回403禁止访问。利用redis的expire命令设置封禁IP的过期时间达到在 指定的封禁时间后实行自动解封的目的。
一、安装环境:
CentOS x64 release 6.4(Fin
java-二叉树的遍历-先序、中序、后序(递归和非递归)、层次遍历
bylijinnan
java
import java.util.LinkedList;
import java.util.List;
import java.util.Stack;
public class BinTreeTraverse {
//private int[] array={ 1, 2, 3, 4, 5, 6, 7, 8, 9 };
private int[] array={ 10,6,
Spring源码学习-XML 配置方式的IoC容器启动过程分析
bylijinnan
java spring IOC
以FileSystemXmlApplicationContext为例,把Spring IoC容器的初始化流程走一遍:
ApplicationContext context = new FileSystemXmlApplicationContext
("C:/Users/ZARA/workspace/HelloSpring/src/Beans.xml&q
[科研与项目]民营企业请慎重参与军事科技工程
comsci
企业
军事科研工程和项目 并非要用最先进,最时髦的技术,而是要做到“万无一失”
而民营科技企业在搞科技创新工程的时候,往往考虑的是技术的先进性,而对先进技术带来的风险考虑得不够,在今天提倡军民融合发展的大环境下,这种“万无一失”和“时髦性”的矛盾会日益凸显。。。。。。所以请大家在参与任何重大的军事和政府项目之前,对
spring 定时器-两种方式
cuityang
spring quartz 定时器
方式一:
间隔一定时间 运行
<bean id="updateSessionIdTask" class="com.yang.iprms.common.UpdateSessionTask" autowire="byName" />
<bean id="updateSessionIdSchedule
简述一下关于BroadView站点的相关设计
damoqiongqiu
view
终于弄上线了,累趴,戳这里http://www.broadview.com.cn
简述一下相关的技术点
前端:jQuery+BootStrap3.2+HandleBars,全站Ajax(貌似对SEO的影响很大啊!怎么破?),用Grunt对全部JS做了压缩处理,对部分JS和CSS做了合并(模块间存在很多依赖,全部合并比较繁琐,待完善)。
后端:U
运维 PHP问题汇总
dcj3sjt126com
windows2003
1、Dede(织梦)发表文章时,内容自动添加关键字显示空白页
解决方法:
后台>系统>系统基本参数>核心设置>关键字替换(是/否),这里选择“是”。
后台>系统>系统基本参数>其他选项>自动提取关键字,这里选择“是”。
2、解决PHP168超级管理员上传图片提示你的空间不足
网站是用PHP168做的,反映使用管理员在后台无法
mac 下 安装php扩展 - mcrypt
dcj3sjt126com
PHP
MCrypt是一个功能强大的加密算法扩展库,它包括有22种算法,phpMyAdmin依赖这个PHP扩展,具体如下:
下载并解压libmcrypt-2.5.8.tar.gz。
在终端执行如下命令: tar zxvf libmcrypt-2.5.8.tar.gz cd libmcrypt-2.5.8/ ./configure --disable-posix-threads --
MongoDB更新文档 [四]
eksliang
mongodb Mongodb更新文档
MongoDB更新文档
转载请出自出处:http://eksliang.iteye.com/blog/2174104
MongoDB对文档的CURD,前面的博客简单介绍了,但是对文档更新篇幅比较大,所以这里单独拿出来。
语法结构如下:
db.collection.update( criteria, objNew, upsert, multi)
参数含义 参数  
Linux下的解压,移除,复制,查看tomcat命令
y806839048
tomcat
重复myeclipse生成webservice有问题删除以前的,干净
1、先切换到:cd usr/local/tomcat5/logs
2、tail -f catalina.out
3、这样运行时就可以实时查看运行日志了
Ctrl+c 是退出tail命令。
有问题不明的先注掉
cp /opt/tomcat-6.0.44/webapps/g
Spring之使用事务缘由(3-XML实现)
ihuning
spring
用事务通知声明式地管理事务
事务管理是一种横切关注点。为了在 Spring 2.x 中启用声明式事务管理,可以通过 tx Schema 中定义的 <tx:advice> 元素声明事务通知,为此必须事先将这个 Schema 定义添加到 <beans> 根元素中去。声明了事务通知后,就需要将它与切入点关联起来。由于事务通知是在 <aop:
GCD使用经验与技巧浅谈
啸笑天
GC
前言
GCD(Grand Central Dispatch)可以说是Mac、iOS开发中的一大“利器”,本文就总结一些有关使用GCD的经验与技巧。
dispatch_once_t必须是全局或static变量
这一条算是“老生常谈”了,但我认为还是有必要强调一次,毕竟非全局或非static的dispatch_once_t变量在使用时会导致非常不好排查的bug,正确的如下: 1
linux(Ubuntu)下常用命令备忘录1
macroli
linux 工作 ubuntu
在使用下面的命令是可以通过--help来获取更多的信息1,查询当前目录文件列表:ls
ls命令默认状态下将按首字母升序列出你当前文件夹下面的所有内容,但这样直接运行所得到的信息也是比较少的,通常它可以结合以下这些参数运行以查询更多的信息:
ls / 显示/.下的所有文件和目录
ls -l 给出文件或者文件夹的详细信息
ls -a 显示所有文件,包括隐藏文
nodejs同步操作mysql
qiaolevip
学习永无止境 每天进步一点点 mysql nodejs
// db-util.js
var mysql = require('mysql');
var pool = mysql.createPool({
connectionLimit : 10,
host: 'localhost',
user: 'root',
password: '',
database: 'test',
port: 3306
});
一起学Hive系列文章
superlxw1234
hive Hive入门
[一起学Hive]系列文章 目录贴,入门Hive,持续更新中。
[一起学Hive]之一—Hive概述,Hive是什么
[一起学Hive]之二—Hive函数大全-完整版
[一起学Hive]之三—Hive中的数据库(Database)和表(Table)
[一起学Hive]之四-Hive的安装配置
[一起学Hive]之五-Hive的视图和分区
[一起学Hive
Spring开发利器:Spring Tool Suite 3.7.0 发布
wiselyman
spring
Spring Tool Suite(简称STS)是基于Eclipse,专门针对Spring开发者提供大量的便捷功能的优秀开发工具。
在3.7.0版本主要做了如下的更新:
将eclipse版本更新至Eclipse Mars 4.5 GA
Spring Boot(JavaEE开发的颠覆者集大成者,推荐大家学习)的配置语言YAML编辑器的支持(包含自动提示,