- 浏览: 121339 次
- 性别:
- 来自: 南宁
文章分类
最新评论
package com.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class GSYDao {
//定义对象
private PreparedStatement pstmt;
private Connection conn;
private ResultSet rs;
//加载驱动
static {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//方法卸载构造方法内,开始就会调用。
public GSYDao(String sql){
try {
//获取数据库连接
conn = DriverManager.getConnection("jdbc:mysql://localhost/test",
"root", "admin");
//存入pstmt对象,以供使用
pstmt = conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
} catch (Exception e) {
e.printStackTrace();
}
}
public void executeUpdate(String sql) throws SQLException {
System.out.println(sql);
pstmt.executeUpdate(sql);
}
public ResultSet executeQuery(String sql) throws SQLException {
System.out.println(sql);
rs = pstmt.executeQuery(sql);
return rs;
}
public void close() {
if (rs != null) {
try {
rs.close();
} catch (Exception e) {
// TODO: handle exception
}
}
if (pstmt != null) {
try {
pstmt.close();
} catch (Exception e) {
// TODO: handle exception
}
}
if (conn != null) {
try {
conn.close();
} catch (Exception e) {
// TODO: handle exception
}
}
}
//main方法
public static void main(String[] args) {
}
}
连接池的写法
package com.database.config;
public class DB
{
public final static String driver="sun.jdbc.odbc.JdbcOdbcDriver";
//public final static String driver="com.mysql.jdbc.Driver";
public final static String dbName="stu.mdb";
public final static String url="jdbc:odbc:driver= {Microsoft Access Driver (*.mdb)};DBQ=D:/javaWeb/Stu/WEB-INF/classes/stu.mdb";
//public final static String url="jdbc:mysql://localhost/test";
public final static String port="";
public final static String username="";
public final static String pwd="";
public final static int max =50;
public final static int min=5;
/*
* 经测试以下参数为最佳合理配置,请勿更改!
* 根据不同的电脑配置,配置不同的参数
* */
public final static int inc=5;
public final static int timeout=20; //等待timeout时间后获取连接
public final static int timer=1000; //多少时间关掉多余的连接
}
//数据库连接包装类
ConnState.java
/*
* 创建日期 Jan 2, 2009
*
* TODO 要更改此生成的文件的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
package com.database.pool;
import java.sql.Connection;
public class ConnState
{
private boolean isOpen=false;
private Connection conn;
public Connection getConn()
{
return conn;
}
public void setConn(Connection conn)
{
this.conn = conn;
}
public boolean isOpen()
{
return isOpen;
}
public void setOpen(boolean isOpen)
{
this.isOpen = isOpen;
}
}
DatabasePool.java
/*
* 创建日期 Jan 2, 2009
*
* TODO 要更改此生成的文件的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
package com.database.pool;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
import com.database.config.DB;
/*数据库连接池
* 程序会将多余的连接关掉和在连接池里删除掉
*
* */
public class DatabasePool
{
private static List<ConnState> pool;
private static DatabasePool instance;
public TimerTask task=new TimerTask()
{
public void run()
{
System.out.println("run()");
System.out.println("DatabasePool 类使用中的连接总数:"+ getConnCount());
// if(pool.size()>DB.min)
{
Iterator<ConnState> it =pool.iterator();
while(it.hasNext())
{
ConnState st=it.next();
if(pool.size()<=DB.min)
{
if(st.isOpen()==true && null!=st.getConn())
{
try
{
st.getConn().commit();
st.setOpen(false);
}catch(SQLException e)
{
System.out.println("强行执行sql语句失败");
}
}
}
else
{
if(st.isOpen()==true && null!=st.getConn())
{
try
{
st.getConn().commit();
st.getConn().close();
//it.remove();
}catch(SQLException e)
{
try
{
Thread.sleep(200);
st.getConn().commit();
st.getConn().close();
}catch(InterruptedException ex)
{
ex.printStackTrace();
}catch(SQLException se)
{
se.printStackTrace();
}
}finally
{
try
{
st.setConn(null);
st=null;
System.out.println("最后的关闭");
it.remove();
System.gc();
}catch(Exception e)
{
e.printStackTrace();
}
}
}
}
}
}
}
};
public DatabasePool() throws Exception
{
/*
* 连接池使用ArrayList对象进行封装ConnState,这里使用了泛型
* */
pool=new ArrayList<ConnState>();
Init();
StartTimer();
}
/* 创建数据库连接
* 返回ConnState对象
* ConnState 对象封装Connection对象
* */
private static ConnState createConnection() throws ClassNotFoundException,SQLException
{
Connection conn;
Class.forName(DB.driver);
conn=DriverManager.getConnection(DB.url);
conn.setAutoCommit(false);
ConnState state =new ConnState();
state.setConn(conn);
return state;
}
/*数据库连接池的初始化过程*/
private static void Init() throws Exception
{
if(null==pool)
{
getInstance();
}
else
{
/*
* 创建预定义大小的连接
* */
for(int i=0;i<DB.min;i++)
{
pool.add(createConnection());
}
}
}
private static void inc() throws Exception
{
if(null==pool)
{
getInstance();
Init();
}
else if(pool.size()<DB.max)
{
int c=(pool.size()+DB.inc)>DB.max?DB.max-pool.size():DB.inc;
for(int i=0;i<c;i++)
{
pool.add(createConnection());
}
}
}
private static DatabasePool getInstance() throws Exception
{
instance =new DatabasePool();
return instance;
}
/*
* 返回数据库连接
* */
public synchronized static Connection getConnection() throws Exception
{
if(null ==instance )
{
getInstance();
}
Connection conn=findConnection();
int count=1;
/*
* 如果没有找到可用的连接或三次
* 将会抛出异常
* */
while(null==conn && count<=3)
{
count++;
Thread.sleep(DB.timeout);
conn=findConnection();
if(null!=conn)
{
break;
}
else
{
inc(); // 增加指定个数的连接
conn=findConnection();
}
}
if(null==conn) throw new Exception("当前连接己达到最连接池,没有可以使用的数据库连接了");
return conn;
}
private static Connection findConnection() throws Exception
{
Iterator<ConnState> it =pool.iterator();
Connection conn=null;
while(it.hasNext())
{
ConnState cs=it.next();
if(cs.isOpen()==false)
{
conn=cs.getConn();
cs.setOpen(true);
break;
}
}
return conn;
}
public void StartTimer()
{
Timer time=new Timer();
time.schedule(task, DB.timer,2000);
}
public static int getConnCount()
{
return pool.size();
}
}
SqlAware.java
/*
* 创建日期 Jan 3, 2009
*
* TODO 要更改此生成的文件的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
package com.database.pool;
import java.util.List;
import java.util.Map;
public interface SqlAware
{
public List getData(String sql) throws Exception;
public Map getOneData(String sql) throws Exception;
public int execute(String sql) throws Exception;
public int executeBatch(String sql) throws Exception;
}
SqlDao.java
/*
* 创建日期 Jan 3, 2009
*
* TODO 要更改此生成的文件的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
package com.database.pool;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import com.database.exception.SqlException;
public class SqlDao implements SqlAware
{
public void close(ResultSet rs) throws SQLException
{
if(null!=rs)
{
rs.close();
}
}
public void close(ResultSet rs,Statement stmt) throws SQLException
{
if(null!=rs) rs.close();
if(null!=stmt) stmt.close();
}
public void close(PreparedStatement pstmt) throws SQLException
{
if(null!=pstmt) pstmt.close();
}
public void close(ResultSet rs,PreparedStatement pstmt) throws SQLException
{
if(null!=rs) rs.close();
if(null!=pstmt) pstmt.close();
}
public int executeBatch(ArrayList<Map<String,String>> list, String sql) throws Exception
{
// TODO 自动生成方法存根
return 0;
}
public int executeBatch(String sql) throws Exception
{
// TODO 自动生成方法存根
return 0;
}
public int execute(String sql) throws Exception
{
int n=0;
Connection conn=DatabasePool.getConnection();
PreparedStatement pstmt=conn.prepareStatement(sql);
n=pstmt.executeUpdate();
close(pstmt);
return n;
}
public List<Map<String,String>> getData(String sql) throws Exception
{
ArrayList<Map<String,String>> list=new ArrayList<Map<String,String>>();
Connection conn=DatabasePool.getConnection();
PreparedStatement pstmt=conn.prepareStatement(sql);
ResultSet rs=pstmt.executeQuery();
ResultSetMetaData rsmd=rs.getMetaData();
int c=rsmd.getColumnCount();
while(rs.next())
{
Map<String,String> hp=new HashMap<String,String>();
for(int i=1;i<=c;i++)
{
String label=rsmd.getColumnName(i);
System.out.println(label);
String value=rs.getString(i);
hp.put(label, value);
if(null==hp) throw new SqlException();
}
list.add(hp);
}
close(rs,pstmt);
return list;
}
public Map<String,String> getOneData(String sql) throws Exception
{
HashMap<String,String> hp=null;
Connection conn=DatabasePool.getConnection();
PreparedStatement pstmt=conn.prepareStatement(sql);
ResultSet rs=pstmt.executeQuery();
ResultSetMetaData rsmd=rs.getMetaData();
int c=rsmd.getColumnCount();
if(rs.next())
{
hp=new HashMap<String,String>(1);
for(int i=1;i<c;i++)
{
String label=rsmd.getColumnName(i);
hp.put(label, rs.getString(i));
}
}
close(rs,pstmt);
if(null==hp) throw new SqlException();
return hp;
}
}
一般写一个业务操作类继承SqlDao类就可以了。
发表评论
-
android 横屏重启的解决方案
2011-09-19 15:45 1602Android每次屏幕的横竖切换Activity会重新OnCr ... -
java 类的序列化
2011-08-30 11:57 837序列化: 可以将一个对象保存到一个文件,所以可以通过流的方式 ... -
android全屏显示的方法
2011-08-15 11:16 1472我们在开发程序是经常会需要软件全屏显示、自定义标题(使用按钮等 ... -
模仿AJAX上传文件
2011-07-27 11:08 0首先要说的就是 ajax 是无法实现上传文件的,可以想一下aj ... -
模仿AJAX上传文件
2011-07-27 11:08 662首先要说的就是 ajax 是无法实现上传文件的,可以想一下aj ... -
模仿AJAX上传文件
2011-07-27 11:07 703首先要说的就是 ajax 是无法实现上传文件的,可以想一下aj ... -
模仿AJAX上传文件
2011-07-27 11:07 897首先要说的就是 ajax 是无法实现上传文件的,可以想一下aj ... -
java链接数据库乱码解决方案
2011-05-20 17:56 1275Java乱码问题解决方 ... -
java html标签过滤类
2011-02-12 00:24 1217import java.util.regex.Matcher; ... -
java 批量下载图片,批量打包文件并下载
2011-02-11 14:15 17311、批量下载网页上,动态生成的图片到服务器上指定的目录中 2、 ... -
myeclipse 注册的方法
2011-02-11 00:42 699import java.io.BufferedReader;i ... -
利用java.net包访问网络,连接网页并返回html页面代码
2011-02-11 00:28 1451package org.kevin;import java.n ... -
Java清除HTML标签
2011-02-11 00:14 1573使用正则表达式删除HTML标签。 import ja ... -
j2me 环境搭建
2011-01-17 09:17 854用Eclipse和WTK搭建J2ME开发环境 关键字: j2 ... -
jdbc 连接sql2008的问题解决
2010-12-31 16:24 1571首先下JDBC4,然后解压在C ... -
Struts 开发帮助文件
2010-12-25 23:58 599一、 概述struts是基于当前的一些相关标准的开发技术 ... -
java给图片加图片水印
2010-12-08 21:00 799package com.test;import java.aw ... -
java连接数据库大全
2010-11-06 10:30 777JAVA连接数据库大全 关键字: 数据库连接大全 J ... -
两个数组求并集
2010-10-26 22:59 1889对两个数组求并集,由于对数组的操作不是很熟悉,所以将数组中的数 ... -
关于数组的常见题型(交叉合并、交集、并集、插入、删除、比较)
2010-10-26 22:59 2579public class Arrays{ //求两数组的 ...
相关推荐
### Java连接数据库实例详解 在Java开发中,与数据库进行交互是常见的需求之一。通过Java Database Connectivity (JDBC) API,开发者可以实现跨平台、跨数据库的连接与操作。本文将详细解读如何使用Java连接Oracle...
这是我自己编写的一个JAVA连接数据库的例子,带解说,
1.格式化表记录的显示...4.基于树状视图的数据库表结构查看器 5.调用存储过程 6.支持数据绑定的复选框列表 7.数据表格 8.存取数据库中的图像信息 9.利用数据库存储类对象 10.对象和关系型数据的动态映射 11.表记录导航
本实例将详细介绍如何使用Java连接Oracle数据库,并提供所需的jar文件——`classes14.jar`。 首先,为了在Java中与Oracle数据库建立连接,我们需要引入Oracle的JDBC驱动程序。`classes14.jar`就是Oracle JDBC驱动的...
在Java编程领域,连接MySQL数据库是一项基础且重要的任务,它涉及到Java数据库连接(JDBC)技术的使用。...这个实例仅作为入门指南,帮助开发者理解如何在Java环境中使用JDBC与MySQL数据库进行数据操作。
【标题】"JAVA 小数据库实例" 是一个大学课程项目,旨在通过JAVA语言实现一个小型的数据库系统。这个系统具备图形用户界面(GUI),能够支持用户进行登录、注册以及对数据的基本操作,如添加、删除、查询和修改。这...
在Java编程中,连接数据库和生成数据报表是两个核心任务,尤其在企业级应用开发中至关重要。本压缩包包含的资源旨在提供必要的库文件,帮助开发者实现这些功能。以下是相关知识点的详细介绍: 1. **Java数据库连接...
3. **数据库URL**:连接数据库时需要指定一个URL,其中包含了数据库服务器的地址、端口、数据库名称等信息。例如,Oracle数据库的URL是`jdbc:oracle:thin:@localhost:1521:orcl`,这里的`orcl`是数据库的服务标识符...
在“Echarts连接数据库实例”中,我们看到的是一个结合了Echarts、Java以及MySQL数据库的实际项目,旨在通过servlet来处理数据库请求,然后使用Echarts进行数据可视化。 首先,我们需要理解Echarts的基本用法。...
Java连接数据库是应用程序与数据库交互的基础,通过Java的JDBC(Java Database Connectivity)API,开发者可以实现对多种数据库系统的操作。以下将详细讲解标题和描述中提到的知识点,并结合给出的部分内容进行扩展...
Java连接数据库并修改内容,Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //加载驱动器 Connection con=DriverManager.getConnection(dbURL,user,password); //获取连接 String sqlStr="select * from ...
总结来说,Java连接数据库的方式多样,从简单的JDBC直接连接到复杂的数据库连接池,每种方式都有其适用场景。在实际开发中,选择合适的连接方式并合理管理数据库连接,对于优化性能、提高应用的稳定性和可扩展性至关...
首先,我们需要了解Java连接数据库的基础组件。JDBC(Java Database Connectivity)是Java中用于与各种数据库进行交互的标准API。通过JDBC,我们可以创建数据库连接、执行SQL语句并处理结果集。在JavaBean中使用JDBC...
Java JDBC 连接数据库实例 通用度稍好
这个名为“Java连接各种数据库的实例.rar”的压缩包文件显然提供了关于如何使用Java与多种数据库进行交互的示例代码。下面,我们将深入探讨Java数据库连接(JDBC)的概念以及如何通过Java连接到不同的数据库系统。 ...
在本文中,我们将深入探讨如何使用Java连接到Microsoft SQL Server数据库,并进行基本的数据操作,如创建数据表和查询数据。这个实例将帮助开发者理解如何在Java应用程序中与SQL Server进行交互。 首先,为了连接到...