package com.worthtech.app.sql;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
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.Map;
import java.util.Properties;
public class DataBaseUtil {
private String driver;
private String url;
private String user;
private String password;
private Connection conn;
public DataBaseUtil(String fileName) {
loadProperties(fileName);
setConnection();
}
// handle the properties file to get the informations for connection
private void loadProperties(String fileName) {
Properties props = new Properties();
try {
props.load(new FileInputStream(fileName));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
this.driver = props.getProperty("driver");
this.url = props.getProperty("url");
this.user = props.getProperty("user");
this.password = props.getProperty("password");
}
private void setConnection() {
try {
Class.forName(driver);
this.conn = DriverManager.getConnection(url, user, password);
} catch (ClassNotFoundException classnotfoundexception) {
System.err.println("db: " + classnotfoundexception.getMessage());
} catch (SQLException sqlexception) {
System.err.println("db.getconn(): " + sqlexception.getMessage());
}
}
public Connection getConnection() {
try {
if (conn != null && !conn.isClosed()) {
return this.conn;
} else {
setConnection();
}
} catch (SQLException e) {
e.printStackTrace();
}
return this.conn;
}
public void closeConnection() {
try {
if (st != null) {
st.close();
}
if (conn != null && !conn.isClosed()) {
conn.close();
conn = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 增加,修改,删除数据
*
* @param sql
* @param sqlValue
* @return
* @throws Exception
* 用法: sql="UPDATE user SET password = ? WHERE phone= ?"; String
* sql="INSERT INTO payee(name,card,openBank,addDate,addPhone)
* VALUES(?,?,?,?,?)"; delete ... db.executeUpdate(sql, new
* String[]{name,card,openBank,addDate,addPhone});
*/
public int doExecute(String sql, String sqlValue[]) {
int count = 0;
try {
PreparedStatement ps = conn.prepareStatement(sql);
if (sqlValue != null) {
for (int i = 0; i < sqlValue.length; i++)
ps.setString(i + 1, sqlValue[i]);
}
count = ps.executeUpdate();
} catch (Exception e) {
}
return count;
}
/**
* 提供更通用点的方法
*
* @param sql
* @return
*/
public int doExecute(String sql) {
return doExecute(sql, null);
}
/**
* 获得查询数据,返回一个ArrayList 得到的Arraylist 可以用 Map解析 用法: Arraylist list =
* db.getList("select * from user where ***") for(int i=1;i<list.size;i++)
* Map map = (Map)list.get(i); map.get("id"); 就是得到了里面的id了
*
*/
public ArrayList getList(String sql) {
Statement st = null;
ArrayList list = new ArrayList();
try {
// PreparedStatement ps = conn.prepareStatement(sql);
// ResultSet rs=ps.executeQuery();
st = conn.createStatement();
ResultSet rs = st.executeQuery(sql);
ResultSetMetaData meta = rs.getMetaData();
int count = meta.getColumnCount();
String cols[] = new String[count];
for (int i = 0; i < cols.length; i++) {
if (meta.getColumnName(i + 1) != null)
cols[i] = meta.getColumnName(i + 1);
else
cols[i] = meta.getColumnLabel(i + 1);
}
HashMap map = null;
String fieldValue = null;
for (; rs.next(); list.add(map)) {
map = new HashMap();
for (int i = 0; i < cols.length; i++) {
int iType = meta.getColumnType(i + 1);
if (iType == 2 || iType == 3) {
if (meta.getScale(i + 1) == 0)
fieldValue = String.valueOf(rs.getLong(i + 1));
else
fieldValue = rs.getString(i + 1);
} else if (iType == 8)
fieldValue = String.valueOf(rs.getDouble(i + 1));
else if (iType == 6 || iType == 7)
fieldValue = String.valueOf(rs.getFloat(i + 1));
else
fieldValue = rs.getString(i + 1);
if (fieldValue == null)
fieldValue = "";
else
fieldValue = fieldValue.trim();
map.put(cols[i], fieldValue);// .toLowerCase()
}
}
} catch (Exception e) {
}
return list;
}
/**
* 获得记录数
*
* @param sql
* @return 用法: String sql="select count(*) from bill where ... ;
* count=db.executeQuery(sql);
*/
public int getCount(String sql) {
// String sql="select count(*) from table where ...";
ResultSet rs = null;
PreparedStatement ps;
int count = 0;
try {
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
rs.next();
count = rs.getInt(1);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return count;
}
/**
* 以下4个方法都可以用doExecute(),getList()替代
*
* @param args
*/
private Statement st = null;
public void doInsert(String sql) {
try {
st = conn.createStatement();
int i = st.executeUpdate(sql);
} catch (SQLException sqlexception) {
System.err.println("db.executeInset:" + sqlexception.getMessage());
}
}
public void doDelete(String sql) {
try {
st = conn.createStatement();
int i = st.executeUpdate(sql);
} catch (SQLException sqlexception) {
System.err.println("db.executeDelete:" + sqlexception.getMessage());
}
}
public void doUpdate(String sql) {
try {
st = conn.createStatement();
int i = st.executeUpdate(sql);
} catch (SQLException sqlexception) {
System.err.println("db.executeUpdate:" + sqlexception.getMessage());
}
}
public ResultSet doSelect(String sql) {
ResultSet rs = null;
try {
st = conn.createStatement(
java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,
java.sql.ResultSet.CONCUR_READ_ONLY);
rs = st.executeQuery(sql);
} catch (SQLException sqlexception) {
System.err.println("db.executeQuery: " + sqlexception.getMessage());
}
return rs;
}
/**
* 以下3个为保留方法
*/
public void beginTransaction() {
try {
conn.setAutoCommit(false);
} catch (SQLException e) {
e.printStackTrace();
}
}
public void commitTransaction() {
try {
conn.commit();
} catch (SQLException e) {
e.printStackTrace();
}
}
public void rollbackTransaction() {
try {
conn.rollback();
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 测试
*
* @param args
*/
public static void main(String[] args) {
DataBaseUtil util = new DataBaseUtil("config.properties");
String sql = "";
sql = "INSERT INTO user(userId,password,userName,zone,phone) VALUES(?,?,?,?,?)";
try {
util.doExecute(sql, new String[] { "name", "pass", "上海", "021",
"61089712" });
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
sql = "select * from user ";
ArrayList list = util.getList(sql);
System.out.println("size=" + list.size());
for (int i = 0; i < list.size(); i++) {
Map map = (Map) list.get(i);
System.out.println("===" + map.get("userId"));
System.out.println("===" + map.get("password"));
System.out.println("===" + map.get("userName"));
System.out.println("===" + map.get("zone"));
System.out.println("===" + map.get("phone"));
}
// Connection conn = util.getConnection();
util.closeConnection();
}
}
分享到:
相关推荐
Java 企业版(Java 2 Platform, Enterprise Edition,简称 J2EE)是 Sun Microsystems 推出的用于构建分布式、多层企业级应用的框架。它为开发者提供了多种服务和组件模型,包括Java Servlets、JavaServer Pages ...
j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar...
activation.jar javax.servlet.jar javax.servlet.jsp.jar jboss-j2ee.jar jboss-jaxrpc.jar jboss-jsr77.jar jboss-saaj.jar mail.jar namespace.jar xml-apis.jar
《21天学通J2EE》一书旨在为读者提供一个系统且高效的学习路径,以掌握Java 2 Enterprise Edition(J2EE)的核心概念和技术。J2EE是Sun Microsystems在2000年推出的一套企业级Java平台标准,它提供了一组组件和服务...
HTML笔记. J2EE笔记. Javascript笔记. JAVA笔记.oracle 笔记.Linux笔记.tomcat笔记.面试问题.数据结构.听韩顺平的笔记.正则表达式.等,我是我在上大学时学习做的笔记,拿出来和大家共享。。
《Turbo ePrinting(J2EE版)开发指南》是一份专为Java企业级开发者准备的详细教程,旨在帮助他们理解和掌握如何在J2EE平台上开发和实现Turbo ePrinting系统。该指南涵盖了从基础概念到高级实践的全方位内容,旨在提升...
J2EE 是 Java 企业版平台的缩写,指的是 Java 语言中用于开发企业级应用程序的技术平台。J2EE 平台主要包括四层模型:客户端层、Web 层、业务逻辑层和企业信息系统层。 J2EE 平台的四层模型: * 客户端层:运行在...
J2EE(Java Enterprise Edition),是Java EE编程技术课程的一部分,为企业级应用程序提供了一种标准化的开发框架。J2EE的出现是为了解决传统应用程序模型的种种缺陷,提供了一种可扩展、可维护、可伸缩的开发架构。...
《Java.J2EE.Job.Interview.Companion.2nd.Edition.Apr.2007》这本书是针对Java和J2EE开发者求职面试的一本指南,它提供了丰富的面试问题和解答,帮助求职者准备J2EE相关的职位面试。这本书的第二版在2007年4月发布...
### Java/J2EE Job Interview Companion知识点总结 #### 一、书籍基本信息 - **书名**:《Java/J2EE Job Interview Companion》第二版 - **出版时间**:2007年4月 - **作者**:K. Arulkumaran 和 A. Sivayini - **...
:warning: 该项目现在是EE4J计划的一部分。 该仓库已被归档,因为所有活动现在都在。 有关整体EE4J过渡状态,请参见。 javax.management.j2ee javax.management.j2ee api的存储库
j2ee源码j2ee源码j2ee源码j2ee源码j2ee源码j2ee源码j2ee源Commonjava.javaCommonjava.javaCommonjava.javaCommonjava.javaCommonjava.java
J2EE提供JTA(Java Transaction API)来处理事务,JMS(Java Message Service)用于异步通信,JNDI(Java Naming and Directory Interface)提供命名和目录服务。 5. **中间件(Middleware)**:J2EE应用服务器(如...
你可以从中学习到如何将Java类、接口和框架整合起来实现一个完整的J2EE应用。 其次,"一个j2ee的开发案例程序.zip"是案例程序的源代码或二进制文件。这个压缩文件可能包含以下几个部分: 1. **源代码**:可能包括...
标题中的"archive_一个j2EE的开发案例程序.zip.zip"表明这是一个压缩文件,其中包含了一个J2EE(Java 2 Platform, Enterprise Edition)的开发案例。J2EE是Java平台的一个版本,专为构建企业级分布式应用系统设计。...
5. **实体类和映射文件**:讲解如何创建Java实体类,以及对应的.hbm.xml映射文件,理解属性与数据库字段的对应。 6. **CRUD操作**:展示如何使用Hibernate进行创建(Create)、读取(Read)、更新(Update)和删除...
《J2EE技术详解——基于j2ee.chm.zip_chm help id java_j2ee chm_j2ee help c++_j2ee.c_zip的综合指南》 在信息技术领域,Java 2 Platform, Enterprise Edition(J2EE)是用于构建企业级应用的重要平台。它提供了...
《Java.J2EE.EJB-Enterprise.JavaBeans, 3rd Edition-Titan.Books》是一部针对企业级Java开发的重要参考资料,特别关注Java Enterprise Edition (J2EE) 中的Enterprise JavaBeans (EJB) 技术。这本书的第三版,由...
在 Eclipse 中通过 Tomcat 运行 J2EE 项目时,可能会出现 java.lang.OutOfMemoryError: PermGen space 异常,这是由于 JVM 默认分配的运行空间过小,导致 J2EE 项目加载的类过多,造成内存溢出。 PermGen space 是...
- **定义与背景**:Java2 Enterprise Edition(J2EE)是Java平台的一个版本,专为开发企业级应用而设计。J2EE继承和发展了Java SE,并且特别强调了支持分布式计算环境中的服务端应用程序开发。 - **发展历程**: -...