精华内容
下载资源
问答
  • 易语言ADO数据库对象模块源码,ADO数据库对象模块,list,取错误内容,取对象,内部_更新连接错误内容,连接MSSql,连接MDB,关闭库,执行_附加文本,执行_附加字节集,查询,开启事务,回滚事务,提交事务,设置记录集,关闭记录集,...
  • 今天遇到了这个异常,每次查询的时候都会报这个异常,说应用程序没关闭打开的数据库对象或者是游标。  在执行查询的时候,不能关闭数据库对象,如果关闭了那么在后面调用方法就得不到数据,所以在返回游标之前不...
    今天遇到了这个异常,每次查询的时候都会报这个异常,说应用程序没关闭打开的数据库对象或者是游标。

        在执行查询的时候,不能关闭数据库对象,如果关闭了那么在后面调用方法就得不到数据,所以在返回游标之前不能关闭数据库对象,所以就只能用一个办法来关闭数据库了。

     

     @Override
     protected void finalize() throws Throwable {
      // TODO Auto-generated method stub
      
      if (db.isOpen()){
       db.close();
      }
      super.finalize();
     }

     

    使用这个方法将数据库对象关闭就不会再出现这个异常了!android.database.sqlite.databaseobjectnotclosedexception:应用程序没有关闭的光标或数据库对象,在

    展开全文
  • 精彩编程与编程技巧-用VB实现关闭所有数据库对象 ...
  • 意思是指在此处打开数据库操作之前,应用程序没有关闭游标或数据库对象。 在应用中,对数据库操作完成后,应该对游标及数据库进行关闭操作 if (!cur.isClosed()) { cur.close(); } db.close(); ...
    Android 2.3.3           
    Eclipse Version: 3.7.0           
    LogCat  


    LogCat 报错信息:

    02-13 11:58:13.759: ERROR/Database(432): close() was never explicitly called on database '/data/data/com.taobao.htc/databases/taobaoHtc.db' 
    02-13 11:58:13.759: ERROR/Database(432): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
    02-13 11:58:13.759: ERROR/Database(432): at android.database.sqlite.SQLiteDatabase.(SQLiteDatabase.java:1847)
    02-13 11:58:13.759: ERROR/Database(432): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:820)
    02-13 11:58:13.759: ERROR/Database(432): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:854)
    02-13 11:58:13.759: ERROR/Database(432): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:847)
    02-13 11:58:13.759: ERROR/Database(432): at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:544)
    02-13 11:58:13.759: ERROR/Database(432): at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203)
    02-13 11:58:13.759: ERROR/Database(432): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:118)
    02-13 11:58:13.759: ERROR/Database(432): at com.taobao.htc.db.RecordDBHelper.query(RecordDBHelper.java:49)
    02-13 11:58:13.759: ERROR/Database(432): at com.taobao.htc.manage.RecordDBopt.get(RecordDBopt.java:78)
    02-13 11:58:13.759: ERROR/Database(432): at com.taobao.htc.manage.RecordMessage.sendMseeage(RecordMessage.java:111)
    02-13 11:58:13.759: ERROR/Database(432): at com.taobao.htc.manage.RecordMessage.sendMseeage(RecordMessage.java:87)
    02-13 11:58:13.759: ERROR/Database(432): at com.taobao.htc.Report.run(Report.java:49)
    02-13 11:58:13.759: ERROR/Database(432): at java.lang.Thread.run(Thread.java:1019)
    02-13 11:58:13.830: WARN/ActivityManager(62): Launch timeout has expired, giving up wake lock!
    02-13 11:58:14.381: DEBUG/dalvikvm(432): GC_CONCURRENT freed 771K, 57% free 2908K/6727K, external 2013K/2137K, paused 7ms+5ms
    02-13 11:58:14.630: DEBUG/dalvikvm(432): GC_FOR_MALLOC freed 867K, 58% free 2836K/6727K, external 2013K/2137K, paused 178ms
    


    发生错误原因分析:

    主要错误:

    02-13 11:58:13.759: ERROR/Database(432): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
    


    出错处代码

    		SQLiteDatabase db = getWritableDatabase();
    

     

    意思是指在此处打开数据库操作之前,应用程序没有关闭游标或数据库对象。

    在应用中,对数据库操作完成后,应该对游标及数据库进行关闭操作

    		if (!cur.isClosed()) {
    			cur.close();
    		}
    		db.close();


    解决办法:

    检查操作数据库的相关源代码,增加关闭“cursor or database object”的代码 。

    PS。


     

    展开全文
  • 数据库连接对象:connection 数据库交互对象:cursor 数据库异常类:exceptions 开发数据库程序流程: 1.创建connection对象,获取cursor 2.使用cursor执行SQL 3.使用cursor获取数据、判断执行状态 4....

    学习连接地址:点击打开

    1.Python DB API

    Python DB API包含:

    数据库连接对象:connection

    数据库交互对象:cursor

    数据库异常类:exceptions


    开发数据库程序流程:

    1.创建connection对象,获取cursor

    2.使用cursor执行SQL

    3.使用cursor获取数据、判断执行状态

    4.提交事务 或者 回滚事务


    使用Python DB AP访问数据库流程:

    开始------->创建数据库连接connection------>获取cursor------>处理数据(增删查改)------->关闭cursor------>关闭connection------>结束


    2.数据库连接对象connection

    创建方法:MySQLdb.connect(参数)

    参数名     类型      说明
    host       字符串    MySQL服务器地址
    
    port       数字      MySQL服务器端口号
    user       字符串    用户名
    passwd     字符串    密码
    db         字符串    数据库名称
    charset    字符串    连接编码

    Connection对象支持的方法:

    方法名          说明
    cursor()        使用该连接创建并返回游标 
    commit()        提交当前事务
    rollback()      回滚当前事务
    close()         关闭丽连接

    创建数据库连接例子
    
    import MySQLdb
    conn = MySQLdb.connect(
        host='127.0.0.1',
        port=3306,
        user='root',
        passwd='mysql1991',
        db='testpy',
        charset='utf8'
    )
    cursor = conn.cursor()
    print conn
    print cursor
    cursor.close()
    conn.close()

    3.数据库游标对象cursor

    游标对象:用于执行查询和获取结果
    cursor支持的方法
    参数名                  说明
    execute(op[,args])      执行一个数据库查询和命令,将结果从数据库获取到客服端
    fetchone                取的结果集的下一行
    fetchmany(size)         获得结果集下几行
    fetchall()              获取结果集中剩下的所有行
    rowcount                最近一次execute返回数据的行数或影响行数,获取缓冲区中数据所有行数
    close()                 关闭游标对象
    fetch*()方法:移动rownumber,返回数据
    select语句获取数据库数据
    # -*-coding:utf-8-*-
    import MySQLdb
    
    conn=MySQLdb.Connect(host='127.0.0.1',port=3306,user='root',passwd='mysql1991',db='testpy',charset='utf8')
    cursor = conn.cursor()
    
    #sql查询语句
    sql='select * from user '
    #sql语句执行
    cursor.execute(sql)
    #获取返回数据总条数
    rs=cursor.rowcount
    print rs
    #获取返回的第一条数据,此时游标rownumber=0,获取后=1
    rs=cursor.fetchone()
    print rs
    #获取返回数据的接下来3条数据,此时游标rownumber=1,获取后=4
    rs=cursor.fetchmany(3)
    print rs
    #获取剩下的所有返回数据,此时游标rownumber=4,获取后=最后条
    rs=cursor.fetchall()
    print rs
    #循环获取,对每条数据进行处理
    for row in rs:
        print 'userID=%s  username=%s'% row
    cursor.close()
    conn.close()

    事务的概念
    事务:访问和更新数据库的一个程序执行单元
    -原子性:事务中包括的诸操作要么都做,要么都不做
    -一致性:事务必须是数据库从一致性状态变到另一个一致性状态
    -隔离性:一个事务的执行不能被其他事务干扰
    -永久性:事务一旦提交。它对数据库的改变就是永久性的

    开发中的使用事务
    -关闭自动commit:设置conn.autocommit(False)
    -正常结束事务:conn.commit()
    -异常结束事务:conn.rollback()
    
      
    增删改中事务的使用
    # -*-coding:utf-8-*-
    import MySQLdb
    
    conn = MySQLdb.Connect(host='127.0.0.1', port=3306, user='root', passwd='mysql1991', db='testpy', charset='utf8')
    cursor = conn.cursor()
    
    # 增删改
    sql_insert = "insert into user(id,username) VALUE (10,'name10')"
    sql_update = "update user set username='name91' where id=9"
    sql_dalete = "delete from user where id<3"
    try:#如果没有出现异常,则提交事务
        cursor.execute(sql_insert)
        print cursor.rowcount  # 1
        cursor.execute(sql_update)
        print cursor.rowcount  # 1
        cursor.execute(sql_dalete)
        print cursor.rowcount  # 2
        conn.commit()
    except Exception as e:#如果出现异常,则打印异常并且回滚事务
        print e
        conn.rollback()
    cursor.close()
    conn.close()
    

    例子,银行转账操作模拟:
    # coding:utf8
    # sys.argv:如果模块是被直接运行的,则代码块被运行,如果模块是被导入的,则代码块不被运行。
    import sys
    
    import MySQLdb
    
    
    class TransferMoney(object):
        def __init__(self, conn):
            self.conn = conn
    
        def transfer(self, source_account, target_account, money):
            try:
                self.check_account_available(source_account)  # 检查source_account来源账户是否可用的方法
                self.check_account_available(target_account)  # 检查target_account目标账户是否可用的方法
                self.have_enough_money(source_account, money)  # 检查source_account来源账户是否有足够的钱
                self.reduce_money(source_account, money)  # source_account来源账户减去money
                self.add_money(target_account, money)  # target_account目标账户增加相应的钱money
                self.conn.commit()  # 如果都上面所以的操作都没有异常,则提交事务执行
            except Exception as e:
                self.conn.rollback()
                raise e
    
        # 检查账户是否可用
        def check_account_available(self, account):
            cursor = self.conn.cursor()
            try:
                sql = "select * from account where id=%s" % account
                cursor.execute(sql)
                print 'check_account_available' + sql
                rs = cursor.fetchall()
                if len(rs) != 1:
                    raise Exception('账号 %s 不存在:' % account)
            finally:
                cursor.close()
    
        # 检查账户余额是否充足
        def have_enough_money(self, account, money):
            cursor = self.conn.cursor()
            try:
                sql = "select * from account where id=%s and money>=%s" % (account, money)
                cursor.execute(sql)
                print 'have_enough_money' + sql
                rs = cursor.fetchall()
                if len(rs) != 1:
                    raise Exception('账号 %s 没有足够的钱:' % account)
            finally:
                cursor.close()
    
        # 转出账户减去钱
        def reduce_money(self, account, money):
            cursor = self.conn.cursor()
            try:
                sql = "update account set money=money-%s where id=%s" % (money, account)
                cursor.execute(sql)
                print 'reduce_money' + sql
                rs = cursor.rowcount
                if rs != 1:
                    raise Exception('账号 %s 减款失败:' % account)
            finally:
                cursor.close()
    
        # 收款账户增加钱
        def add_money(self, account, money):
            cursor = self.conn.cursor()
            try:
                sql = "update account set money=money+%s where id=%s" % (money, account)
                cursor.execute(sql)
                print 'add_money' + sql
                rs = cursor.rowcount
                if rs != 1:
                    raise Exception('账号 %s 加款失败:' % account)
            finally:
                cursor.close()
    
    
    if __name__ == '__main__':  # 只有当本模块之间运行的时候才执行,__name__才等于__main__
        # sys.argvh从程序外部获取参数的桥梁
        source_account = sys.argv[1]  # 来源账户
        target_account = sys.argv[2]  # 目标账户
        money_account = sys.argv[3]  # 转账金额
        # 数据库连接
        conn = MySQLdb.connect(host='127.0.0.1', port=3306, user='root', passwd='mysql1991', db='testpy', charset='utf8')
        # 转账类TransferMoney
        tr_money = TransferMoney(conn)
        try:
            tr_money.transfer(source_account, target_account, money_account)  # transfer:转账类TransferMoney中的方法
        except Exception as e:
            print '出现问题:' + str(e)
        finally:
            conn.close()


    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      




    展开全文
  • 数据库对象名无效 解决方法总结

    万次阅读 2019-02-25 18:11:23
    数据库里面新建表后显示对象名无效,但是在表中能看见,就是无法引用。(强迫症、看着下划线是一排红色的、不爽)。重启sql服务也没有用。 暴力解决方法::关闭SQL管理器,再重新打开。(红色下划线不见了、对象...

    在数据库里面新建表后显示对象名无效,但是在表中能看见,就是无法引用。(强迫症、看着下划线是一排红色的、不爽)。重启sql服务也没有用。

    暴力解决方法::关闭SQL管理器,再重新打开。(红色下划线不见了、对象名无效也不见了)

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

    下面是看到其他人遇见的问题及解决见解,给大家参考::

    网站升级后,打开一个页面无法访问, 提示: “对象名”xxx”无效.

    xxx表在服务器上没有创建,于是俺打开 “sql查询分析器”:

    导出创建xxx表的sql脚本,如下:

    1. CREATE TABLE [xxx] (  
    2. [id] [int] IDENTITY (1, 1) NOT NULL ,  
    3. [title] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NOT NULL ,  
    4. [kind] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NOT NULL ,  
    5. [content] [nvarchar] (1000) COLLATE Chinese_PRC_CI_AS NOT NULL ,  
    6. [keyword] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,  
    7. [Add_Date] [datetime] NULL 
    8. ) ON [PRIMARY] 

    然后在服务器上创建. 再次刷新, 提示: 对象名”xxx”无效. 香蕉你个扒拉~~

    Google上搜索, 可能的原因是 数据库所有者问题. 数据库可以有不同的登陆帐户,

    而数据库是可以隶属于某个帐户的, 于是问题就出来了.

    假若在pubs库中logina帐户登陆并创建一个x表, 然后loginb帐户登陆并查询x表

    就提示: 对象名”xxx”无效.

    我勒你个去!~

    以下省略N个

    鬼知道刚才那个脚本将表创建到那个用户下了. 于是,聪明的我又打开”企业管理器”,

    选中表 导出sql脚本,这次出来的脚本就带上 所有者了:

    1. CREATE TABLE [logina].[xxx] (  
    2. [id] [int] IDENTITY (1, 1) NOT NULL ,  
    3. [title] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NOT NULL ,  
    4. [kind] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NOT NULL ,  
    5. [content] [nvarchar] (1000) COLLATE Chinese_PRC_CI_AS NOT NULL ,  
    6. [keyword] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,  
    7. [Add_Date] [datetime] NULL 
    8. ) ON [PRIMARY]  
    9. GO 

    于是俺drop table 服务器上的 xxx 表,又运行了上面的脚本.

    再次刷新, 娘西匹! 还是:对象名”xxx”无效.

    我数据库访问层使用的是subsonic, 于是我就看了subsonic生成的代码,发现有这样

    一行:

    1. schema.SchemaName = @"dbo"; 

    哇! 可俺数据库连接字符串中的登陆名不是这个玩意儿啊!

    但是, 其他的表貌似查询啥的都无问题??????????????????????????????

    于是,俺在服务器上运行的代码中加了如下一行:

    1. output q.BuildSqlStatement(); 

    俺直接将生成的查询代码在服务器上运行,提示: 对象名”xxx”无效.

    我日,有门~!

    因为生成的脚本中,xxx表前加的所有者是”dbo”. 我靠~

    再次, drop table xxx, 然后:

    1. CREATE TABLE [dbo].[xxx] (  
    2. [id] [int] IDENTITY (1, 1) NOT NULL ,  
    3. [title] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NOT NULL ,  
    4. [kind] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NOT NULL ,  
    5. [content] [nvarchar] (1000) COLLATE Chinese_PRC_CI_AS NOT NULL ,  
    6. [keyword] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,  
    7. [Add_Date] [datetime] NULL 
    8. ) ON [PRIMARY]  
    9. GO 

    再次刷新, 可爱的小姑娘到底还是害羞的走了出来.~~~

    总结:

    1,在真实的生产环境中,需要注意 表所有者的问题.

    2,不同的所有者创建的表,在其他用户登录下是访问不到的,会提示: 对象名”xxx”无效.

    3,为啥我的登陆名是 logina 但加上logina却提示: 对象名”xxx”无效? 因为subsonic

    生成的脚本使用的是 dbo. 为什么? 鬼知道~~

    原文链接:https://cloud.tencent.com/info/bdfe5a3071aea3213b2dff5e101b50e5.html

    展开全文
  • 数据库对象的缓存策略

    万次阅读 热门讨论 2004-12-21 15:20:00
    数据库对象的缓存策略前言本文探讨Jive(曾经开源的Java论坛)和Hibernate(Java开源持久层)的数据库对象的缓存策略,并阐述作者本人的Lightor(Java开源持久层)采用的数据库对象缓存策略。本文的探讨基于以前开源的...
  • oracle数据库对象导出脚本

    千次阅读 2014-12-01 18:39:17
    ORACLE数据库是常用的企业级数据库类型,在windows操作系统下有很好的数据库管理工具,但在ubuntu(linux、aix、unix)环境下,最好的管理方式就是脚本化管理,下面是oracle数据库用户对象导出脚本,在此留印,以备...
  • 怎么就可以把数据库的数据传送到客户端或客户端的数据是如何存到数据库中的呢?接下来我们就学习一下客户端与数据库之间的桥梁 ADO.NET的两个核心组件 .NET Framework包括:Connection、Command、DataReader、...
  • 数据库基本对象

    千次阅读 2019-04-02 15:29:43
    概念:在一个业务逻辑处理过程中,多条SQL语句作为一个原子操作(单个工作的逻辑单元中处理的一些列SQL操作),这些操作作为一个整体想数据库提交,这些SQL要么全部执行成功,要么全部不执行。 MySQL中默认把每一条...
  • 最近在使用mybatis做数据库管理的时候出现了一个问题,因为只是一个控制台项目,所以没有整合spring,只是用了mybatis默认的一些数据库配置信息。 然后再与前端做交互的时候前端并发访问总是会出现这几个错误: ...
  • 用mysqli面向对象方法连接数据库!-姚远的博客 <form method=POST action=<?php echo htmlspecialchars($_SERVER['PHP_SELF'])?>> 服务器地址:<input type=text name=mysqlip/> 服务器账号...
  • 使用 JDBC 创建数据库对象

    千次阅读 2004-08-06 18:22:00
    James W. CooperIBM T.J. Watson 研究中心1998 年 5 月 Download it now! PDF (209 KB) Free Acrobat Reader 摘自:Java 1.1 中面向对象编程的原理 摘要本
  • JDBC 连接数据库关闭数据库连接

    千次阅读 2016-12-14 09:59:54
    JDBC 连接数据库关闭数据库连接
  • Python-数据库游标对象详解

    千次阅读 2016-11-03 11:06:16
    常用数据库:MySQL、Oracle、SQLite 但是包嵌入到Python中的只有轻量级数据库SQLite,所以不用安装SQLite数据库操作包(但要安装数据库软件, 此处我犯错误了)。其他的必须安装。同时也要安装数据库软件。 先讲解下DB-...
  • 执行数据库操作命令对象SqlCommand

    千次阅读 热门讨论 2018-11-16 16:04:12
    数据库应用程序的开发流程一般主要分为以下几个步骤: ... 使用Connection对象成功创建数据库连接后,接下来就可以使用Command对象对数据源执行查询、添加、删除和修改等各种SQL命令了。 SqlComma...
  • JDBC:java数据库连接对象

    千次阅读 2020-03-19 17:28:32
    全称为Java数据库连接对象,是java程序和数据库的连接桥梁。 作用:可以为多种关系型数据库DBMS提供统一的访问方式,用Java来操作数据库。 1. JDBC API主要功能:主要干三件事,具体通过以下类/接口实现: ...
  • php面象对象数据库操作类,构造一个数据库操作类,封装所有数据库操作,可以扩展便于后台管理程序的使用,取回数据库记录数,返回数据库表字段数和表字段名称集,最后不要忘记关闭数据路连接。
  • 3.4Python之对象数据库ZODB

    千次阅读 2016-09-25 15:22:41
    ZODB是一个可扩展和冗余的对象数据库,其专注于存储可扩展的对象,而没有天生“对象-关系”不匹配情况:在尝试将面向对象的语言与关系查询系统映射对象建立关系时,可能会出现这种不匹配情况。二、ZODB使用建立和...
  • DM启动和关闭数据库

    2020-09-27 15:38:44
    配置状态( MOUNT 不允许访问数据库对象,只能进行控制文件维护、归档配置、数据库模式修改等操作; 打开状态( OPEN 不能进行控制文件维护、归档配置等操作,可以访问数据库对象,对外提供正常的数据库服务; 挂起...
  • php面象对象数据库操作类,构造一个数据库操作类,封装所有数据库操作,可以扩展便于后台管理程序的使用,取回数据库记录数,返回数据库表字段数和表字段名称集,最后不要忘记关闭数据路连接。
  • 目录简介前提条件可视化数据库工具服务器资源管理器表设计器数据库设计器示例应用程序SQL 编辑器查询和视图设计器调试存储过程数据集使用 ADO.NET 访问 SQL ServerXML 和 Visual Studio .NETSQLXML 3.0数据库项目...
  • 今天从新装了系统,所以sql和vb就得从新装,所以就得从新配置一下那个学生信息管理系统,我觉还是挺简单的,...数据库都能连接上,为啥还提示对象关闭呢? 1.ODBC和ADO关系: 程序是A,数据库是B,A想到B地办事,O
  • 我是个新手,在session会话开始的时候连接的数据库,但是在什么时候关闭数据库的连接呢。我想在session会话结束时关闭连接,应该怎么写? (自问自答)不好意思,麻烦大家了。 我做的是一个银行系统小demo(web ...
  • 一个php面向对象数据库操作类库,注意使用时最后不要忘记关闭数据路连接$SqlDB->Close();当然这句可以不要,php会自动注销!但是这样能够养成一个好的习惯,最好还是加上!

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 456,892
精华内容 182,756
关键字:

关闭数据库对象