搜档网
当前位置:搜档网 › JDBC数据库连接池总结

JDBC数据库连接池总结

JDBC数据库连接池总结
JDBC数据库连接池总结

本文由views000贡献

doc文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。

随着 Internet/Intranet 建网技术的飞速发展和在世界范围内的迅速普及,计算机应用程序已从传统的桌面应用转到 Web 应用。基于 B/S(Browser/Server)架构的 3 层开发模式逐渐取代 C/S Client/Server)(架构的开发模式,成为开发企业级应用和电子商务普遍采用的技术。在 Web 应用开发的早期,主要使用的技术是 CGI﹑ASP﹑PHP 等。之后,Sun 公司推出了基于 Java 语言的 Servlet+Jsp+JavaBean 技术。相比传统的开发技术,它具有跨平台﹑安全﹑有效﹑可移植等特性,这使其更便于使用和开发。 Java 应用程序访问数据库的基本原理在 Java 语言中,JDBC(Java DataBase Connection)是应用程序与数据库沟通的桥梁,即 Java 语言通过 JDBC 技术访问数据库。JDBC 是一种“开放”的方案,它为数据库应用开发人员﹑数据库前台工具开发人员提供了一种标准的应用程序设计接口,使开发人员可以用纯 Java 语言编写完整的数据库应用程序。 JDBC 提供两种 API,分别是面向开发人员的 API 和面向底层的 JDBC 驱动程序 API,底层主要通过直接的 JDBC 驱动和JDBC-ODBC 桥驱动实现与数据库的连接。一般来说,Java 应用程序访问数据库的过程(如图 1 所示)是:①装载数据库驱动程序;②通过 JDBC 建立数据库连接;③访问数据库,执行 SQL 语句;④断开数据库连接。

图 1 Java 数据库访问机制 JDBC 作为一种数据库访问技术,具有简单易用的优点。但使用这种模式进行 Web 应用程序开发,存在很多问题:首先,每一次 Web 请求都要建立一次数据库连接。建立连接是一个费时的活动,每次都得花费 0.05s~1s 的时间,而且系统还要分配内存资源。这个时间对于一次或几次数据库操作,或许感觉不出系统有多大的开销。可是对于现在的 Web 应用,尤其是大型电子商务网站,同时有几百人甚至几千人在线是很正常的事。在这种情况下,频繁的进行数据库连接操作势必占用很多的系统资源,网站的响应速度必定下降,严重的甚至会造成服务器的崩溃。不是危言耸听,这就是制约某些电子商务网站发展的技术瓶颈问题。其次,对于每一次数据库连接,使用完后都得断开。否则,如果程序出现异常而未能关闭,将会导致数据库系统中的内存泄漏,最终将不得不重启数据库。还有,这种开发不能控制被创建的连接对象数,系统资源会被毫无顾及的分配出去,如连接过多,也可能导致内存泄漏,服务器崩溃。

数据库连接池(connection pool)的工作原理 1、基本概念及原理

由上面的分析可以看出,问题的根源就在于对数据库连接资源的低效管理。我们知道,对于共享资源,有一个很著名的设计模式:资源池(Resource Pool)。该模式正是为了解决资源的频繁分配﹑释放所造成的问题。为解决上述问题,可以采用数据库连接池技术。数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量﹑使用情况,为系统开发﹑测试及性能调整提供依据。连接池的基本工作原理见下图 2。

图 2 连接池的基本工作原理 2、服务器自带的连接池 JDBC 的 API 中没有提供连接池的方法。一些大型的 WEB 应用服务器如 BEA 的 WebLogic 和 IBM 的 WebSphere 等提供了连接池的机制,但是必须有其第三方的专用类方法支持连接池的用法。连接池关键问题分析1、并发问题为了使连接管理服务具有最大的通用性,必须考虑多线程环境,即并发问题。这个问题相对比较好解决,因为Java 语言自身提供了对并发管理的支持,使用synchronized 关键字即可确保线程是同步的。使用方法为直接在类方法前面加上synchronized 关键字,如: public synchronized Connection getConnection() 2、多数据库服务器和多用户对于大型的企业级应用,常常需要同时连接不同的数据库(如连接

Oracle 和 Sybase)。如何连接不同的数据库呢?我们采用的策略是:设计一个符合单例模式的连接池管理类,在连接池管理类的唯一实例被创建时读取一个资源文件,其中资源文件中存放着多个数据库的 url 地址(

)﹑用户名(

)﹑密码(< poolName.password>)等信息。如 tx.url=192.168.1.123:5000/tx_it,https://www.sodocs.net/doc/8412584224.html,er=cyl, tx.password=123456。根据资源文件提供的信息,创建多个连接池类的实例,每一个实例都是一个特定数据库的连接池。连接池管理类实例为每个连接池实例取一个名字,通过不同的名字来管理不同的连接池。对于同一个数据库有多个用户使用不同的名称和密码访问的情况,也可以通过资源文件处理,即在资源文件中设置多个具有相同 url 地址,但具有不同用户名和密码的数据库连接信息。 3、事务处理我们知道,事务具有原子性,此时要求对数据库的操作符合“ALL-ALL-NOTHING”原则,即对于一组 SQL 语句要么全做,要么全不做。

在 Java 语言中,Connection 类本身提供了对事务的支持,可以通过设置 Connection 的 AutoCommit 属性为 false,然后显式的调用 commit 或 rollback 方法来实现。但要高效的进行 Connection 复用,就必须提供相应的事务支持机制。可采用每一个事务独占一个连接来实现,这种方法可以大大降低事务管理的复杂性。 4、连接池的分配与释放连接池的分配与释放,对系统的性能有很大的影响。合理的分配与释放,可以提高连接的复用度,从而降低建立新连接的开销,同时还可以加快用户的访问速度。对于连接的管理可使用空闲池。即把已经创建但尚未分配出去的连接按创建时间存放到一个空闲池中。每当用户请求一个连接时,系统首先检查空闲池内有没有空闲连接。如果有就把建立时间最长(通过容器的顺序存放实现)的那个连接分配给他(实际是先做连接是否有效的判断,如果可用就分配给用户,如不可用就把这个连接从空闲池删掉,重新检测空闲池是否还有连接);如果没有则检查当前所开连接池是否达到连接池所允许的最大连接数(maxConn),如果没有达到,就新建一个连接,如果已经达到,就等待一定的时间(timeout)。如果在等待的时间内有连接被释放出来就可以把这个连接分配给等待的用户,如果等待时间超过预定时间timeout,则返回空值(null)。系统对已经分配出去正在使用的连接只做计数,当使用完后再返还给空闲池。对于空闲连接的状态,可开辟专门的线程定时检测,这样会花费一定的系统开销,但可以保证较快的响应速度。也可采取不开辟专门线程,只是在分配前检测的方法。

5、连接池的配置与维护连接池中到底应该放置多少连接,才能使系统的性能最佳?系统可采取设置最小连接数(minConn)和最大连接数(maxConn)来控制连接池中的连接。最小连接数是系统启动时连接池所创建的连接数。如果创建过多,则系统启动就慢,但创建后系统的响应速度会很快;如果创建过少,则系统启动的很快,响应起来却慢。这样,可以在开发时,设置较小的最小连接数,开发起来会快,而在系统实际使用时设置较大的,因为这样对访问客户来说速度会快些。最大连接数是连接池中允许连接的最大数目,具体设置多少,要看系统的访问量,可通过反复测试,找到最佳点。如何确保连接池中的最小连接数呢?有动态和静态两种策略。动态即每隔一定时间就对连接池进行检测,如果发现连接数量小于最小连接数,则补充相应数量的新连接,以保证连接池的正常运转。静态是发现空闲连接不够时再去检查。连接池的实现 1、连接池模型本文讨论的连接池包括一个连接池类(DBConnectionPool)和一个连接池管理类(DBConnetionPoolManager)和一个配置文件操作类(ParseDSConfig)。连接池类是对某一数据库所有连接的“缓冲池”,主要实现以下功能:①从连接池获取或创建可用连接;②使用完毕之后,把连接返还给连接池;③在系统关闭前,断开所有连接并释放连接占用的系统资源;④还能够处理无效连接(原来登记为可用的连接,由于某种原因不再可用,如超时,通讯问题),并能够限制连接池中的连接总数不低于某个预定值和不超过某个预定值。(5)当多数据库时,且数据库是动态增加的话,将会加

到配置文件中。连接池管理类是连接池类的外覆类(wrapper),符合单例模式,即系统中只能有一个连接池管理类的实例。其主要用于对多个连接池对象的管理,具有以下功能:①装载并注册特定数据库的 JDBC 驱

动程序;②根据属性文件给定的信息,创建连接池对象;③为方便管理多个连接池对象,为每一个连接池对象取一个名字,实现连接池名字与其实例之间的映射;④跟踪客户使用连接情况,以便需要是关闭连接释放资源。连接池管理类的引入主要是为了方便对多个连接池的使用和管理,如系统需要连接不同的数据库,或连接相同的数据库但由于安全性问题,需要不同的用户使用不同的名称和密码。 2、连接池实现(经过本人改版,可以适用多数据库类型的应用以及一种数据库类型多个数据库且数据库的数量可以动态增加的应用程序) 1),DBConnectionPool.java 数据库连接池类数据库管理类单个数据库连接信息 Bean 操作多(这个'多'包括不同的数据库和同一种数据库有多

2),DBConnectionManager .java 3),DSConfigBean .java 4),ParseDSConfig.java 个数据库)

数据配置文件 xml 5),ds.config.xml 原代码如下: DBConnectionPool.java /** * 数据库连接池类*/ package com.chunkyo.db; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.ArrayList; import java.util.Iterator; import java.util.Timer; 数据库配置文件 xml

/** * @author chenyanlin * */ public class DBConnectionPool implements TimerListener { private Connection con=null; private int inUsed=0; //使用的连接数 private ArrayList freeConnections = new ArrayList();//容器,空闲连接 private int minConn; private int maxConn; private String name; //最小连接数 //最大连接 //连接池名字

private String password; //密码 private String url; private String driver; private String user; public Timer timer; /** * */ public DBConnectionPool() { // TODO Auto-generated constructor stub } /** * 创建连接池 //数据库连接地址 //驱动 //用户名 //定时

* @param driver * @param name * @param URL * @param user * @param password * @param maxConn */ public DBConnectionPool(String name, String driver,String URL, String user, String password, int maxConn) { https://www.sodocs.net/doc/8412584224.html,=name; this.driver=driver; this.url=URL; https://www.sodocs.net/doc/8412584224.html,er=user; this.password=password; this.maxConn=maxConn; } /** * 用完,释放连接 * @param con */ public synchronized void freeConnection(Connection con) { this.freeConnections.add(con);//添加到空闲连接的末尾

this.inUsed--; } /** * timeout 根据 timeout 得到连接 * @param timeout * @return */ public synchronized Connection getConnection(long timeout) { Connection con=null; if(this.freeConnections.size()>0) { con=(Connection)this.freeConnections.get(0); if(con==null)con=getConnection(timeout); //继续获得连接} else { con=newConnection(); //新建连接} if(this.maxConn==0||this.maxConn0) { con=(Connection)this.freeConnections.get(0); this.freeConnections.remove(0);//如果连接分配出去了,就从空闲连接里删除 if(con==null)con=getConnection(); //继续获得连接} else { con=newConnection(); //新建连接} if(this.maxConn==0||this.maxConn

{ con=null;//等待超过最大连接时} if(con!=null) { this.inUsed++; System.out.println("得到 } return con; } /** *释放全部连接 * */ public synchronized void release() { Iterator allConns=this.freeConnections.iterator();

while(allConns.hasNext()) { Connection con=(Connection)allConns.next(); try { con.close(); } "+https://www.sodocs.net/doc/8412584224.html,+" 的连接,现有"+inUsed+"个连接在使用!");

catch(SQLException e) { e.printStackTrace(); }

} this.freeConnections.clear();

} /** * 创建新连接* @return */ private Connection newConnection() { try { Class.forName(driver); con=DriverManager.getConnection(url, user, password); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); System.out.println("sorry can't find db driver!"); } catch (SQLException e1) { // TODO Auto-generated catch block

e1.printStackTrace(); System.out.println("sorry can't create Connection!"); } return con;

} /** * 定时处理函数 */ public synchronized void TimerEvent() { //暂时还没有实现以后会加上的 } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub } /** * @return the driver */ public String getDriver() { return driver;

} /** * @param driver the driver to set */ public void setDriver(String driver) { this.driver = driver; } /** * @return the maxConn */ public int getMaxConn() { return maxConn; } /** * @param maxConn the maxConn to set */ public void setMaxConn(int maxConn) { this.maxConn = maxConn; } /** * @return the minConn */ public int getMinConn() { return minConn;

} /** * @param minConn the minConn to set */ public void setMinConn(int minConn) { this.minConn = minConn; } /** * @return the name */ public String getName() { return name; } /** * @param name the name to set */ public void setName(String name) { https://www.sodocs.net/doc/8412584224.html, = name; } /** * @return the password */ public String getPassword() { return password;

} /** * @param password the password to set */ public void setPassword(String password) { this.password = password; } /** * @return the url */ public String getUrl() { return url; } /** * @param url the url to set */ public void setUrl(String url) { this.url = url; } /** * @return the user */ public String getUser() { return user; } /** * @param user the user to set */ public void setUser(String user) { https://www.sodocs.net/doc/8412584224.html,er = user; } }

DBConnectionManager .java /** * 数据库连接池管理类 */ package com.chunkyo.db; import java.sql.Connection; import java.util.ArrayList; import java.util.Enumeration; import java.util.HashMap; import java.util.Hashtable; import java.util.Iterator; import java.util.Properties; import java.util.Vector; import com.chunkyo.db.ParseDSConfig;

import com.chunkyo.db.DSConfigBean; import com.chunkyo.db.DBConnectionPool; /** * @author chenyanlin * */ public class DBConnectionManager { static private DBConnectionManager instance;//唯一数据库连接池管理实例类 static private int clients; //客户连接数

private Vector drivers = new Vector();//驱动信息 private Hashtable pools=new Hashtable();//连接池

/** * 实例化管理类 */ public DBConnectionManager() { // TODO Auto-generated constructor stub this.init(); } /** * 得到唯一实例管理类 * @return */ static

synchronized public DBConnectionManager getInstance()

{ if(instance==null) { instance=new DBConnectionManager(); } return instance; } /** * 释放连接 * @param name * @param con */ public void freeConnection(String name, Connection con) { DBConnectionPool pool=(DBConnectionPool)pools.get(name);//根据关键名字得到连接池 if(pool!=null) pool.freeConnection(con);//释放连接 } /** * 得到一个连接根据连接池的名字 name * @param name * @return

*/ public Connection getConnection(String name) { DBConnectionPool pool=null; Connection con=null; pool=(DBConnectionPool)pools.get(name);//从名字中获取连接池con=pool.getConnection();//从选定的连接池中获得连接if(con!=null) System.out.println("得到连接……"); return con; } /** * 得到一个连接,根据连接池的名字和等待时间* @param name * @param time * @return */ public Connection getConnection(String name, long timeout) { DBConnectionPool pool=null; Connection con=null; pool=(DBConnectionPool)pools.get(name);//从名字中获取连接池con=pool.getConnection(timeout);//从选定的连接池中获得连接 System.out.println("得到连接……");

return con; } /** * 释放所有连接*/ public synchronized void release() { Enumeration allpools=pools.elements(); while(allpools.hasMoreElements()) { DBConnectionPool pool=(DBConnectionPool)allpools.nextElement(); if(pool!=null)pool.release(); } pools.clear(); } /** * 创建连接池 * @param props */ private void createPools(DSConfigBean dsb) { DBConnectionPool dbpool=new DBConnectionPool(); dbpool.setName(dsb.getName()); dbpool.setDriver(dsb.getDriver());

dbpool.setUrl(dsb.getUrl()); dbpool.setUser(dsb.getUsername()); dbpool.setPassword(dsb.getPassword()); dbpool.setMaxConn(dsb.getMaxconn()); System.out.println("ioio:"+dsb.getMaxconn()); pools.put(dsb.getName(), dbpool); } /** * 初始化连接池的参数 */ private void init() { //加载驱动程序 this.loadDrivers(); //创建连接池 Iterator alldriver=drivers.iterator(); while(alldriver.hasNext()) { this.createPools((DSConfigBean)alldriver.next()); System.out.println("创建连接池……");

} System.out.println("创建连接池完毕……"); }

/** * 加载驱动程序 * @param props */ private void loadDrivers() { ParseDSConfig pd=new ParseDSConfig(); //读取数据库配置文件drivers=pd.readConfigInfo("ds.config.xml"); System.out.println("加载驱动程序……"); } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub } } DSConfigBean.java /** * 配置文件 Bean 类 */

package com.chunkyo.db; /** * @author chenyanlin * */ public class DSConfigBean { private String type private String name private String driver private String url =""; //数据库类型 =""; //连接池名字 =""; //数据库驱动 =""; //数据库 url

private String username =""; //用户名 private String password =""; //密码private int maxconn =0; //最大连接数 /** * */ public DSConfigBean() { // TODO Auto-generated constructor stub } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub

} /** * @return the driver */ public String getDriver() { return driver; } /** * @param driver the driver to set */ public void setDriver(String driver)

{ this.driver = driver; } /** * @return the maxconn */ public int getMaxconn() { return maxconn; } /** * @param maxconn the maxconn to set */ public void setMaxconn(int maxconn) { this.maxconn = maxconn;

} /** * @return the name */ public String getName() { return name; } /** * @param name the name to set */ public void setName(String name) { https://www.sodocs.net/doc/8412584224.html, = name; } /** * @return the password */ public String getPassword() { return password; } /** * @param password the password to set */ public void setPassword(String password) { this.password = password;

} /** * @return the type */ public String getType() { return type; } /** * @param type the type to set */ public void setType(String type) { this.type = type; } /** * @return the url */ public String getUrl() { return url; } /** * @param url the url to set */ public void setUrl(String url) { this.url = url;

} /** * @return the username */ public String getUsername() { return username; } /** * @param username the username to set */ public void setUsername(String username) { https://www.sodocs.net/doc/8412584224.html,ername = username; } } ParseDSConfig.java /** * 操作配置文件类读写修改删除等操作 */ package com.chunkyo.db; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream;

import java.io.IOException; import java.io.InputStream; import java.util.List; import java.util.Vector; import java.util.Iterator; import org.jdom.Document; import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.input.SAXBuilder; import org.jdom.output.Format; import org.jdom.output.XMLOutputter; /** * @author chenyanlin * */ public class ParseDSConfig { /** * 构造函数 */ public ParseDSConfig() { // TODO Auto-generated constructor stub } /** * 读取 xml 配置文件

* @param path * @return */ public Vector readConfigInfo(String path) { String rpath=this.getClass().getResource("").getPath().substring(1)+path; Vector dsConfig=null; FileInputStream fi = null; try { fi=new FileInputStream(rpath);//读取路径文件dsConfig=new Vector(); SAXBuilder sb=new SAXBuilder(); Document doc=sb.build(fi); Element root=doc.getRootElement(); List pools=root.getChildren(); Element pool=null; Iterator allPool=pools.iterator(); while(allPool.hasNext()) { pool=(Element)allPool.next(); DSConfigBean dscBean=new DSConfigBean(); dscBean.setType(pool.getChild("type").getText());

dscBean.setName(pool.getChild("name").getText());

System.out.println(dscBean.getName());

dscBean.setDriver(pool.getChild("driver").getText());

dscBean.setUrl(pool.getChild("url").getText());

dscBean.setUsername(pool.getChild("username").getText());

dscBean.setPassword(pool.getChild("password").getText());

dscBean.setMaxconn(Integer.parseInt(pool.getChild("maxconn").getText())); dsConfig.add(dscBean); }

} catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (JDOMException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }

finally { try { fi.close();

} catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }

return dsConfig; } /** *修改配置文件没时间写过段时间再贴上去其实一样的 */ public void modifyConfigInfo(String path,DSConfigBean dsb) throws Exception { String rpath=this.getClass().getResource("").getPath().substring(1)+path; FileInputStream fi=null; //读出 FileOutputStream fo=null; //写入

} /** *增加配置文件 * */ public void addConfigInfo(String path,DSConfigBean dsb) {

String rpath=this.getClass().getResource("").getPath().substring(1)+path; FileInputStream fi=null; FileOutputStream fo=null; try { fi=new FileInputStream(rpath);//读取 xml 流

SAXBuilder sb=new SAXBuilder();

Document doc=sb.build(fi); //得到 xml Element root=doc.getRootElement(); List pools=root.getChildren();//得到 xml 子树

Element newpool=new Element("pool"); //创建新连接池

Element pooltype=new Element("type"); //设置连接池类型pooltype.setText(dsb.getType()); newpool.addContent(pooltype);

Element poolname=new Element("name");//设置连接池名字poolname.setText(dsb.getName()); newpool.addContent(poolname);

Element pooldriver=new Element("driver"); //设置连接池驱动

pooldriver.addContent(dsb.getDriver()); newpool.addContent(pooldriver);

Element poolurl=new Element("url");//设置连接池url poolurl.setText(dsb.getUrl()); newpool.addContent(poolurl);

Element poolusername=new Element("username");//设置连接池用户名poolusername.setText(dsb.getUsername()); newpool.addContent(poolusername);

Element poolpassword=new Element("password");//设置连接池密码poolpassword.setText(dsb.getPassword()); newpool.addContent(poolpassword);

Element poolmaxconn=new Element("maxconn");//设置连接池最大连接poolmaxconn.setText(String.valueOf(dsb.getMaxconn()));

newpool.addContent(poolmaxconn); pools.add(newpool);//将 child 添加到 root Format format = Format.getPrettyFormat(); format.setIndent(""); format.setEncoding("utf-8"); XMLOutputter outp = new XMLOutputter(format); fo = new FileOutputStream(rpath);

outp.output(doc, fo); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (JDOMException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally {

} } /** *删除配置文件 */ public void delConfigInfo(String path,String name) { String rpath=this.getClass().getResource("").getPath().substring(1)+path; FileInputStream fi = null; FileOutputStream fo=null;

try { fi=new FileInputStream(rpath);//读取路径文件SAXBuilder sb=new SAXBuilder(); Document doc=sb.build(fi); Element root=doc.getRootElement(); List pools=root.getChildren(); Element pool=null; Iterator allPool=pools.iterator();

while(allPool.hasNext()) { pool=(Element)allPool.next(); if(pool.getChild("name").getText().equals(name)) { pools.remove(pool); break; } } Format format = Format.getPrettyFormat(); format.setIndent(""); format.setEncoding("utf-8"); XMLOutputter outp = new XMLOutputter(format); fo = new FileOutputStream(rpath); outp.output(doc, fo);

} catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (JDOMException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }

finally { try { fi.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } /** * @param args

* @throws Exception */ public static void main(String[] args) throws Exception { // TODO Auto-generated method stub ParseDSConfig pd=new ParseDSConfig(); String path="ds.config.xml"; pd.readConfigInfo(path); //pd.delConfigInfo(path, "tj012006"); DSConfigBean dsb=new DSConfigBean(); dsb.setType("oracle"); dsb.setName("yyy004"); dsb.setDriver("org.oracle.jdbc"); dsb.setUrl("jdbc:oracle://localhost"); dsb.setUsername("sa"); dsb.setPassword(""); dsb.setMaxconn(1000); pd.addConfigInfo(path, dsb); pd.delConfigInfo(path, "yyy001"); } } ds.config.xml 配置文件

mysql user com.mysql.jdbc.driver jdbc:mysql://localhost:3306/user sa

123456 100

mysql user2 com.mysql.jdbc.driver jdbc:mysql://localhost:3306/user2 sa

1234 10

sql2000 books com.microsoft.sqlserver.driver

jdbc:sqlserver://localhost:1433/books:databasename=books sa

100 3. 连接池的使用 1。Connection 的获得和释放 DBConnectionManager 到唯一实例 //得到连接 String name="mysql";//从上下文得到你要访问的数据库的名字 Connection con=connectionMan.getConnection(name); //使用…… // 使用完毕 connectionMan.freeConnection(name,con);//释放,但并未断开连接2。数据库连接的动态增加和连接池的动态增加 1。调用 xml 操作增加类 2。重新实例华连接池管理池类 connectionMan=DBConnectionManager .getInstance();//得

传智播客mybatis课堂笔记

mybatis 第一天mybatis的基础知识 课程安排: mybatis和springmvc通过订单商品案例驱动 第一天:基础知识(重点,内容量多) 对原生态jdbc程序(单独使用jdbc开发)问题总结 mybatis框架原理(掌握) mybatis入门程序 用户的增、删、改、查 mybatis开发dao两种方法: 原始dao开发方法(程序需要编写dao接口和dao实现类)(掌握) mybaits的mapper接口(相当于dao接口)代理开发方法(掌握)mybatis配置文件SqlMapConfig.xml mybatis核心: mybatis输入映射(掌握) mybatis输出映射(掌握) mybatis的动态sql(掌握) 第二天:高级知识 订单商品数据模型分析 高级结果集映射(一对一、一对多、多对多) mybatis延迟加载 mybatis查询缓存(一级缓存、二级缓存) mybaits和spring进行整合(掌握) mybatis逆向工程 1对原生态jdbc程序中问题总结 1.1环境 java环境:jdk1.7.0_72 eclipse:indigo mysql:5.1

1.2创建mysql数据 导入下边的脚本: sql_table.sql:记录表结构 sql_data.sql:记录测试数据,在实际企业开发中,最后提供一个初始化数据脚本 1.3jdbc程序 使用jdbc查询mysql数据库中用户表的记录。 创建java工程,加入jar包: 数据库驱动包(mysql5.1) 上边的是mysql驱动。 下边的是oracle的驱动。 程序代码: 1.4问题总结 1、数据库连接,使用时就创建,不使用立即释放,对数据库进行频繁连接开启和关闭,造成数据库资源浪费,影响数据库性能。 设想:使用数据库连接池管理数据库连接。 2、将sql语句硬编码到java代码中,如果sql 语句修改,需要重新编译java代码,不利于

Java使用JDBC连接MYSQL数据库增删改查示例

Java使用JDBC连接MYSQL数据库增删改查示例JDBC连接MYSQL数据库: import java.sql.Connection; import java.sql.DriverManager; public class Mysql { public static void main(String arg[]) { try { Connection con = null; //定义一个MYSQL链接对象 Class.forName("com.mysql.jdbc.Driver").newInstance(); //MYSQL 驱动 con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test", "root", "root"); //链接本地MYSQL System.out.print("yes"); } catch (Exception e) { System.out.print("MYSQL ERROR:" + e.getMessage()); } }

} Class.forName("com.mysql.jdbc.Driver").newInstance(); 我们链接的是MYSQL 数据库,所以需要一个MYSQL的数据库驱动,如果你的环境中没有安装,可以下载:mysql-connector-java-5.1.17-bin.jar JAR包,然后放进jdk1.6.0_37\jre\lib\ext 重启eclispe 就可以在JRE系统库中看到。 con = DriverManager.getConnection;("jdbc:mysql://127.0.0.1:3306/test", "root", "root"); 是链接数据库的语句,返回Connection con;对象。参数格式:("jdbc:mysql://ip:端口/数据库名称", 用户名,密码) 写入一条数据 import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class Mysql { /**

JDBC学习

JDBC 的用途是什么? 简单地说,JDBC 可做三件事: 与数据库建立连接, 发送SQL 语句, 处理结果。 下列代码段给出了以上三步的基本示例: 1.Connection对象 Connection 对象代表与数据库的连接。连接过程包括所执行的SQL 语句和在该连接上所返回的结果。一个应用程序可与单个数据库有一个或多个连接,或者可与许多数据库有连接如何连接数据库: 打开连接与数据库建立连接的标准方法是调用DriverManager.getConnection方法。该方法接受含有某个URL 的字符串。DriverManager 类(即所谓的JDBC管理层)将尝试找到可与那个URL 所代表的数据库进行连接的驱动程序。DriverManager 类存有已注册的Driver 类的清单。当调用方法getConnection 时,它将检查清单中的每个驱动程序,直到找到可与URL 中指定的数据库进行连接的驱动程序为止。Driver 的方法connect 使用这个URL来建立实际的连接。 用户可绕过JDBC 管理层直接调用Driver 方法。这在以下特殊情况下将很有用:当两个驱动器可同时连接到数据库中,而用户需要明确地选用其中特定的驱动器。但一般情况下,让DriverManager 类处理打开连接这种事将更为简单。 下述代码显示如何打开一个与位于URL "jdbc:odbc:wombat" 的数据库的连接。所用的用户标识符为"oboy" ,口令为"12Java": 2.1.6 发送 SQL 语句连接一旦建立,就可用来向它所涉及的数据库传送SQL 语句。JDBC对可被发送的SQL 语句类型不加任何限制。这就提供了很大的灵活性,即允许使用特定的数据库语句或甚至于非SQL 语句。然而,它要求用户自己负责确保所涉及的数据库可以处理所发送的SQL 语句,否则将自食其果。例如,如果某个应用程序试图向不支持储存程序的DBMS 发送储存程序调用,就会失败并将抛出异常。JDBC 要求驱动程序应至少能提供ANSI SQL-2 Entry Level 功能才可算是符合JDBC标准TM 的。这意味着用户至少可信赖这一标准级别的功能。JDBC 提供了三个类,用于向数据库发送SQL 语句。Connection 接口中的三个方法可用于创建这些类的实例。下面列出这些类及其创建方法:

Java连接各种数据库写法

随笔- 6 文章- 0 评论- 1 Java连接各种数据库写法 # 示例配置参考,涵盖几乎所有的主流数据库 ############# Oracle数据库######################## # 数据库驱动名 driver=oracle.jdbc.driver.OracleDriver # 数据库URL(包括端口) dburl=jdbc:oracle:thin:@127.0.0.1:1521:zvfdb # 数据库用户名 user=root # 用户密码

password=zvfims ############# DB2数据库######################## # 数据库驱动名 driver=com.ibm.db2.jcc.DB2Driver # 数据库URL(包括端口) dburl=jdbc:db2://127.0.0.1:50000/zvfdb # 数据库用户名 user=root # 用户密码 password=zvfims ############# MySQL数据库######################## # 数据库驱动名

driver=com.mysql.jdbc.Driver # 数据库URL(包括端口) dburl=jdbc:mysql://127.0.0.1:3306/zvfdb # 数据库用户名 user=root # 用户密码 password=zvfims ############# PostgreSQL数据库数据库######################## # 数据库驱动名 driver=org.postgresql.Driver # 数据库URL(包括端口) dburl=jdbcostgresql://127.0.0.1/zvfdb

JDBC连接sql server数据库的详细步骤和代码

JDBC连接sql server数据库的详细步骤和代码JDBC连接sql server数据库的步骤如下: [java] view plaincopy 1.1、加载JDBC驱动程序: 2.在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 3.这通过https://www.sodocs.net/doc/8412584224.html,ng.Class类的静态方法forName(String className)实现。 4.成功加载后,会将Driver类的实例注册到DriverManager类中。 5.2、提供JDBC连接的URL 6.?连接URL定义了连接数据库时的协议、子协议、数据源标识。 7.?书写形式:协议:子协议:数据源标识 8.协议:在JDBC中总是以jdbc开始 9.子协议:是桥连接的驱动程序或是数据库管理系统名称。 10.数据源标识:标记找到数据库来源的地址与连接端口。 11.3、创建数据库的连接 12.?要连接数据库,需要向java.sql.DriverManager请求并获得Connection对象, 13.该对象就代表一个数据库的连接。 14.?使用DriverManager的getConnectin(String url , String username , 15. String password )方法传入指定的欲连接的数据库的路径、数据库的用户名和 16.密码来获得。 17.4、创建一个Statement 18.?要执行SQL语句,必须获得java.sql.Statement实例,Statement实例分为以下3 19.种类型: 20.1、执行静态SQL语句。通常通过Statement实例实现。 21.2、执行动态SQL语句。通常通过PreparedStatement实例实现。 22.3、执行数据库存储过程。通常通过CallableStatement实例实现。 23.具体的实现方式: 24. Statement stmt = con.createStatement() ; 25. PreparedStatement pstmt = con.prepareStatement(sql) ; 26. CallableStatement cstmt = con.prepareCall("{CALL demoSp(? , ?)}") ; 27.5、执行SQL语句 28. Statement接口提供了三种执行SQL语句的方法:executeQuery 、executeUpdate 29.和execute 30.1、ResultSet executeQuery():执行查询数据库的SQL语句 31.,返回一个结果集(ResultSet)对象。 32.2、int executeUpdate():用于执行INSERT、UPDATE或 33. DELETE语句以及SQL DDL语句,如:CREATE TABLE和DROP TABLE等 34.3、execute():用于执行返回多个结果集、多个更新计数或二者组合的 35.语句。 36.具体实现的代码: 37. ResultSet rs = pstmt.executeQuery() ;

JDBC实验二 使用JDBC实现数据库连接

广州中医药大学信息技术学院 实验报告 课程名称:网络数据库编程 专业班级:计算机科学与技术(08)级 学生学号:2008081013 学生姓名:张健华 实验名称:使用JDBC实现数据 库连接 实验成绩: 课程类别:必修□限选 公选□其它□

实验二使用JDBC实现数据库连接 实验类型:应用性实验实验日期: 3-23 [实验目的要求] 通过教学,使学生掌握使用JDBC连接到数据库的方法(如通过JDBC-ODBC 桥或Pure Java Driver),能使用网页表单实现网页与数据库的交互。 [实验内容及步骤] 1、在数据库SQL SERVER中创建一个数据库JDBCTEST,并创建表 student_info,并设定字段,输入内容。 2、使用JDBC-ODBC实现数据库连接 a)打开“控制面板”的“管理工具”的“数据源(ODBC)” b)建立数据源 c)选“系统数据源”,连接SQL SERVER数据库 d)测试是否连接成功 e)通过以下类Class、DriverManager、Connection(连接数据库用到的类), 及Statement、ResultSet(访问数据库用到的类)编写代码实现表 student_info数据的查询。 f)查询结果在页面中显示。 3、使用Pure Java Driver实现数据库连接 a)安装sql-jdbc,如装在D盘 b)设置环境变量classpath,添加D:\sqljdbc\msbase.jar; D:\sqljdbc\msutil.jar; D:\sqljdbc\mssqlserver.jar; c)设SQL SERVER数据库用Windows和数据库混合身分验证的方式。 d)通过以下类Class、DriverManager、Connection(连接数据库用到的类), 及Statement、ResultSet(访问数据库用到的类)编写代码实现表 student_info数据的查询。 e)查询结果在页面中显示。 4、通过表单传递数据,实现数据库的插入、删除与更新操作,并显示插入结果。 5、熟悉JSP中各种常用的内建对象如request对象、session对象、application对 象的使用。 6、熟悉各种表单的处理的方法:如选择按钮的使用、多选方块的使用、群组检 查的使用、隐藏栏位的使用、在客户端进行数据检查 7、试利用上述知识实现一个留言板系统。 以下需要同学们贴上第7题经调试好代码: 数据库对应的表1 数据库对应的表2 .。。。 代码1文件(***.HTM)内容: <%@ page contentType="text/html;charset=GB2312"%>

java平时最常用的7种数据库连接方式

今天总结了java平时最常用的7种数据库连接方式,现在分享给大家 MySQL: String Driver="com.mysql.jdbc.Driver"; //驱动程序 String URL="jdbc:mysql://localhost:3306/db_name"; //连接的URL,db_name 为数据库名 String Username="username"; //用户名 String Password="password"; //密码 Class.forName(Driver).new Instance(); Connection con=DriverManager.getConnection(URL,Username,Password); Microsoft SQL Server: 1) String Driver="com.microsoft.jdbc.sqlserver.SQLServerDriver"; //连接SQL数据库的方法 String URL="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=db_name"; //db_name为数据库名 String Username="username"; //用户名 String Password="password"; //密码 Class.forName(Driver).new Instance(); //加载数据可驱动 Connection con=DriverManager.getConnection(URL,UserName,Password); // 2) String Driver="com.microsoft.sqlserver.jdbc.SQLServerDriver"; //连接SQL数据库的方法 String URL="jdbc:sqlserver://localhost:1433;DatabaseName=db_name"; //db_name为数据库名 String Username="username"; //用户名 String Password="password"; //密码 Class.forName(Driver).new Instance(); //加载数据可驱动 Connection con=DriverManager.getConnection(URL,UserName,Password); Sysbase: String Driver="com.sybase.jdbc.SybDriver"; //驱动程序 String URL="jdbc:Sysbase://localhost:5007/db_name"; //db_name为数据可名 String Username="username"; //用户名 String Password="password"; //密码 Class.forName(Driver).newInstance(); Connection con=DriverManager.getConnection(URL,Username,Password); Oracle(用thin模式): String Driver="oracle.jdbc.driver.OracleDriver"; //连接数据库的方法String URL="jdbc:oracle:thin:@loaclhost:1521:orcl"; //orcl为数据库的SID String Username="username"; //用户名 String Password="password"; //密码 Class.forName(Driver).newInstance(); //加载数据库驱动

JDBC学习手册

JDBC (Java DataBase Connectivty) 整理人:徐仕锋(Eric) 版本号:v2009-1-20

一、JDBC概述 1概述 JDBC从物理结构上说就是Java语言访问数据库的一套接口集合。从本质上来说就是调用者(程序员)和实现者(数据库厂商)之间的协议。JDBC的实现由数据库厂商以驱动程序的形式提供。JDBC API 使得开发人员可以使用纯Java的方式来连接数据库,并进行操作。ODBC:基于C语言的数据库访问接口。 ●JDBC也就是Java版的ODBC。 ●JDBC的特性:高度的一致性、简单性(常用的接口只有4、5个)。 2JDBC的发展 没有JDBC之前java程序是这样连接各种数据库的。 缺点:1、要求程序员必须熟悉编写java程序连接各种数据库的驱动。 2、移植性很不好,更改数据库必须重新编写连接数据库的驱动程序。

用了JDBC以后java连接各种数据库方便多了! 3JDBC的API介绍 在JDBC中包括了两个包:java.sql和javax.sql。 ①java.sql 基本功能。这个包中的类和接口主要针对基本的数据库编程服务,如生成连 接、执行语句以及准备语句和运行批处理查询等。同时也有一些高级的处理, 比如批处理更新、事务隔离和可滚动结果集等。 ②javax.sql 扩展功能。它主要为数据库方面的高级操作提供了接口和类。如为连接管理、 分布式事务和旧有的连接提供了更好的抽象,它引入了容器管理的连接池、分 布式事务和行集(RowSet)等。 主要对象和接口: 4驱动程序工作分类 驱动程序按照工作方式分为四类: 1、JDBC-ODBC bridge + ODBC 驱动 JDBC-ODBC bridge桥驱动将JDBC调用翻译成ODBC调用,再由ODBC驱动翻译 成访问数据库命令。 优点:可以利用现存的ODBC数据源来访问数据库。 缺点:从效率和安全性的角度来说的比较差。不适合用于实际项目。 2、基于本地API的部分Java驱动 我们应用程序通过本地协议跟数据库打交道。然后将数据库执行的结果通过驱动程 序中的Java部分返回给客户端程序。

Java连接MySQL 数据库

Java连接MySQL 数据库的正确操作流程 时间:2010-05-25 15:41 来源:博客园字体:[大中小] 以下的文章主要介绍的是Java连接MySQL 数据库(以MySQL数据库为例),我们主要是以MySQL数据库为例讲下Java正确连接MySQL数据库的实际操作流程,以下就是对其详细内容的描述。 当然,首先要安装有JDK(一般是JDK1.5.X)。然后安装MySQL,这些都比较简单,具体过程就不说了。配置好这两个环境后,下载JDBC驱动MySQL-connector-java-5.0.5.zip(这个是最新版的)。然后将其解压缩到任一目录。我是解压到D盘,然后将其目录下的 MySQL-connector-java-5.0.5-bin.jar加到classpath里,具体如下: “我的电脑”-> “属性” -> “高级” -> “环境变量”,在系统变量那里编辑classpath,将D:\MySQL-connector-java-5.0.5\MySQL-connector-java-5.0.5-bin.jar加到最后,在加这个字符串前要加“;”,以与前一个classpath区分开。然后确定。 环境配置好了,很简单。现在,先配置MySQL,设其用户名为“root”,密码为“root”。在命令行或用一个SQL的前端软件创建Database。 我是用SQLyog的前端软件来创建Database的。 先创接MySQL 数据库: 1.CREATE DATABASE SCUTCS; 接着,创建表: 1.CREATE TABLE STUDENT 2.( 3.SNO CHAR(7) NOT NULL, 4.SNAME VARCHAR(8) NOT NULL, 5.SEX CHAR(2) NOT NULL, 6.BDATE DATE NOT NULL, 7.HEIGHT DEC(5,2) DEFAULT 000.00, 8.PRIMARY KEY(SNO) 9.); 然后插入数据,可以用SQL语句insert into <表名> values (value1, value2, ...); 也可以用SQLyog来操作

黑马程序员小鲁哥哥白话笔记-JDBC(一)

小鲁哥哥白话笔记-JDBC(API详解) 前边我们讲过SQL的一些基本操作,大家都是通过图形化工具对数据本身进行操作,今天我们讲一讲如何通过java代码去操作数据库,java中定义了一种规范,叫做JDBC. JDBC:JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL 语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。是Java访问数据库的标准规范 JDBC的使用是有标准的步骤的,大家根据固定的模式去写自己的JDBC代码就可以。JDBC一共6个步骤: 1.注册驱动. 2.获得连接. 3.获得语句执行平台 4.执行sql语句 5.处理结果 6.释放资源. 下边给大家聊一聊JDBC里API的使用: 一、注册驱动: 代码:Class.forName("com.mysql.jdbc.Driver"); JDBC规范定义驱动接口:java.sql.Driver,MySql驱动包提供了实现类:com.mysql.jdbc.Driver DriverManager工具类,提供注册驱动的方法registerDriver(),方法的参数是java.sql.Driver,所以我们可以通过如下语句进行注册:

DriverManager.registerDriver(new com.mysql.jdbc.Driver()); 以上代码不推荐使用,存在两方面不足 1.硬编码,后期不易于程序扩展和维护 2.驱动被注册两次。 通常开发我们使用Class.forName() 加载一个使用字符串描述的驱动类。 如果使用Class.forName()将类加载到内存,该类的静态代码将自动执行。 通过查询com.mysql.jdbc.Driver源码,我们发现Driver类“主动”将自己进行注册public class Driver extends NonRegisteringDriver implements java.sql.Driver { static { try { java.sql.DriverManager.registerDriver(new Driver()); } catch (SQLException E) { throw new RuntimeException("Can't register driver!"); } } …… } 二、获得链接 代码:Connection con = DriverManager.getConnection (“jdbc:mysql://localhost:3306/mydb”,”root”,”root”);

java通过jdbc连接oracle数据库

一:java 使用jdbc连接oracle。 步骤 1)下载oracle数据库驱动: 2)新建一个工程(使用eclipse or myeclipse) 3)将1)中的驱动放到2)中项目的lib文件夹下。 4)在src包下的com.util文件夹下面新建一个类 代码如下: package com.util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class DBHelp { private static String URL= "jdbc:oracle:thin:@127.0.0.1:1521:orcl"; private static String USERNAME = "scott"; private static String PASSWORD = "tiger"; public static Connection getCon(){ Connection conn = null; try { Class.forName("oracle.jdbc.driver.OracleDriver"); conn = DriverManager.getConnection(URL,USERNAME,PASSWORD); } catch (Exception e) { e.printStackTrace(); } return conn; } /** * @param args */ public static void main(String[] args) { System.out.println(new DBHelp().getCon()); } public static void close(Connection con,Statement sm,ResultSet rs){

实验8-jdbc数据库访问(优.选)

实验8 JDBC访问数据库 一、实验目的 1. 掌握使用传统的方法访问数据库; 2. 掌握使用数据源的方法访问数据库。 二、实验原理 数据库应用是Web应用开发的一个重要应用。Web应用程序访问数据库有两种方法:传统的方法和使用JNDI数据源的方法。 传统方法访问数据库的步骤是:①加载数据库驱动程序;②建立连接对象;③创建语句对象;④获得结果集;⑤关闭有关连接对象。 使用数据源访问数据库的步骤是:①配置数据源(局部数据源或全局数据源);②通过JNDI机制查找命名数据源;③通过数据源对象创建连接对象;④其他与传统方法一致。 三、实验内容与步骤 (一)使用传统方法通过JSP页面访问数据库 【步骤1】创建数据库。假设在PostgreSQL建立了一个名为bookstore的数据库,在其中建立books表,代码如下: CREATE TABLE books ( bookid character(5) PRIMARY KEY, --书号 title varchar2(80), --书名 author character varying(20), --作者 publisher character varying (40), --出版社 price real --价格 ); 向books表中插入几条记录,代码如下: INSERT INTO books V ALUES ('204','Head First Servlets & JSP', 'Bryan Basham', '中国电力出版社',98.00); INSERT INTO books V ALUES ('201', 'Servlets 与JSP 核心教程', 'Hall Marty','清华大学出版社',45); INSERT INTO books V ALUES ('202', 'Tomcat与Java Web 开发技术祥解', '孙卫琴', '机械工业出版社',45); INSERT INTO books V ALUES ('203', 'JSP 应用开发技术', '柳永坡','人民邮电出版社',52); INSERT INTO books V ALUES ('205', 'J2EE 1.4 编程指南', 'Spielman Sue','电子工业出版社',68); 注意:需要将数据库的JDBC驱动程序安装到应用程序的WEB-INF\lib目录中。 【步骤2】使用下面JSP页面displayBooks.jsp访问books表中的数据。 <%@ page contentType="text/html; charset=gb2312" %> <%@ page import="java.sql.*"%> Database Access Test

java-JDBC-ODBC连接数据库

那是连接数据库时,要获取一个可以执行sql语句的对象。(偷懒,直接笔记了~) 连接数据库步骤: a. 用java程序与db建立一个连接(通道) b。根据连接获取一个执行sql语句的对象 c。执行sql语句 d。关闭连接 public class Main { public static void main(String[] args) { try { //1加载驱动类 //forName() 返回与带有给定字符串名的类或接口相关联的Class 对象 Class.forName("org.gjt.mm.mysql.Driver"); //a.建立连接通道 //DriverManager管理一组JDBC 驱动程序的基本服务。java.sql //getConnection() 返回:到URL 的连接 String url="jdbc:mysql://127.0.0.1:3306/a11"; String user="root"; String password="root"; Connection conn=DriverManager.getConnection(url, user,password);//相当于打开链接 //b。获取一个执行sql语句的对象 //Statement 用于执行静态SQL 语句并返回它所生成结果的对象。 //createStatement()创建一个Statement 对象来将SQL 语句发送到数据库。 Statement st;

st=conn.createStatement(); //c.执行sql语句 //执行给定SQL 语句,该语句可能为INSERT、UPDATE 或DELETE 语句,或不返回内容 st.executeUpdate("insert into student(stuname,stuage,stusex,stubirth) values('张三',10,'m','1988-08-09')"); //d.关闭连接 //立即释放此Connection 对象的数据库和JDBC 资源,而不是等待它们被自动释放 conn.close(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); System.out.println("加载驱动类失败!"); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } //或者关闭写在finally

JDBC连接SQLServer数据库

JDBC连接SQLServer数据库 JDBC API 介绍: JDBC API主要做三件事:与数据库建立连接,发送SQL语句,处理结果 一、DriverManager类:依据数据库的不同,管理相应的JDBC驱动 二、Connection接口:复制负责连接数据库并承担传送数据的任务 三、Statement接口:由Connection产生,负责执行SQL语句 四、ResultSet接口:负责处理Statement执行后所产生的查询结果 五、PreparedStatement接口:Statement子接口,也由Connection产生,通用负责执行SQL语句,与Statement接口相比,具有高安全性,高性能,高可读性和高可维护性的优点。 JDBC工作过程及JDBC API: JDBC访问数据库步骤: 1、加载驱动(Class.forName("JDBC驱动类名称")); 2、与数据库建立连接Connection conn=DriverManager.getConnection(数据库连接字符串,数据库用户名,密码); 3、发送SQL语句,并得到返回结果

Statement stmt=conn.createStatement(); ResultSet rs=stmt.executeQuery("select * from master"); 4、处理返回结果 While(rs.next()){ int id=rs.getInt("id"); } JDBC连接SQLServer数据库有两种方式: 两种常用的驱动方式: 第一种:使用JDBC-ODBC桥方式连接

具体步骤:控制面板→管理工具→数据源(ODBC)→用户DNS→添加→找到SQL server(单击完成)→输入数据源(自定义)和连接服务器名称→下一步→点击单选按钮(使用用户ID和密码SQL server)输入数据库登录用户名和密码→下一步→下一步→完成 图解:

java连接到各种数据库的方法

此文中的代码主要列出连接数据库的关键代码,其他访问数据库代码省略 1、Oracle8/8i/9i数据库(thin模式) Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); String url="jdbc:oracle:thin:@localhost:1521:orcl"; //orcl为数据库的SID String user="test"; String password="test"; Connection conn= DriverManager.getConnection(url,user,password); 2、DB2数据库 Class.forName("com.ibm.db2.jdbc.app.DB2Driver ").newInstance(); String url="jdbc:db2://localhost:5000/sample"; //sample为你的数据库名 String user="admin"; String password=""; Connection conn= DriverManager.getConnection(url,user,password); 3、Sql Server7.0/2000数据库 Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance (); String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb"; //mydb为数据库 String user="sa"; String password=""; Connection conn= DriverManager.getConnection(url,user,password); 4、Sybase数据库 Class.forName("com.sybase.jdbc.SybDriver").newInstance(); String url =" jdbc:sybase:Tds:localhost:5007/myDB"; //myDB为你的数据库名 Properties sysProps = System.getProperties(); SysProps.put("user","userid"); SysProps.put("password","user_password"); Connection conn= DriverManager.getConnection(url, SysProps); 5、Informix数据库 Class.forName("https://www.sodocs.net/doc/8412584224.html,rmix.jdbc.IfxDriver").newInstance(); String url = "jdbc:informix-sqli://123.45.67.89:1533/myDB:INFORMIXSERVER=myserver; user=testuser;password=testpassword"; //myDB为数据库名 Connection conn= DriverManager.getConnection(url);

java数据库连接JDBC和MVC

1 JDBCutil.java package www.chinasofiti.eex.jdbcutil; import java.sql.Connection; import java.sql.DriverManager; public class JDBCutil { public static final String DRIVER = "oracle.jdbc.driver.OracleDriver"; public static final String URL="jdbc:oracle:thin:@192.168.80.49:1521:XE"; public static final String USER="SCOTT"; public static final String PASSWORD="TIGER"; public static Connection conn; public JDBCutil(){ } public static Connection getConnection() throws Exception{ Class.forName(DRIVER);//加载驱动 conn=DriverManager.getConnection(URL,USER,PASSWORD);//链接数据库 System.out.println(conn); System.out.println("数据库链接成功"); return conn; } // public static void main(String[]args){ // try { // getConnection(); // } catch (Exception e) { // // TODO Auto-generated catch block // e.printStackTrace();

黑马程序员JavaEE就业笔记串讲---JDBC

黑马程序员JavaEE就业笔记串讲---JDBC 【JDBC的概述】 JDBC:Java DataBase Connectivity Java数据库的连接. * 是SUN公司统一提供的一套接口规范(JDBC).各个数据库生产商提供实现. 驱动:两个硬件设备之间通信的桥梁. 【JDBC的开发步骤】 注册驱动: 获得连接: 获得执行SQL语句对象: 释放资源: JDBC的API: 【Connection】 创建执行SQL的对象: 进行事务管理:

【Statement】 执行SQL语句: 执行批处理: 【ResultSet】 获得结果集中的数据: * getXXX(int idx); * select cname,cid from category; * getXXX(String name); 默认情况下:next();

* 正常的情况下结果集只能向下的. 【自定义连接池】(了解) * SUN公司提供了一个连接池的接口.(javax.sql.DataSource). * 定义一个连接池:实现这个接口. * 使用List集合存放多个连接的对象. 【自定义连接池的代码】 public class MyDataSource implements DataSource{ // 创建一个List集合用于存放多个连接对象. private List list = new ArrayList(); // 在程序开始的时候,初始化几个连接,将连接存放到list中. public MyDataSource() { // 初始化3个连接: for(int i=1;i<=3;i++){ Connection conn = JDBCUtils.getConnection(); list.add(conn); } } @Override // 获得连接的方法:

JDBC操作步骤以及MySQL数据库连接操作

3.1、JDBC操作步骤 JDBC本身是一个标准,所以其操作步骤是固定的,以后只需要修改很少一部分代码就可以达到不同数据库间的连接转换功能。 JDBC操作步骤: 数据库安装并配置完成之后,就可以按照以下的步骤进行数据库的操作了: 1.加载数据库驱动程序:各个数据库都会提供JDBC的驱动程序开发包,直接把JDBC操作所需要 的开发包(一般为*.jar或*.zip)直接配置到classpath路径即可。 2.连接数据库:肯定要使用连接地址。根据各个数据库的不同,连接的地址也不同,此连接地址 将由数据库厂商提供,一般在使用JDBC连接数据库时都要求用户输入数据库连接的用户名 和密码,本章使用mysql数据库,所以用户名和密码为“root“,用户在取得连接之后才可以对数据库进行查询或更新操作。 3.使用语句进行数据库操作:数据库操作分为更新和查询两种操作,除了可以使用标准的SQL语 句之外,对于各个数据库也可以使用其自己提供的各种命令。 4.关闭数据库连接:数据库操作完毕之后需要关闭连接以释放资源,因为数据库的连接是非常有 限的。 3.2、配置数据库的驱动程序 数据库驱动程序是由各个数据库生产商提供,只要在JAVA中要想连接数据库,则肯定各个DB要有所支持。 下载地址:https://www.sodocs.net/doc/8412584224.html,选择downloads-->connector/J,会打开 https://www.sodocs.net/doc/8412584224.html,/downloads/connector/j/页面 此时直接修改CLASSPATH即可。 此时数据库驱动程序就安装完成了。

3.3、加载驱动程序 通过Class.forName()语句可以加载一个驱动程序。 Class实例化需要一个完整的包.类名称,此:“包.类”路径就应该是驱动程序的名称。 (附:把“mysql-connector-java-5.1.20-bin.jar”通过WINRAR打开,找到 org/gjt/mm/mysql/Driver.class) 语法:public static Class forName(String className) throws ClassNotFoundException 没有发现类的错误,肯定是classpath配置有问题。

相关主题