精华内容
下载资源
问答
  • Java实现数据库查询自动封装成对象

    千次阅读 2018-01-08 21:39:04
    用过框架的人应该都知道,像mybatis这种将数据库查询出的结果自动封装成对象是如何实现的呢?这篇文章将会模仿功能。 1、首先设计一个工具类,用来获取数据库连接,关闭资源 public class ConnUtil { final ...

    用过框架的人应该都知道,像mybatis这种将数据库查询出的结果自动封装成对象是如何实现的呢?这篇文章将会模仿此功能。

    1、首先设计一个工具类,用来获取数据库连接,关闭资源

    public class ConnUtil {
    	final static String URL = "jdbc:mysql://127.0.0.1:3306/zsdj?useSSL=false";
    	final static String USERNAME = "root";
    	final static String PASSWORD = "root";
    	
    	private static Connection conn;
    	
    	static{
    		try {
    			Class.forName("com.mysql.jdbc.Driver");
    		} catch (ClassNotFoundException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    
    	//获取数据库连接
    	public static Connection getConn(){
    		try {
    			if (conn==null||conn.isClosed()) {
    				conn=DriverManager.getConnection(URL, USERNAME, PASSWORD);
    			}
    		} catch (SQLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		return conn;
    	}
    
    	//关闭资源
    	public static void closeAll(ResultSet rs,PreparedStatement ps,Connection conn){
    		try {
    			if (rs!=null) {
    				rs.close();
    			}
    			if (ps!=null) {
    				ps.close();
    			}
    			if (conn!=null) {
    				conn.close();
    			}
    		} catch (SQLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    }

    2、sql预编译,动态化添加参数(参数的顺序要对应),返回PreparedStatement对象。

    public static PreparedStatement getPS(PreparedStatement ps, Object... objects) {
    		for (int i = 0; i < objects.length; i++) {
    			try {
    				ps.setObject(i + 1, objects[i]);
    			} catch (SQLException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		}
    		return ps;
    	}
    3、将查询结果与对象属性绑定,返回一个HashMap对象

    public static Map<String, Object> setMap(Object obj,ResultSet rs){
    		HashMap<String, Object> hm=new HashMap<>();
    		Field[] fields=obj.getClass().getDeclaredFields();
    		for(int i=0;i<fields.length;i++){
    			try {
    				hm.put(fields[i].getName(), rs.getObject(fields[i].getName()));
    			} catch (SQLException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		}	
    		return hm;
    	}
    4、将查询出的结果set到对象里

    public static void setT(Object obj, Map<String, Object> map1) {
    
    		Class c = obj.getClass();
    		Method[] methods = c.getMethods();
    		for (Method m : methods) {
    			if (m.getName().startsWith("set")) {
    				String name = m.getName();
    				name = name.substring(3, 4).toLowerCase() + name.substring(4, name.length());
    				
    				if (map1.containsKey(name)) {
    					try {
    						m.invoke(obj, map1.get(name));
    					} catch (Exception e) {
    						// TODO Auto-generated catch block
    						e.printStackTrace();
    					}
    				}
    			}
    		}
    	}
    基本利用的反射的原理以及字符串的操作,需要注意,数据库字段与实体类属性要对应,如数据库字段name,实体类是name,并且需要对应的set方法,setName。或者我们可以自定义注解,来对应实体类属性和数据库字段以及实体类和表名对应,参照Mybatis-plus的注解TableField来指定表明,TableName来指定字段。


    展开全文
  • 2.加载数据库驱动(javaSE可省略步,javaweb必须编写步) Class.forName(“com.mysql.jdbc.Driver”); //注意:mysql6以下驱动:com.mysql.jdbc.Driver mysql6和6以上驱动:com.mysql.cj.jdbc.Driver 3.通过...

    1.JDBC的操作流程

    JDBC:java数据库连接。是一套java连接数据库的标准。

    1.引入jar包
    2.加载数据库驱动(javaSE可省略此步,javaweb必须编写此步)

    Class.forName(“com.mysql.jdbc.Driver”);
    //注意:mysql6以下驱动:com.mysql.jdbc.Driver
            mysql6和6以上驱动:com.mysql.cj.jdbc.Driver
    

    3.通过驱动管理,获取jdbc连接对象

    Connection connection = DriverManager.getConnection("数据库连接地址","账号","密码");
    //数据库链接地址格式:主协议:子协议://IP地址:端口号/数据库名称
    //mysql的链接地址:jdbc:mysql://localhost:3306/test
    //oracle的链接地址:jdbc:oracle:thin:@localhost:1521:test
    //注意:通常在数据库名称后面加上?useUnicode=true&characterEncoding=utf-8,防止乱码
    //例:jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8
    

    4.通过连接对象,创建SQL执行对象

    Statement statement = connection.createStatement();
    //这只是其中一种SQL执行对象的创建,还有一种PreparedStatement(预处理)可以预防注入问题,在后面的博客会更新二者的区别
    

    5.通过SQL执行对象,执行SQL语句

    statement.excute("SQL执行语句");
    //例:statement.excute("select * from user");
    

    6.释放连接***************************(很重要)

    connection.close();
    statement.clos();
    

    2.完整使用示例

    这里的异常全部采用了抛出处理,通常应该是try catch finally,在finally进行释放连接。

    public static void createTable() throws ClassNotFoundException, SQLException {
            /**
             * 机载数据库驱动
             */
            Class.forName("com.mysql.jdbc.Driver");
            /**
             * 通过驱动管理,获取连接对象
             */
            Connection conn =  DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8","root","");
            /**
             * 通过连接对象,创建数据库操作对象
             */
            Statement state = conn.createStatement();
            /**
             * 创建一个名为person的表
             */
            state.execute("create table person(id int,nickname varchar(32))");
            /**
             * 释放连接
             */
            conn.close();
            state.close();
        }
    
    展开全文
  • 时,系统将提示“已有打开的与连接相关联的DataReader,必须首先将它关闭,并不是我想多创建几个这样的对象,只因数据是按树状结构分布的,通过递归来完成数据的访问,所以才会出现多个DataReader的情况,我把问题...

    当创建多个DataReader对象.时,系统将提示“已有打开的与此连接相关联的DataReader,必须首先将它关闭,并不是我想多创建几个这样的对象,只因数据是按树状结构分布的,通过递归来完成数据的访问,所以才会出现多个DataReader的情况,我把问题分析有如下几种可能性:

    1.数据库本身的限制,这种情况不可能,我在ASP中采用的ODBC访问,没出现问题,转到.NET时才出现这样的情况。

    2.我用的连接或相关的对象存在相应的属性设置,这种情况倒是有可能,但我无资料可查,通过属性浏览也没有看到可能的属性对象。

    3..NET本身的BUG,这种可能性也是很大的,一般的对象的默认情况应该能够正常操作,通过限制来达到其他其他相关需求,如安全性等。

    所以我把源码列出来,让大家帮个忙,有没有解决的办法,示例代码用的是ODBC,原先用的是SqlClient,结果都是一样的。

    using System;
    using System.Data ;
    using System.Data .Odbc ;

    namespace ConsoleApplication1
    {
     /// <summary>
     /// Class1 的摘要说明。
     /// </summary>
     class Class1
     {
      public OdbcConnection Conn;
      /// <summary>
      /// 应用程序的主入口点。
      /// </summary>
      [STAThread]
      static void Main(string[] args)
      {
       //
       // TODO: 在此处添加代码以启动应用程序
       //
       new Class1 ().Do ();

      }
      public void Do()
      {
       // 在此处放置用户代码以初始化页面
       //打开数据库连接
       Conn = new OdbcConnection ("DSN=AMGDM3_SQL;uid=sa;pwd=;");
        Conn.Open ();
       if(Conn.State == ConnectionState .Closed )
       {
        //无法连接数据库服务器
        Console.WriteLine ("数据库服务器已经关闭,暂停服务。");
        return;
       }
       string strSQL = "SELECT * FROM FILE_DIRECTORY WHERE CLASS=0 AND PID=0";
       OdbcDataAdapter adapter = new OdbcDataAdapter (strSQL , Conn);
       ShowDirectory(adapter , "person" , Conn , 0);

      }
      
      public void ShowDirectory(OdbcDataAdapter adapter , string strId , OdbcConnection conn , int nType)
      {
       OdbcDataReader reader = adapter.SelectCommand .ExecuteReader ();
       if(reader.HasRows )
       {
        while(reader.Read ())
        {
         if(ExistChildNode((string)reader["Id"].ToString () , conn , true))
         {
          Console.WriteLine (string.Format ("dir{0}=insFld({1},gFld(/"{2}/",/"" , reader["Id"] , strId , reader["DirName"]));
         }
         else
         {
          Console.WriteLine (string.Format ("dir{0}=insDoc({1},gLnk(0,/"{2}/",/"" , reader["Id"] , strId , reader["DirName"]));
         }
         Console.WriteLine ("main.asp?DicType=Dir");
         Console.WriteLine (string.Format ("&Id={0}/"))/r/n" , reader["Id"]));
         string strSQL;
         strSQL = string.Format ("SELECT * FROM FILE_DIRECTORY WHERE PID={0}" , reader["Id"]);
         OdbcDataAdapter adapter2 = new OdbcDataAdapter (strSQL , conn);
         ShowDirectory(adapter2 , string.Format ("dir{0}" , reader["Id"]) , conn , nType);
        }
       }
       reader.Close ();
      }

      private bool ExistChildNode(string strDeptId , OdbcConnection conn , bool bDept)
      {
       return true;
      }

     }
    }

    展开全文
  • 连接数据库(使用connection对象连接数据库DBS,点击“连接数据库”,使得程序与数据库进行连接(connection对象打开),点击“断开数据库”(connection对象关闭),在过程中监测connection.State状态,并把连接...

    实现功能:

    连接数据库(使用connection对象连接数据库DBS,点击“连接数据库”,使得程序与数据库进行连接(connection对象打开),点击“断开数据库”(connection对象关闭),在此过程中监测connection.State状态,并把连接状态显示在下方的Label中)

    效果图如下:

    在这里插入图片描述

    代码如下:

         //窗体Load事件
        private void _4_1_Load(object sender, EventArgs e)
        {
            //更改控件的显示内容的颜色
            groupBox1.ForeColor = Color.Blue;
            button1.ForeColor = button2.ForeColor = SystemColors.ControlText;
            label1.ForeColor = Color.Red;
        }
        //实例化对象,用于开启程序和数据库之间的连接
        SqlConnection conn;
        //“连接数据库”按钮的Click事件
        private void button1_Click(object sender, EventArgs e)
        {
            //连接数据库
            conn = new SqlConnection(@"Integrated Security=SSPI;
            Persist Security Info=False;Initial Catalog=WinFormSQL;Data Source=localhost");
            //打开数据库连接
            conn.Open();
            //数据库连接状态为打开时,label的内容显示“连接中...”
            if (conn.State == ConnectionState.Open)
                label1.Text = "连接中...";
        }
    
        //“断开数据库”按钮的Click事件
        private void button2_Click(object sender, EventArgs e)
        {
            //关闭数据库连接
            conn.Close();
            //数据库连接状态为关闭时,label的内容显示“连接已关闭”
            if (conn.State == ConnectionState.Closed)
                label1.Text = "连接已关闭";
        }
    

    代码均为原创,存在不足还请见谅!如有转载请注明来源: www.dreamload.cn/blog/?p=441&preview=true (洋葱先生)

    展开全文
  • .NET 数据库连接池

    2021-01-21 19:05:47
    则您需要负责打开 SqlConnection 对象,而且,更重要的是,在查询结束时关闭对象。如果您忘记了进行关闭,孤立连接会迅速地积累起来。监视连接数 为了对孤立连接和发生溢出的连接池进行测试,我编写了一个 Web ...
  • 3.获取数据库操作对象 4.执行SQL语句 5.处理查询结果集 6.关闭资源 什么是驱动:各大数据库厂商编写的JDBC接口的实现类,编译之后将这些实现类打成jar包并且发布,这些jar包通常被我们称为连接数据库的驱动。 ...
  • SQLSer数据库变为可疑状态2014年06月06日SQL Server评论关闭1、修改数据库为紧急模式ALTER DATABASE testDB SET EMERGENCY2、使数据库变为单用户模式ALTER DATABASE testDB SET SINGLE_USER3、修复数据库日志重新...
  • 数据库连接池的原理

    2018-03-09 14:50:32
    六、数据库连接池的原理原理:连接池基本的思想:在J2EE服务器启动时会建立一定数量的池连接,将数据库连接作为对象存储在内存中,当用户需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个已建立的...
  • android sqlite数据库使用

    热门讨论 2011-09-17 00:25:56
    在DatabaseHelper这个对象一创建时,就已经把参数 DATABASE_VERSION传入,这样,如果Android发现版本与现有版本不一致,就会调用这个onUpgrate方法。于是,可以在这里面实现一些数据的upgrade工作,比如说创建一个...
  • 如果利用Oracle的面向对象的技术,可以通过创建一个新的数据库对象类型在数据库中模仿其数据和操作,然后使用JPublisher等工具生成自己的Java bean类。如果使用这种方式,不但Java应用程序可以使用应用软件的对象...
  • Access中批量替换数据库内容

    千次阅读 2015-03-12 18:32:21
    2、在数据库对象”中点击“查询” 3、点击“在设计视图中创建查询” 4、在出现的界面中关闭“显示表”小窗口 5、点击“视图”菜单,选择“SQL视图”,此时将出现查询窗口,您可以在输入SQL语句了
  • 表是在MySQL 5.7安装过程中创建的。 如果要从早期版本升级到MySQL 5.7,请更新授权表以确保 event 表存在。23.4.1 事件调度概述MySQL事件是根据计划运行的任务。因此,我们有时将它们称为...
  • 在服务器正常关闭后的脱机情况下,用户可以使用dmdbchk对数据库进行校验,包括校验DM数据库内部的物理存储结构是否正常,对象信息是否合法等。除之外,dmdbchk工具还可以检测并删除操作系统中残留的信号量和共享...
  • //初始化数据库对象 mysql_init(&m_sqlCon); if (!mysql_real_connect(&m_sqlCon, "xxxx", "root", "xxxx", "test", 3306, NULL, 0)) { AfxMessageBox(_T("数据库连接失败!")); return; } ...
  • //初始化数据库对象 pConn = mysql_init(NULL); //localhost:服务器地址,可以直接填入IP;root:账号; //123:密码;test:数据库名;3306:网络端口 if (!mysql_real_connect(pConn, "localhost", "root...
  • 部分是 C API 相关文档。 历史更新情况 注意: 删除接口 - 不再兼容 废弃接口 - 保持兼容性 Version 2.10 添加收集数据统计信息接口: sdbAnalyze,收集指定对象的统计信息 添加修改接口 ...
  • 对象资源管理器中,连接到SQLServer数据库引擎实例,然后展开该实例。 右键单击要更改的数据库,再单击“属性”。 在“数据库属性”对话框中,单击“选项”页。 在“限制访问”选项中,选择“单...
  • 通过Access数据库中的查询分析器来修改1、打开需要修改的Access数据库2、在数据库对象”中32313133353236313431303231363533e59b9ee7ad9431333365653330点击“查询”3、点击“在设计视图中创建查询”4、在出现的...
  • 通过jdbc连接数据库并实现增删查改 前言:什么是jdbc Java 数据库连接,(Java Database ...过程一共有七步: 加载驱动 创建连接 写sql语句 得到statement对象 执行sql 处理结果集 关闭资源 下面开始实现 百...
  • 1、在我们实际应用开发中,我们通常将数据库层和其它模块分离开来,这样有利于维护,故在我给出一个操作数据工具包DBUtils类: DBUtils  该类返回一个连接对象,有利于后面我们对数据库进行层删改查 2、关闭...
  • 解决方案:在数据库上运行 sp_removedbreplication 从数据库删除所有复制对象TcpTimedWaitDelay和MaxUserPort设置描述:确定 TCP/IP 可释放已关闭连接并重用其资源前,必须经过的时间。关闭和释放之间的时间间隔...
  • qlCommand在每次执行ExecuteNonQuery()方法之后,内部会生成一个空的DataReader对象,该对象只有在数据库连接关闭之后,才会被释放掉,加上上边提到的,在DBHelper类中数据库连接对象是一个静态的全局变量。...
  • 一、Statement接口引入 作用:用于执行静态SQL语句并返回它所生成结果的对象 int executeUpdate(String sql) 执行给定...void close() 立即释放Statement对象数据库和JDBC资源,而不是等待该对象自动关闭...
  • 6.2.4 数据库对象的存储分配 175 6.2.5 增加表空间的大小 176 6.2.6 删除表空间 177 6.2.7 用户表空间的数目 178 6.2.8 表空间限额 178 6.2.9 主动的表空间的空间预警 178 6.2.10 管理重做数据的生成 ...
  • 所写文章做成笔记记录的形式,书写代码过程中难免取之互联网,有的是本人书写,推崇自己一些见解想法, 数据库与python通信有四个阶段: 创建一个连接对象。 创建一个游标对象来读/写。 与数据库交互 ...
  • 索引是存放在模式(schema)中的一个数据库对象,索引的作用就是提高对表的检索查询速度, 索引是通过快速访问的方法来进行快速定位数据,从而减少了对磁盘的读写操作。 索引是数据库的一个对象,它不能独立存在,...
  • 首先最下面的FrmMain_Load(...)是载入窗体时的初始化先new一个publicclass()对象接下来调用此对象的GetDataSet()方法来看GetDataSet()方法新建一个DataSet,用来存放从数据库获得的记录,Dataset可以在关闭数据库...
  • 调试过程中出现“已有打开的与command相关联的DataReader,必须先将其关闭” 小白求教 还希望能帮着看看我写的这段代码还有其他什么问题吗 谢谢谢谢 ``` private void button1_Click(object ...
  • * 连接新的数据库对象到这个工具类, 首先尝试关闭老连接. */ public void setConnection(java.sql.Connection connection) { if (this.connection != null) { try { getConnection().close(); } catch ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 383
精华内容 153
关键字:

关闭此数据库对象