精华内容
下载资源
问答
  • Java中SQL语句传向数据库

    千次阅读 2019-07-08 16:13:26
    初学Java关于数据库的操作,当时是一脸懵逼,不知道在eclipse里写的SQL语句如何跟数据库打上交道,然后看了大牛们的经典操作之后,自己的理解和体会跟大家分享一下,有什么需要改正的,欢迎提出 在与数据库相连接的...

    初学Java关于数据库的操作,当时是一脸懵逼,不知道在eclipse里写的SQL语句如何跟数据库打上交道,然后看了大牛们的经典操作之后,自己的理解和体会跟大家分享一下,有什么需要改正的,欢迎提出

    在与数据库相连接的时候,首先用到了Connection对象,该对象主要是与数据库建立联系,关于数据库的连接可以参考该博客

    https://blog.csdn.net/HeZhiYing_/article/details/95008019

    连接完数据库,紧接着就开始了如何向数据库中传语句了

    首先是prepareStatement()方法,该方法的执行是一个预编译SQL语句,也叫JDBC存储过程,

    executeQuery()用于产生单个结果集的语句,返回ResultSet对象,这个方法用来执行select语句

    executeUpdate()用于执行insert,delete,update等SQL语句,返回值是一个整数,表示被更新的个数

    ResultSet对象有个方法是next()返回类型为loolean,意思是将光标从当前位置向前移一行

    具体可以看下代码

            /*
    	 * 登录账户
    	 */
    public boolean login(Connection con, User user) throws Exception {
    		String sql = "select * from user where userId = ? and password = ?";
    		PreparedStatement pstmt = (PreparedStatement) con.prepareStatement(sql);
    		pstmt.setString(1, user.getUserId());
    		pstmt.setString(2, user.getPassword());
    		ResultSet resultSet = pstmt.executeQuery();
    
    		return resultSet.next();
    	}
            /*
    	 * 添加用户
    	 */
    public int insert(Connection con, User user) throws Exception {
    
    		/*
    		 * 首先需要对数据库进行查询操作,如果数据库中已经存在该用户,则该用户无法被添加到数据库中
    		 * 这里是查询操作,故需要用executeQuery(),对于怎删改的操作可以用executeUpdate()
    		 */
    		String sql1 = "select * from user where userId = ?";//sql语句
    		PreparedStatement pstmt1 = (PreparedStatement) con.prepareStatement(sql1);
    		pstmt1.setString(1, user.getUserId());//这里的1即为第一个问号
    		ResultSet rs = pstmt1.executeQuery();
    		if (rs.next()) {
    			return 0;
    		}
    		String sql = "insert into user values(?,?,?)";
    		PreparedStatement pstmt = (PreparedStatement) con.prepareStatement(sql);
    		pstmt.setString(1, user.getUserId());
    		pstmt.setString(2, user.getUsername());
    		pstmt.setString(3, user.getPassword());
    
    		return pstmt.executeUpdate();
    	}

     

    展开全文
  • 存储在数据库的大量数据,尤其是进行时空分析的数据,很多信息是重复的,当想更改这些信息用于别的研究时,可直接用SQL语句更改 sql语句为:UPDATE table_name SET field_name = replace (field_name,’from_str...

    用sql语句直接替换数据库中某字段中的特定字符

    存储在数据库的大量数据,尤其是进行时空分析的数据,很多信息是重复的,当想更改这些信息用于别的研究时,可直接用SQL语句更改

    sql语句为:UPDATE table_name SET field_name = replace (field_name,’from_str’,’to_str’) WHERE ……

    代码说明: table_name —— 表的名字 field_name —— 字段名 from_str —— 需要替换的字符串 to_str —— 替换成的字符串 目的是为了直接用sql操作数据库修改字段中的某些字串!

    举例

    UPDATE `clinic` SET `Unit` = REPLACE (`Unit`,'盈江县人民医院','盈江县人民中学') ;

    原数据
    这里写图片描述
    替换后数据
    这里写图片描述

    展开全文
  • 使用SQL语句创建基本数据库

    万次阅读 多人点赞 2014-04-03 22:09:01
    SQL语句代码:CREATE DATABASE Epiphany ON ( NAME = Epiphany, FILENAME = 'E:\SQL SERVER 2008\Epiphany_data.mdf', SIZE = 5MB, MAXSIZE = 20, FILEGROWTH = 20 ) LOG ON ( NAME = Epiphany
    SQL语句代码:CREATE DATABASE 语句。
    
    CREATE DATABASE Epiphany 
    ON
    (
        NAME = Epiphany,
        FILENAME = 'E:\SQL SERVER 2008\Epiphany_data.mdf',
        SIZE = 5MB,
        MAXSIZE = 20,
        FILEGROWTH = 20
    )
    LOG ON 
    (
        NAME = Epiphany,
        FILENAME = 'E:\SQL SERVER 2008\Epiphany_log.ldf',
        SIZE = 2MB,
        MAXSIZE = 10MB,
        FILEGROWTH = 1MB
    );

    可以用这个模板,红色字体自己添加就好了。


    CREATE DATABASE Epiphany  
    ON
    (
        NAME = Epiphany,
        FILENAME = 'E:\SQL SERVER 2008\Epiphany_data.mdf',
        SIZE = 5MB,
        MAXSIZE = 20,
        FILEGROWTH = 20
    )
    LOG ON 
    (
        NAME = Epiphany,
        FILENAME = 'E:\SQL SERVER 2008\Epiphany_log.ldf',
        SIZE = 2MB,
        MAXSIZE = 10MB,
        FILEGROWTH = 1MB
    );


    完毕!

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

    SQL联机丛书内容:

    创建一个新数据库及存储该数据库的文件,创建一个数据库快照,或从先前创建的数据库的已分离文件中附加数据库。

    主题链接图标 Transact-SQL 语法约定

    语法

     
    CREATE DATABASE database_name 
        [ ON 
            [ PRIMARY ] [ <filespec> [ ,...n ] 
            [ , <filegroup> [ ,...n ] ] 
        [ LOG ON { <filespec> [ ,...n ] } ] 
        ] 
        [ COLLATE collation_name ]
        [ WITH <external_access_option> ]
    ]
    [;]
    
    To attach a database
    CREATE DATABASE database_name 
        ON <filespec> [ ,...n ] 
        FOR { ATTACH [ WITH <service_broker_option> ]
            | ATTACH_REBUILD_LOG }
    [;]
    
    <filespec> ::= 
    {
    (
        NAME = logical_file_name ,
            FILENAME = { 'os_file_name' | 'filestream_path' } 
            [ , SIZE = size [ KB | MB | GB | TB ] ] 
            [ , MAXSIZE = { max_size [ KB | MB | GB | TB ] | UNLIMITED } ] 
            [ , FILEGROWTH = growth_increment [ KB | MB | GB | TB | % ] ]
    ) [ ,...n ]
    }
    
    <filegroup> ::= 
    {
    FILEGROUP filegroup_name [ CONTAINS FILESTREAM ] [ DEFAULT ]
        <filespec> [ ,...n ]
    }
    
    <external_access_option> ::=
    {
      [ DB_CHAINING { ON | OFF } ]
      [ , TRUSTWORTHY { ON | OFF } ]
    }
    <service_broker_option> ::=
    {
        ENABLE_BROKER
      | NEW_BROKER
      | ERROR_BROKER_CONVERSATIONS
    }
    
    Create a database snapshot
    CREATE DATABASE database_snapshot_name 
        ON 
            (
            NAME = logical_file_name,
            FILENAME = 'os_file_name' 
            ) [ ,...n ] 
        AS SNAPSHOT OF source_database_name
    [;]

    参数

    database_name

    新数据库的名称。数据库名称在 SQL Server 的实例中必须唯一,并且必须符合标识符规则。

    除非没有为日志文件指定逻辑名称,否则 database_name 最多可以包含 128 个字符。如果未指定逻辑日志文件名称,则 SQL Server 将通过向 database_name 追加后缀来为日志生成 logical_file_nameos_file_name。这会将 database_name 限制为 123 个字符,从而使生成的逻辑文件名称不超过 128 个字符。

    如果未指定数据文件的名称,则 SQL Server 使用 database_name 作为 logical_file_nameos_file_name

    ON

    指定显式定义用来存储数据库数据部分的磁盘文件(数据文件)。当后面是以逗号分隔的、用以定义主文件组的数据文件的 <filespec> 项列表时,需要使用 ON。主文件组的文件列表可后跟以逗号分隔的、用以定义用户文件组及其文件的 <filegroup> 项列表(可选)。

    PRIMARY

    指定关联的 <filespec> 列表定义主文件。在主文件组的 <filespec> 项中指定的第一个文件将成为主文件。一个数据库只能有一个主文件。有关详细信息,请参阅文件和文件组体系结构。

    如果没有指定 PRIMARY,那么 CREATE DATABASE 语句中列出的第一个文件将成为主文件。

    LOG ON

    指定显式定义用来存储数据库日志的磁盘文件(日志文件)。LOG ON 后跟以逗号分隔的用以定义日志文件的 <filespec> 项列表。如果没有指定 LOG ON,将自动创建一个日志文件,其大小为该数据库的所有数据文件大小总和的 25% 或 512 KB,取两者之中的较大者。不能对数据库快照指定 LOG ON。

    COLLATE collation_name

    指定数据库的默认排序规则。排序规则名称既可以是 Windows 排序规则名称,也可以是 SQL 排序规则名称。如果没有指定排序规则,则将 SQL Server 实例的默认排序规则分配为数据库的排序规则。不能对数据库快照指定排序规则名称。

    不能使用 FOR ATTACH 或 FOR ATTACH_REBUILD_LOG 子句指定排序规则名称。有关如何更改附加数据库的排序规则的信息,请访问此 Microsoft 网站

    有关 Windows 和 SQL 排序规则名称的详细信息,请参阅 COLLATE (Transact-SQL)。

    FOR ATTACH [ WITH <service_broker_option> ]

    指定通过附加一组现有的操作系统文件来创建数据库。必须有一个指定主文件的 <filespec> 项。至于其他 <filespec> 项,只需要指定与第一次创建数据库或上一次附加数据库时路径不同的文件的那些项即可。必须有一个 <filespec> 项指定这些文件。

    FOR ATTACH 具有以下要求:

    • 所有数据文件(MDF 和 NDF)都必须可用。

    • 如果存在多个日志文件,这些文件都必须可用。

    如果一个可读/写数据库具有一个当前不可用的日志文件,并且进行附加操作前在没有使用用户或打开的事务的情况下关闭了该数据库,那么 FOR ATTACH 会自动重新生成日志文件并更新主文件。相比之下,对于只读数据库,由于主文件不能更新,将不能重新生成日志。因此,如果附加一个日志不可用的只读数据库,必须在 FOR ATTACH 子句中提供日志文件或文件。

    注意:
    无法在早期版本的 SQL Server 中附加由较新版本的 SQL Server 创建的数据库。源数据库的版本必须至少为 80 (SQL Server 2000),才能附加到 SQL Server 2008。附加兼容级别低于 80 的 SQL Server 2000 或 SQL Server 2005 数据库时,会将其兼容级别设置为 80。

    在 SQL Server 中,作为待附加数据库的组成部分的所有全文文件也将随之一起附加。若要指定全文目录的新路径,请指定不带全文操作系统文件名的新位置。有关详细信息,请参阅“示例”部分。

    不能对数据库快照指定 FOR ATTACH。

    如果数据库使用 Service Broker,请在 FOR ATTACH 子句中使用 WITH <service_broker_option>:

    <service_broker_option>

    控制 Service Broker 消息传递和数据库的 Service Broker 标识符。仅当使用 FOR ATTACH 子句时,才能指定 Service Broker 选项。

    ENABLE_BROKER

    指定对指定的数据库启用 Service Broker。也就是说,启动了消息传递,并且在 sys.databases 目录视图中将 is_broker_enabled 设置为 true。数据库保留现有的 Service Broker 标识符。

    NEW_BROKER

    sys.databases 和还原数据库中都创建一个新的 service_broker_guid 值,并通过清除结束所有会话端点。Broker 已启用,但未向远程会话端点发送消息。必须使用新标识符重新创建任何引用旧 Service Broker 标识符的路由。

    ERROR_BROKER_CONVERSATIONS

    结束所有会话,并产生一个错误指出数据库已附加或还原。Broker 一直处于禁用状态直到此操作完成,然后再将其启用。数据库保留现有的 Service Broker 标识符。

    有关详细信息,请参阅管理 Service Broker 标识。

    有关分离或附加数据库时设置的文件权限的信息,请参阅保护数据和日志文件的安全。

    当您附加已复制的数据库而不是分离的数据库时,请注意以下事项:

    • 如果将数据库附加到与原始数据库相同的服务器实例和版本,则不需要执行其他步骤。

    • 如果您将数据库附加到同一个服务器实例,但是版本已升级,则必须执行 sp_vupgrade_replication 才能在附加操作完成后升级复制。

    • 如果您将数据库附加到不同的服务器实例,而不考虑版本,则必须执行 sp_removedbreplication 才能在附加操作完成后删除复制。

    注意:
    附加使用 vardecimal 存储格式,但 SQL Server 数据库引擎 必须至少升级到 SQL Server 2005 Service Pack 2。无法将使用 Vardecimal 存储格式的数据库附加到早期版本的 SQL Server。有关 vardecimal 存储格式的详细信息,请参阅将 Decimal 数据存储为可变长度类型。

    有关如何使用附加来升级数据库的信息,请参阅如何使用分离和附加来升级数据库 (Transact-SQL)。

    安全说明:
    建议您不要附加未知或不可信源中的数据库。此类数据库可能包含恶意代码,这些代码可能会执行非预期的 Transact-SQL 代码,或者通过修改架构或物理数据库结构导致错误。使用来自未知源或不可信源的数据库前,请在非生产服务器上针对数据库运行 DBCC CHECKDB,然后检查数据库中的代码,例如存储过程或其他用户定义代码。

    FOR ATTACH_REBUILD_LOG

    指定通过附加一组现有的操作系统文件来创建数据库。该选项只限于读/写数据库。如果缺少一个或多个事务日志文件,将重新生成日志文件。必须有一个指定主文件的 <filespec> 项。

    注意:
    如果日志文件可用,数据库引擎将使用这些文件,而不会重新生成日志文件。

    FOR ATTACH_REBUILD_LOG 具有以下要求:

    • 完全关闭数据库。

    • 所有数据文件(MDF 和 NDF)都必须可用。

    重要提示:
    该操作会中断日志备份链。建议在完成该操作后执行完整数据库备份。有关详细信息,请参阅 BACKUP (Transact-SQL)。

    通常,FOR ATTACH_REBUILD_LOG 用于将具有大型日志的可读/写数据库复制到另一台服务器,在这台服务器上,数据库副本频繁使用,或仅用于读操作,因而所需的日志空间少于原始数据库。

    不能对数据库快照指定 FOR ATTACH_REBUILD_LOG。

    有关附加数据库和分离数据库的详细信息,请参阅分离数据库和附加数据库。

    <filespec>

    控制文件属性。

    NAME logical_file_name

    指定文件的逻辑名称。指定 FILENAME 时,需要使用 NAME,除非指定 FOR ATTACH 子句之一。无法将 FILESTREAM 文件组命名为 PRIMARY。

    logical_file_name

    引用文件时在 SQL Server 中使用的逻辑名称。Logical_file_name 在数据库中必须是唯一的,必须符合标识符规则。名称可以是字符或 Unicode 常量,也可以是常规标识符或分隔标识符。

    FILENAME { ' os_file_name ' | ' filestream_path ' }

    指定操作系统(物理)文件名称。

    ' os_file_name '

    是创建文件时由操作系统使用的路径和文件名。文件必须驻留在下列一种设备中:安装 SQL Server 的本地服务器、存储区域网络 [SAN] 或基于 iSCSI 的网络。执行 CREATE DATABASE 语句前,指定路径必须存在。有关详细信息,请参阅“备注”部分的“数据库文件和文件组”。

    如果为该文件指定了 UNC 路径,则无法设置 SIZE、MAXSIZE 和 FILEGROWTH 参数。

    如果文件位于原始分区上,则 os_file_name 必须仅指定现有原始分区的驱动器号。每个原始分区上只能创建一个数据文件。

    不应将数据文件放在压缩文件系统中,除非这些文件是只读的辅助文件或数据库是只读的。日志文件一定不要放在压缩文件系统中。有关详细信息,请参阅只读文件组和压缩。

    ' filestream_path '

    对于 FILESTREAM 文件组,FILENAME 指向将存储 FILESTREAM 数据的路径。在最后一个文件夹之前的路径必须存在,但不能存在最后一个文件夹。例如,如果指定路径 C:\MyFiles\MyFilestreamData、C:\MyFiles 必须存在才能运行 ALTER DATABASE,但 MyFilestreamData 文件夹不能存在。

    必须在同一语句中创建文件组和文件 (<filespec>)。只能有一个文件,FILESTREAM 文件组的 <filespec>,

    SIZE、MAXSIZE 和 FILEGROWTH 属性不适用于 FILESTREAM 文件组。

    SIZE size

    指定文件的大小。

    os_file_name 指定为 UNC 路径时,不能指定 SIZE。SIZE 不适用于 FILESTREAM 文件组。

    size

    文件的初始大小。

    如果没有为主文件提供 size,则数据库引擎将使用 model 数据库中的主文件的大小。如果指定了辅助数据文件或日志文件,但未指定该文件的 size,则数据库引擎将以 1 MB 作为该文件的大小。为主文件指定的大小至少应与 model 数据库的主文件大小相同。

    可以使用千字节 (KB)、兆字节 (MB)、千兆字节 (GB) 或兆兆字节 (TB) 后缀。默认值为 MB。请指定整数,不要包括小数。Size 是整数值。对于大于 2147483647 的值,使用更大的单位。

    MAXSIZE max_size

    指定文件可增大到的最大大小。将 os_file_name 指定为 UNC 路径时,不能指定 MAXSIZE。MAXSIZE 不适用于 FILESTREAM 文件组。

    max_size

    最大的文件大小。可以使用 KB、MB、GB 和 TB 后缀。默认值为 MB。指定一个整数,不包含小数位。如果不指定 max_size,则文件将不断增长直至磁盘被占满。Max_size 是整数值。对于大于 2147483647 的值,使用更大的单位。

    UNLIMITED

    指定文件将增长到磁盘充满。在 SQL Server 中,指定为不限制增长的日志文件的最大大小为 2 TB,而数据文件的最大大小为 16 TB。

    FILEGROWTH growth_increment

    指定文件的自动增量。文件的 FILEGROWTH 设置不能超过 MAXSIZE 设置。将 os_file_name 指定为 UNC 路径时,不能指定 FILEGROWTH。FILEGROWTH 不适用于 FILESTREAM 文件组。

    growth_increment

    每次需要新空间时为文件添加的空间量。

    该值可以 MB、KB、GB、TB 或百分比 (%) 为单位指定。如果未在数量后面指定 MB、KB 或 %,则默认值为 MB。如果指定 %,则增量大小为发生增长时文件大小的指定百分比。指定的大小舍入为最接近的 64 KB 的倍数。

    值为 0 时表明自动增长被设置为关闭,不允许增加空间。

    如果未指定 FILEGROWTH,则数据文件的默认值为 1 MB,日志文件的默认增长比例为 10%,并且最小值为 64 KB。

    注意:
    在 SQL Server 中,数据文件的默认增量已从 10% 改为 1 MB。日志文件的默认值仍然为 10%。

    <filegroup>

    控制文件组属性。不能对数据库快照指定文件组。

    FILEGROUP filegroup_name

    文件组的逻辑名称。

    filegroup_name

    filegroup_name 必须在数据库中唯一,不能是系统提供的名称 PRIMARY 和 PRIMARY_LOG。名称可以是字符或 Unicode 常量,也可以是常规标识符或分隔标识符。名称必须符合标识符规则。

    CONTAINS FILESTREAM

    指定文件组在文件系统中存储 FILESTREAM 二进制大型对象 (BLOB)。

    DEFAULT

    指定命名文件组为数据库中的默认文件组。

    <external_access_option>

    控制外部与数据库之间的双向访问。

    DB_CHAINING { ON | OFF }

    当指定为 ON 时,数据库可以为跨数据库所有权链的源或目标。

    当为 OFF 时,数据库不能参与跨数据库所有权链接。默认值为 OFF。

    重要提示:
    如果 cross db ownership chaining 服务器选项为 0 (OFF),SQL Server 实例将可以识别此设置。如果 cross db ownership chaining 为 1 (ON),则不论此选项为何值,所有用户数据库都可以参与跨数据库所有权链。此选项是通过使用 sp_configure 设置的。

    若要设置此选项,要求具有 sysadmin 固定服务器角色的成员身份。不能针对下列系统数据库设置 DB_CHAINING 选项:mastermodeltempdb

    有关详细信息,请参阅所有权链。

    TRUSTWORTHY { ON | OFF }

    当指定 ON 时,使用模拟上下文的数据库模块(例如,视图、用户定义函数或存储过程)可以访问数据库以外的资源。

    当为 OFF 时,模拟上下文中的数据库模块不能访问数据库以外的资源。默认值为 OFF。

    只要附加数据库,TRUSTWORTHY 就会设置为 OFF。

    默认情况下,除 msdb 数据库之外的所有系统数据库都将 TRUSTWORTHY 设置为 OFF。对于 modeltempdb 数据库,不能更改此值。建议在任何情况下都不要将 master 数据库的 TRUSTWORTHY 选项设置为 ON。

    若要设置此选项,要求具有 sysadmin 固定服务器角色的成员身份。

    database_snapshot_name

    新数据库快照的名称。数据库快照名称必须在 SQL Server 的实例中唯一,并且必须符合标识符规则。database_snapshot_name 最多可以包含 128 个字符。

    ON ( NAME = logical_file_name , FILENAME = ' os_file_name ' ) [ ,... n ]

    若要创建数据库快照,请在源数据库中指定文件列表。若要使快照工作,必须分别指定所有数据文件。但是,日志文件不允许用于数据库快照。

    有关 NAME 和 FILENAME 以及其值的说明,请参阅等价的 <filespec> 值的说明。

    注意:
    创建数据库快照时,不允许使用其他 <filespec> 选项和关键字 PRIMARY。

    AS SNAPSHOT OF source_database_name

    指定要创建的数据库为 source_database_name 指定的源数据库的数据库快照。快照和源数据库必须位于同一实例中。

    有关详细信息,请参阅“备注”部分的“数据库快照”。

    备注

    创建、修改或删除用户数据库后,应备份 master 数据库。

    CREATE DATABASE 语句必须以自动提交模式(默认事务管理模式)运行,不允许在显式或隐式事务中使用。有关详细信息,请参阅自动提交事务。

    使用一条 CREATE DATABASE 语句即可创建数据库以及存储该数据库的文件。SQL Server 通过使用以下步骤实现 CREATE DATABASE 语句:

    1. SQL Server 使用 model 数据库的副本初始化该数据库及其元数据。

    2. 为数据库分配 Service Broker GUID。

    3. 然后,数据库引擎使用空页填充数据库的剩余部分,包含记录数据库中空间使用情况的内部数据页除外。有关详细信息,请参阅数据库文件初始化。

    在一个 SQL Server 的实例中最多可以指定 32,767 个数据库。

    每个数据库都有一个所有者,它可以在数据库中执行特殊操作。所有者是创建数据库的用户。可以使用 sp_changedbowner 更改数据库所有者。

    数据库文件和文件组

    每个数据库至少有两个文件(一个主文件和一个事务日志文件)和一个文件组。可以为每个数据库指定最多 32,767 个文件和 32,767 个文件组。有关详细信息,请参阅文件和文件组体系结构。

    在创建数据库时,请根据数据库中预期的最大数据量,创建尽可能大的数据文件。有关详细信息,请参阅使用文件和文件组管理数据库增长。

    建议使用存储区域网络 (SAN)、基于 iSCSI 的网络或本地附加的磁盘来存储 SQL Server 数据库文件,因为该配置使 SQL Server 的性能和可靠性得到了优化。默认情况下,不对 SQL Server 启用使用网络数据库文件(存储在网络服务器或网络附加的存储器上)。但是,可以使用跟踪标志 1807 创建具有基于网络的数据库文件的数据库。有关此跟踪标志以及重要的性能和维护注意事项的信息,请参阅此 Microsoft 网站

    数据库快照

    可以使用 CREATE DATABASE 语句创建现有数据库(“源数据库”)的只读静态视图(“数据库快照”)。当创建快照时,源数据库已存在,所以数据库快照在事务上与源数据库一致,源数据库可以具有多个快照。

    注意:
    创建数据库快照时,CREATE DATABASE 语句不能引用日志文件、脱机文件、还原文件和不存在的文件。

    如果创建数据库快照失败,快照便成为可疑快照,必须将其删除。有关详细信息,请参阅 DROP DATABASE (Transact-SQL)。

    每个快照都将一直存在,直到使用 DROP DATABASE 将其删除为止。

    有关详细信息,请参阅数据库快照。

    数据库选项

    创建数据库时,总会自动设置几个数据库选项。有关这些选项及其默认设置的列表,请参阅设置数据库选项。可以使用 ALTER DATABASE 语句修改这些选项。

    model 数据库和创建新数据库

    model 数据库中的所有用户定义对象都将复制到所有新创建的数据库中。可以向 model 数据库中添加任何对象(例如表、视图、存储过程、数据类型等),以将这些对象包括到所有新建数据库中。

    当指定 CREATE DATABASE database_name 语句而不带其他大小参数时,主数据文件将与 model 数据库中的主文件具有相同的大小。

    除非指定了 FOR ATTACH,否则每个新数据库都从 model 数据库继承数据库选项设置。例如,在 model 和创建的任何新数据库中,数据库选项 auto shrink 都设置为 true。如果更改了 model 数据库中的选项,则这些新选项设置也将用于您所创建的所有新数据库中。在 model 数据库中的更改操作不会影响现有数据库。如果在 CREATE DATABASE 语句中指定了 FOR ATTACH,则新数据库将继承原始数据库的数据库选项设置。

    查看数据库信息

    可以使用目录视图、系统函数和系统存储过程返回有关数据库、文件和文件组的信息。有关详细信息,请参阅查看数据库元数据。

    权限

    要求具有 CREATE DATABASE、CREATE ANY DATABASE 或 ALTER ANY DATABASE 的权限。

    为了控制对运行 SQL Server 实例的计算机上的磁盘使用,通常只有少数登录帐户才有创建数据库的权限。

    对数据文件和日志文件的权限

    在 SQL Server 中,会对每个数据库的数据文件和日志文件设置特定的权限。每当对数据库执行下列操作时,便会设置下列权限:

    创建

    修改以添加新文件

    附加

    备份

    分离

    还原

    如果这些文件位于具有打开权限的目录中,那么以上权限可以防止文件被意外篡改。有关详细信息,请参阅保护数据和日志文件的安全。

    注意:
    Microsoft SQL Server 2005 Express Edition 不设置数据文件和日志文件权限。

    示例

    A. 创建未指定文件的数据库

    以下示例创建名为 mytest 的数据库,并创建相应的主文件和事务日志文件。因为语句没有 <filespec> 项,所以主数据库文件的大小为 model 数据库主文件的大小。事务日志将设置为下列值中的较大者:512 KB 或主数据文件大小的 25%。因为没有指定 MAXSIZE,文件可以增大到填满所有可用的磁盘空间为止。

     复制代码
    USE master;
    GO
    IF DB_ID (N'mytest') IS NOT NULL
    DROP DATABASE mytest;
    GO
    CREATE DATABASE mytest;
    GO
    -- Verify the database files and sizes
    SELECT name, size, size*1.0/128 AS [Size in MBs] 
    FROM sys.master_files
    WHERE name = N'mytest';
    GO
    

    B. 创建指定数据和事务日志文件的数据库

    下面的示例将创建数据库 Sales。因为没有使用关键字 PRIMARY,第一个文件 (Sales_dat) 将成为主文件。因为在 Sales_dat 文件的 SIZE 参数中没有指定 MB 或 KB,将使用 MB 并按 MB 分配。Sales_log 文件以 MB 为单位进行分配,因为 SIZE 参数中显式声明了 MB 后缀。

     复制代码
    USE master;
    GO
    IF DB_ID (N'Sales') IS NOT NULL
    DROP DATABASE Sales;
    GO
    -- Get the SQL Server data path
    DECLARE @data_path nvarchar(256);
    SET @data_path = (SELECT SUBSTRING(physical_name, 1, CHARINDEX(N'master.mdf', LOWER(physical_name)) - 1)
                      FROM master.sys.master_files
                      WHERE database_id = 1 AND file_id = 1);
    
    -- execute the CREATE DATABASE statement 
    EXECUTE ('CREATE DATABASE Sales
    ON 
    ( NAME = Sales_dat,
        FILENAME = '''+ @data_path + 'saledat.mdf'',
        SIZE = 10,
        MAXSIZE = 50,
        FILEGROWTH = 5 )
    LOG ON
    ( NAME = Sales_log,
        FILENAME = '''+ @data_path + 'salelog.ldf'',
        SIZE = 5MB,
        MAXSIZE = 25MB,
        FILEGROWTH = 5MB )'
    );
    GO
    

    C. 通过指定多个数据和事务日志文件创建数据库

    以下示例创建数据库 Archive,该数据库具有三个 100-MB 数据文件和两个 100-MB 事务日志文件。主文件是列表中的第一个文件,并使用 PRIMARY 关键字显式指定。事务日志文件在 LOG ON 关键字后指定。请注意用于 FILENAME 选项中各文件的扩展名:.mdf 用于主数据文件,.ndf 用于辅助数据文件,.ldf 用于事务日志文件。

     复制代码
    USE master;
    GO
    IF DB_ID (N'Archive') IS NOT NULL
    DROP DATABASE Archive;
    GO
    -- Get the SQL Server data path
    DECLARE @data_path nvarchar(256);
    SET @data_path = (SELECT SUBSTRING(physical_name, 1, CHARINDEX(N'master.mdf', LOWER(physical_name)) - 1)
                      FROM master.sys.master_files
                      WHERE database_id = 1 AND file_id = 1);
    
    -- execute the CREATE DATABASE statement 
    EXECUTE ('CREATE DATABASE Archive 
    ON
    PRIMARY  
        (NAME = Arch1,
        FILENAME = '''+ @data_path + 'archdat1.mdf'',
        SIZE = 100MB,
        MAXSIZE = 200,
        FILEGROWTH = 20),
        ( NAME = Arch2,
        FILENAME = '''+ @data_path + 'archdat2.ndf'',
        SIZE = 100MB,
        MAXSIZE = 200,
        FILEGROWTH = 20),
        ( NAME = Arch3,
        FILENAME = '''+ @data_path + 'archdat3.ndf'',
        SIZE = 100MB,
        MAXSIZE = 200,
        FILEGROWTH = 20)
    LOG ON 
       (NAME = Archlog1,
        FILENAME = '''+ @data_path + 'archlog1.ldf'',
        SIZE = 100MB,
        MAXSIZE = 200,
        FILEGROWTH = 20),
       (NAME = Archlog2,
        FILENAME = '''+ @data_path + 'archlog2.ldf'',
        SIZE = 100MB,
        MAXSIZE = 200,
        FILEGROWTH = 20)'
    );
    GO
    

    D. 创建具有文件组的数据库

    以下示例创建数据库 Sales,该数据库具有以下文件组:

    • 包含文件 Spri1_datSpri2_dat 的主文件组。将这些文件的 FILEGROWTH 增量指定为 15%

    • 名为 SalesGroup1 的文件组,其中包含文件 SGrp1Fi1SGrp1Fi2

    • 名为 SalesGroup2 的文件组,其中包含文件 SGrp2Fi1SGrp2Fi2

     复制代码
    USE master;
    GO
    IF DB_ID (N'Sales') IS NOT NULL
    DROP DATABASE Sales;
    GO
    -- Get the SQL Server data path
    DECLARE @data_path nvarchar(256);
    SET @data_path = (SELECT SUBSTRING(physical_name, 1, CHARINDEX(N'master.mdf', LOWER(physical_name)) - 1)
                      FROM master.sys.master_files
                      WHERE database_id = 1 AND file_id = 1);
    
    -- execute the CREATE DATABASE statement 
    EXECUTE ('CREATE DATABASE  Sales
    ON PRIMARY
    ( NAME = SPri1_dat,
        FILENAME = '''+ @data_path + 'SPri1dat.mdf'',
        SIZE = 10,
        MAXSIZE = 50,
        FILEGROWTH = 15% ),
    ( NAME = SPri2_dat,
        FILENAME = '''+ @data_path + 'SPri2dt.ndf'',
        SIZE = 10,
        MAXSIZE = 50,
        FILEGROWTH = 15% ),
    FILEGROUP SalesGroup1
    ( NAME = SGrp1Fi1_dat,
        FILENAME = '''+ @data_path + 'SG1Fi1dt.ndf'',
        SIZE = 10,
        MAXSIZE = 50,
        FILEGROWTH = 5 ),
    ( NAME = SGrp1Fi2_dat,
        FILENAME = '''+ @data_path + 'SG1Fi2dt.ndf'',
        SIZE = 10,
        MAXSIZE = 50,
        FILEGROWTH = 5 ),
    FILEGROUP SalesGroup2
    ( NAME = SGrp2Fi1_dat,
        FILENAME = '''+ @data_path + 'SG2Fi1dt.ndf'',
        SIZE = 10,
        MAXSIZE = 50,
        FILEGROWTH = 5 ),
    ( NAME = SGrp2Fi2_dat,
        FILENAME = '''+ @data_path + 'SG2Fi2dt.ndf'',
        SIZE = 10,
        MAXSIZE = 50,
        FILEGROWTH = 5 )
    LOG ON
    ( NAME = Sales_log,
        FILENAME = '''+ @data_path + 'salelog.ldf'',
        SIZE = 5MB,
        MAXSIZE = 25MB,
        FILEGROWTH = 5MB )'
    );
    GO
    

    E. 附加数据库

    以下示例分离在示例 D 中创建的数据库 Archive,然后使用 FOR ATTACH 子句附加该数据库。Archive 定义为具有多个数据和日志文件。但是,由于文件的位置自创建后没有发生更改,所以只需在 FOR ATTACH 子句中指定主文件。在 SQL Server 2005 中,要附加的数据库中包含的所有全文文件也将随之一起附加。

     复制代码
    USE master;
    GO
    sp_detach_db Archive;
    GO
    -- Get the SQL Server data path
    DECLARE @data_path nvarchar(256);
    SET @data_path = (SELECT SUBSTRING(physical_name, 1, CHARINDEX(N'master.mdf', LOWER(physical_name)) - 1)
                      FROM master.sys.master_files
                      WHERE database_id = 1 AND file_id = 1);
    -- Execute CREATE DATABASE FOR ATTACH statement
    EXEC ('CREATE DATABASE Archive
          ON (FILENAME = '''+ @data_path + 'archdat1.mdf'')
          FOR ATTACH');
    GO
    

    F. 创建数据库快照

    以下示例创建数据库快照 sales_snapshot0600。由于数据库快照是只读的,所以不能指定日志文件。为了符合语法要求,指定了源数据库中的每个文件,但没有指定文件组。

    该示例的源数据库是在示例 D 中创建的 Sales 数据库。

     复制代码
    USE master;
    GO
    -- Get the SQL Server data path
    DECLARE @data_path nvarchar(256);
    SET @data_path = (SELECT SUBSTRING(physical_name, 1, CHARINDEX(N'master.mdf', LOWER(physical_name)) - 1)
                      FROM master.sys.master_files
                      WHERE database_id = 1 AND file_id = 1);
    -- execute the CREATE DATABASE statement 
    EXECUTE (
    'CREATE DATABASE sales_snapshot0600 ON
        ( NAME = SPri1_dat, FILENAME = '''+ @data_path + 'SPri1dat_0600.ss''),
        ( NAME = SPri2_dat, FILENAME = '''+ @data_path + 'SPri2dt_0600.ss''),
        ( NAME = SGrp1Fi1_dat, FILENAME = '''+ @data_path + 'SG1Fi1dt_0600.ss''),
        ( NAME = SGrp1Fi2_dat, FILENAME = '''+ @data_path + 'SG1Fi2dt_0600.ss''),
        ( NAME = SGrp2Fi1_dat, FILENAME = '''+ @data_path + 'SG2Fi1dt_0600.ss''),
        ( NAME = SGrp2Fi2_dat, FILENAME = '''+ @data_path + 'SG2Fi2dt_0600.ss'')
    AS SNAPSHOT OF Sales');
    GO
    

    G. 创建数据库并指定排序规则名称和选项

    下面的示例将创建数据库 MyOptionsTest。指定了排序规则名称,并将 TRUSTYWORTHYDB_CHAINING 选项设置为 ON

     复制代码
    USE master;
    GO
    IF DB_ID (N'MyOptionsTest') IS NOT NULL
    DROP DATABASE MyOptionsTest;
    GO
    CREATE DATABASE MyOptionsTest
    COLLATE French_CI_AI
    WITH TRUSTWORTHY ON, DB_CHAINING ON;
    GO
    --Verifying collation and option settings.
    SELECT name, collation_name, is_trustworthy_on, is_db_chaining_on
    FROM sys.databases
    WHERE name = N'MyOptionsTest';
    GO
    

    H. 附加已移动的全文目录

    以下示例同时附加全文目录 AdvWksFtCat 以及 AdventureWorks 数据和日志文件。在该示例中,将全文目录从其默认位置移动到新位置 c:\myFTCatalogs。数据和日志文件保留在其默认位置。

     复制代码
    USE master;
    GO
    --Detach the AdventureWorks database
    sp_detach_db AdventureWorks;
    GO
    -- Physically move the full text catalog to the new location.
    --Attach the AdventureWorks database and specify the new location of the full-text catalog.
    CREATE DATABASE AdventureWorks ON 
        (FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\AdventureWorks_Data.mdf'), 
        (FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\AdventureWorks_log.ldf'),
        (FILENAME = 'c:\myFTCatalogs\AdvWksFtCat')
    FOR ATTACH;
    GO

    I. 创建指定一个行文件组和两个 FILESTREAM 文件组的数据库

    下面的示例将创建数据库 FileStreamDB。该数据库在创建之时包含一个行文件组和两个 FILESTREAM 文件组。每个文件组都包含一个文件:

    • FileStreamDB_data 包含行数据。它包含一个文件,即带有默认路径的 FileStreamDB_data.mdf

    • FileStreamPhotos 包含 FILESTREAM 数据。它包含一个 FILESTREAM 数据容器 FSPhotos,位于 C:\MyFSfolder\Photos。它被标记为默认 FILESTREAM 文件组。

    • FileStreamResumes 包含 FILESTREAM 数据。它包含一个位于 C:\MyFSfolder\Resumes 中的 FILESTREAM 数据容器 FSResumes

     复制代码
    USE master;
    GO
    IF DB_ID (N'FileStreamDB') IS NOT NULL
    DROP DATABASE FileStreamDB;
    GO
    -- Get the SQL Server data path.
    DECLARE @data_path nvarchar(256);
    SET @data_path = (SELECT SUBSTRING(physical_name, 1, CHARINDEX(N'master.mdf', LOWER(physical_name)) - 1)
                      FROM master.sys.master_files
                      WHERE database_id = 1 AND file_id = 1);
    
     -- Execute the CREATE DATABASE statement. 
    EXECUTE ('CREATE DATABASE FileStreamDB
    ON PRIMARY 
        (
        NAME = FileStreamDB_data 
        ,FILENAME = ''' + @data_path + 'FileStreamDB_data.mdf''
        ,SIZE = 10MB
        ,MAXSIZE = 50MB
        ,FILEGROWTH = 15%
        ),
    FILEGROUP FileStreamPhotos CONTAINS FILESTREAM DEFAULT
        (
        NAME = FSPhotos
        ,FILENAME = ''C:\MyFSfolder\Photos''
    -- SIZE, MAXSIZE, FILEGROWTH should not be specified here.
    -- If they are specified an error will be raised.
        ),
    FILEGROUP FileStreamResumes CONTAINS FILESTREAM
        (
        NAME = FileStreamResumes
        ,FILENAME = ''C:\MyFSfolder\Resumes''
        ) 
    LOG ON
        (
        NAME = FileStream_log
        ,FILENAME = ''' + @data_path + 'FileStreamDB_log.ldf''
        ,SIZE = 5MB
        ,MAXSIZE = 25MB
        ,FILEGROWTH = 5MB
        )'
    );
    GO

    展开全文
  • SQLite数据库 ...虽然Sqlite支持绝大部分SQL92语法,也允许开发者使用sql语句操作数据库中的数据,但sqlite并不像Oracle,mySql数据库那样需要安装,启动服务器进程,sqlite数据库只是一个文件。 从本质上看

    SQLite数据库

    Android系统集成了一个轻量级的数据库:Sqlite,Sqlite只是一个嵌入式的数据库引擎,专门适用于资源有限的设备上(如手机、PDA等)适量数据存取。

    虽然Sqlite支持绝大部分SQL92语法,也允许开发者使用sql语句操作数据库中的数据,但sqlite并不像Oracle,mySql数据库那样需要安装,启动服务器进程,sqlite数据库只是一个文件。

    从本质上看,sqlite的操作方式只是一种更为便捷的文件操作。当应用程序创建或打开一个Sqlite数据库时,其实只是打开一个文件准备读写,因此有人说Sqlite有点像Microsoft的Access(实际上Sqlite的功能要强大的多)。可能在实际项目中有大量数据需要读写,而且需要面临大量用户的并发存储怎么办?对于这种情况,本身并不应该把数据存放在手机的sqlite数据库里,毕竟手机还是手机,它的存储能力、计算能力都不足以让它充当服务器的角色。

    SQLiteDatabase简介

    Android提供了SQLiteBatabase代表一个数据库(底层就是一个数据库文件),一旦应用程序获得了代表指定数据库的SQLiteDatabase对象,接下来就可通过SQLiteDatabase对象来管理、操作数据库了。

    SQLiteDatabase提供了如下静态方法来打开一个文件对应的数据库。

    》static SQLiteDatabase openDatabase(String path, SQLiteDatabase.CursorFactory factory, int flags):打开path文件所代表的SQLite数据库。

    》static SQLiteDatabase openOrCreateDatabase(File file, SQLiteDatabase.CursorFactory factory):打开或创建(如果不存在)file文件所代表的SQLite数据库。

    》static SQLiteDatabase openOrCreateDatabase(String path, SQLiteDatabase.CursorFactory factory):打开或创建(如果不存在)path文件所代表的SQLite数据库。

    在程序中获取了SQLiteDatabase对象之后,接下来就可调用SQLiteDatabase的如下方法来操作数据库了。

    》execSQL(String sql, Object[] bindArgs):执行带占位符的SQL语句。

    》execSQL(String sql):执行sql语句。

    》insert(String table, String nullColumnHack, ContentValues values):向执行表中插入数据。

    》update(String table, ContentValues values, String whereClause, String[] whereArgs):更新指定表中的特定数据。

    》delete(String table, String whereClause, String[] whereArgs):删除指定表中的特定数据。

    》Cursor query(String table, String[] columns, String whereClause, String[] whereArgs, String groupBy, String baving, String orderBy):对执行数据表执行查询。

    》Cursor query(String table, String[] columns, String whereClause, String[] whereArgs, String groupBy, String having, String orderBy, String limit):对执行数据表执行查询。limit参数控制最多查询几条记录(用于控制分页的参数)。

    》Cursor query(boolean distinct, String table, String[] columns, String whereClause, String[] whereArgs, String groupBy, String having, String orderBy, String limit):对指定表执行查询语句。其中第一个参数控制是否去除重复值。

    》rawQuery(String sql, String[] selectionArgs):执行带占位符的SQL查询。

    》beginTransaction():开始事物。

    》endTransaction():结束事物。

    从上面的方法不难看出,其实SQLiteDatabase的作用有点类似JDBC的Connection接口,但是SQLiteDatabase提供的方法更多,比如insert,update,delete,query等方法,其实这些方法完全可通过执行sql语句来完成,但Android考虑到部分开发者对sql语法不熟悉,所以提供这些方法帮助开发者以更简单的方法来操作数据表的数据。

    上面的查询方法都是返回一个Cursor对象,Android中的Cursor类似于JDBC的ResuleSet,Cursor同样提供了如下方法来移动查询结果的记录指针。

    》move(int offset):将记录指针向上或向下移动指定的行数。offset为正数时向下移动,为负数时就是向上移动。

    》boolean moveToFirst():将记录指针移动到第一行,如果移动成功则返回true。

    》boolean moveToLast():将记录指针移动到最后一行,如果移动成功则返回true。

    》boolean moveToNext():将记录指针移动到下一行,如果移动成功则返回true。

    》boolean moveToPosition(int position):将记录指针移动到指定行,如果移动成功则返回true。

    》boolean moveToPrevious():将记录指针移动到上一行,如果移动成功则返回true。

    一旦将记录指针移动到指定行之后,接下来就可以调用Cursor的getXxx()方法获取该行的指定列的数据。

    其实如果具有JDBC编程的经验,完全可以把SQLiteDatabase当成JDBC中Connection和Statement的混合体,因为SQLiteDatabase即代表了与数据库的连接,也可直接用于执行sql操作;而android中Cursor则可当成ResultSet,而且Cursor提供了更多便捷的方法来操作结果集。

    创建数据库和表

    前面说到,使用SQLiteDatabase的静态方法即可打开或创建数据库,例如如下代码:

    SQLiteDatabase.openOrCreateDatabase(this.getFilesDir().toString()+"/temp.db3", null);

    上面的代码就是用于打开或者创建一个SQLite数据库,如果/mnt/db/目录下的temp.db3文件(该文件就是一个数据库)存在,那么程序就是打开该数据库;如果文件不存在,则上面的代码将会在该目录下创建temp.db3文件(即对应于数据库)。

    上面的代码中没有指定SQLiteDatabase.CurosrFactory参数,该参数是一个用于返回Cursor的工厂,如果指定该参数为null,则意味着使用默认的工厂。

    上面的代码即可返回一个SQLiteDatabase对象,该对象的execSQL可执行任意的SQL语句,因此程序可通过如下代码在程序中创建数据表:

    // 定义建表语句
    String sql = "create table
     user_info "+ "(user_id integer primary key autoincrement, user_name varchar(255), user_pass varchar(255))";
    // 执行sql语句
    mSqLiteDatabase.execSQL(sql);

    在程序中执行上面的代码即可在数据库中创建一个数据表。

    使用SQL语句操作SQLite数据库

    前面说到,SQLiteDatabase的execSQL方法可执行任意SQL语句,包括带占位符的sql语句。但由于该方法没有返回值,一般用于执行DDL语句或DML语句;如果需要执行查询语句,则可调用SQLiteDatabase的rawQuery(String sql, String[] selectionArfs)方法。

    例如如下代码可用于执行DML语句。

    mSqLiteDatabase.execSQL("insert into " + TABLE_NEWS_INFO
    + " values(null, ?, ?)", new String[] { title, context });

    下面的程序示范了如何在Android应用中操作SQLite数据库,该程序提供了两个文本框,可以输入内容,单击按钮时,会将文本框中的内容插入到数据库。

    1.activity

    package com.example.androidioanddatastore.splite;
    
    import android.app.Activity;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.os.Bundle;
    import android.support.v4.widget.CursorAdapter;
    import android.support.v4.widget.SimpleCursorAdapter;
    import android.text.TextUtils;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.ListView;
    import android.widget.Toast;
    
    import com.example.androidioanddatastore.R;
    
    public class SQLiteActivity extends Activity {
    	/** 数据库名称 */
    	public final static String SQLiteName = "/temp.db3";
    	/** 数据表user_info */
    	public final static String TABLE_USER_INFO = "user_info";
    	/** 数据表news_info */
    	public final static String TABLE_NEWS_INFO = "news_info";
    	private SQLiteDatabase mSqLiteDatabase;
    	/** 显示数据库数据 */
    	private ListView mListView;
    	/** 向数据库提交数据 */
    	private Button mSubmit;
    	/*** Title,Context */
    	private EditText mTitle, mContext;
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_sqlite);
    		// 创建或打开数据库(此处需要使用绝对路径)
    		mSqLiteDatabase = SQLiteDatabase.openOrCreateDatabase(this.getFilesDir().toString()+SQLiteName, null);
    //		initTable();
    		initView();
    		initEvent();
    	}
    
    	/***
    	 * 创建数据库表
    	 */
    	private void initTable() {
    		// 定义建表语句
    		String sql = "create table "
    				+ TABLE_USER_INFO
    				+ "(user_id integer primary key autoincrement, user_name varchar(255), user_pass varchar(255))";
    		// 执行sql语句
    		mSqLiteDatabase.execSQL(sql);
    		// 定义建表语句
    		sql = "create table "
    				+ TABLE_NEWS_INFO
    				+ "(news_id integer primary key autoincrement, news_title varchar(255), news_content varchar(255))";
    		// 执行sql语句
    		mSqLiteDatabase.execSQL(sql);
    	}
    
    	/***
    	 * 添加事件监听器
    	 */
    	private void initEvent() {
    		mSubmit.setOnClickListener(new OnClickListener() {
    			@Override
    			public void onClick(View v) {
    				//获取数据
    				String title = mTitle.getText().toString();
    				String context = mContext.getText().toString();
    				//插入数据
    				insertData(title, context);
    				//查询数据
    				queryData();
    			}
    		});
    	}
    
    	/***
    	 * 查询数据库数据
    	 */
    	protected void queryData() {
    		// 执行查询
    		Cursor cursor = mSqLiteDatabase.rawQuery("select news_id AS _id, news_title, news_content from "
    				+ TABLE_NEWS_INFO, null);
    		//填充SimpleCursorAdapter
    		SimpleCursorAdapter adapter = new SimpleCursorAdapter(
    				SQLiteActivity.this, R.layout.item_line, cursor, new String[] {
    						"news_title", "news_content" }, new int[] {
    						R.id.text_left, R.id.text_right },
    				CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
    		//显示数据
    		mListView.setAdapter(adapter);
    	}
    
    	/***
    	 * 向数据库插入数据
    	 * 
    	 * @param title
    	 * @param context
    	 */
    	protected void insertData(String title, String context) {
    		if(TextUtils.isEmpty(title)&&TextUtils.isEmpty(context)){
    			Toast.makeText(SQLiteActivity.this, "数据不能为空", Toast.LENGTH_SHORT).show();
    			return;
    		}
    		// 执行插入语句
    		mSqLiteDatabase.execSQL("insert into " + TABLE_NEWS_INFO
    				+ " values(null, ?, ?)", new String[] { title, context });
    	}
    
    	/**
    	 * 初始化组件
    	 */
    	private void initView() {
    		mListView = (ListView) findViewById(R.id.sqlite_listview);
    		mSubmit = (Button) findViewById(R.id.sqlite_submit);
    		mTitle = (EditText) findViewById(R.id.sqlite_title);
    		mContext = (EditText) findViewById(R.id.sqlite_context);
    	}
    	
    	@Override
    	protected void onDestroy() {
    		super.onDestroy();
    		//mSqLiteDatabase.isOpen():如果数据库是当前打开的返回true。
    		if(mSqLiteDatabase != null && mSqLiteDatabase.isOpen()){
    			//释放数据库对象
    			mSqLiteDatabase.close();
    		}
    		
    	}
    }
    
    3.xml布局文件

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
        <EditText 
            android:id="@+id/sqlite_title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="title"/>
        <EditText 
            android:id="@+id/sqlite_context"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="context"/>
        <Button 
            android:id="@+id/sqlite_submit"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="submit"/>
        <ListView 
            android:id="@+id/sqlite_listview"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>
    
    </LinearLayout>
    
    3.listview的item布局文件

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal" >
        <TextView 
            android:id="@+id/text_left"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:text="dddd"
            />
         <TextView 
            android:id="@+id/text_right"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:text="dddd"
            />
    
    </LinearLayout>
    


    需要指出的是,使用SimpleCursorAdapter封装Cursor时要求底层数据表的主键列的列明为_id,因为SimpleCursorAdapter只能识别列名为_id的主键。因此上面的程序创建数据表示制定了主键列的列明为_id,否则就会出现java.lang.IllegalArgumentException: column '_id' does not exist错误,但是我上面的sql查询语句中,已经给了解决方法。

    上面的程序中重写了Activity的onDestroy()方法,当应用程序退出该Activity时将会回调该方法,程序在该方法中关闭了SQLiteDatabase,就像JDBC编程中需要关闭Statement和Connection一样,这里也需要关闭SQLiteDatabase,否则可能引发资源泄露。总结起来使用SQLiteDatabase进行数据库操作的步骤如下:

    1、获取SQLiteDatabase对象,它代表了与数据库的连接。

    2、调用SQLiteDatabase的方法来执行sql语句。

    3、操作sql语句的执行结果,比如用SimpleCursorAdapter封装Cursor。

    4、关闭SQLiteDatabase,回收资源。

    展开全文
  • MySQL中特别实用的几种SQL语句送给大家

    万次阅读 多人点赞 2020-06-11 17:23:49
    在写SQL时,经常灵活运用一些SQL语句编写的技巧,可以大大简化程序逻辑。减少程序与数据库的交互次数,有利于数据库高可用性,同时也能显得你的SQL很牛B,让同事们眼前一亮。 目录 实用的SQL 1.插入或替换 2....
  • 数据库基础(常用SQL语句

    万次阅读 多人点赞 2019-10-07 13:49:59
    一、数据库级及SQL语言简介 1、目前主流数据库 微软:sql server、access 瑞典:mysql ibm: db2 sybase:sybase ibm: informix oracle: oracle 2、SQL语言 DQL-------------数据查询语言 select … From … Where DML...
  • sql语句查询到整个数据库的容量

    千次阅读 2017-08-29 17:17:59
    在需要备份数据库里面的数据时,我们需要知道数据库占用了多少磁盘大小,可以通过一些sql语句查询到整个数据库的容量,也可以单独查看表所占容量。1、要查询表所占的容量,就是把表的数据和索引加起来就可以了select...
  • 存储在数据库的大量数据,尤其是进行时空分析的数据,很多信息是重复的,当想更改这些信息用于别的研究时,可直接用SQL语句更改 sql语句为:UPDATE table_name SET field_name = replace (field_name,’from_str’,...
  • 首先连接数据库,接着就可以对数据库进行操作了 创建Connection对象,建立与数据库的连接。 ResultSet 对象是用来存放操作结果的,也就是SQL查询...PreparedStatement (ps)方法对参数sql指定的SQL语句进行预编...
  • Oracle,SQL Server 数据库交MySql数据库Sql语句差异 1.关系型数据库 百度百科 关系数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。现实世界中的各种实体以及实体...
  • CREATE DATABASE 用于创建数据库SQL CREATE DATABASE 语法 CREATE DATABASE database_name SQL CREATE DATABASE 实例 现在我们希望创建一个名为 "my_db" 的数据库。 我们使用下面的 CREATE ...
  • 用于从从SQLServer数据库导出SQL语句
  • SQL Server UPDATE语句用于更新数据

    万次阅读 2014-10-21 09:33:20
    SQL Server UPDATE语句用于更新数据,下面就为您详细介绍SQL Server UPDATE语句语法方面的知识,希望可以让您对SQL Server UPDATE语句有更多的了解。 现实应用中数据库中的数据改动是免不了的。通常,几乎所有的...
  • 注意:在创建数据库和创建新表时,表名必须不存在,否则将出错。...CREATE TABLE 语句用于创建数据库中的表。表由行和列组成,每个表都必须有个表名。 如果只是想在一个表不存在时创建它,应该在表名后面给出 I...
  • 数据库常用sql语句总结

    万次阅读 多人点赞 2018-12-14 16:16:32
    查看时右侧可以打开CSDN自带的目录,方便查看 目录 一、基础 1.SELECT 语句 2.SELECT DISTINCT 语句 3.WHERE 子句 ...5.ORDER BY 语句 ...6.INSERT INTO 语句 ...7.Update 语句 ...3.SQL 通配符 4.IN...
  • CREATE TABLE 语句用于创建数据库中的表。 SQL CREATE TABLE 语法 CREATE TABLE 表名称 ( 列名称1 数据类型, 列名称2 数据类型, 列名称3 数据类型, .... ) 数据类型(data_type)规定了列可容纳何种数据类型。...
  • SQL SERVER 备份数据库sql语句

    千次阅读 2018-09-26 15:39:11
    declare @filename nvarchar(100) set @filename='D:\\DB_backup\\DBNAME_'+convert(char(8),...以上代码可用于创建SQL代理作业,自动备份数据库。 步骤:SQL Server代理→新建作业→步骤(新建)→计划(新建)
  • 数据库SQL语句总结大全

    千次阅读 多人点赞 2020-02-28 10:24:39
    数据库基础概念二.SQL概述1)分类2)相关概念3) 增删改案例①DDL②DML 一.数据库基础概念 数据库就是用来存储和管理数据的仓库! 二.SQL概述 SQL(Structured Query Language)是“结构化查询语言”,它是对关系...
  • sql语句数据库表进行加锁和解锁

    万次阅读 2018-06-29 22:56:21
    锁是数据库中的一个非常重要的概念,它主要用于多用户环境下保证数据库完整性和一致性。 我们知道,多个用户能够同时操纵同一个数据库中的数据,会发生数据不一致现象。即如果没有锁定且多个用户同时访问一个数据库...
  • SQL语句是针对数据库而言的一门语言,它可以创建数据库,数据表,可以针对数据库的数据进行增, 删,改,查等操作,可以创建视图,存储过程,可以赋予用户权限等。 2.SQL和T-SQL SQL的全程是“结构化查询语言...
  • mysql数据库常用sql语句

    万次阅读 多人点赞 2018-11-03 21:10:01
    数据库可以用图形化工具来实现一系列操作,这里涉及一些cmd命令行 首先要配置好环境变量可以全局操作命令,不然只能在mysql的安装目录下进行操作,这里不再叙述 1. 进入数据库: mysql -u root -p (默认用户名为...
  • 使用SQL语句创建及使用SQLServer数据库

    万次阅读 多人点赞 2017-02-03 22:36:34
    SQL语言在SQL Sever中的应用 1. 数据库的建立  在企业管理器中,建立教务数据库——EDUCATION。  1截图    2说明  在导航中的数据库上右键,新建数据库。  填写数据库名称:EDUCATION。  除了文件...
  • 通过SQL语句直接实现Excel与数据库的导入导出
  • GRANT在安全系统中创建项目,使当前数据库中的用户得以处理当前数据库中的数据或执行特定的 Transact-SQL 语句。语法语句权限:GRANT { ALL | statement [ ,...n ] } TO security_account [ ,...n ]对象权限:GRANT...
  • MySQL数据库SQL语句的执行过程

    万次阅读 多人点赞 2021-02-22 03:59:20
    我们的系统在和 MySQL 数据库进行通信前,需要先和数据库建立连接,而这个功能就是由MySQL驱动底层帮我们完成的,建立完连接之后,我们只需要发送 SQL 语句就可以执行 CRUD 了。如下图所示: 一次 SQL 请求就会...
  • SQL数据库查询语句

    万次阅读 多人点赞 2016-08-26 23:40:12
    select语句除了可以查看数据库中的表格和视图的信息外,还可以查看SQL Server的系统信息、复制、创建数据表。其查询功能强大,是SQL语言的灵魂语句,也是SQL中使用频率最高的语句。 基本select语句: 一个基本...
  • ORDER BY 语句用于对结果集进行排序。 ORDER BY 语句 ORDER BY 语句用于根据指定的列对结果集进行排序。 ORDER BY 语句默认按照升序对记录进行排序。 如果您希望按照降序对记录进行排序,可以使用 ...
  • sqlserver 数据库 SQL循环语句

    千次阅读 2010-08-22 13:37:00
    关键字: sqlserver 数据库 SQL循环语句 declare @i int set @i=1 while @i begin insert into test (userid) values(@i) set @i=@i+1 end --------------- while 条件 begin ...
  • SQL语句创建数据库和表

    万次阅读 2016-06-10 20:32:14
    --------创建数据库 ----use master ----GO ----IF EXISTS (SELECT name FROM master.dbo.sysdatabases WHERE name = 'test1') ----DROP DATABASE test1 ----GO ----CREATE DATABASE test1 ------创建教师表 --...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 431,278
精华内容 172,511
关键字:

哪个sql语句用于更新数据库