BirdsHover

——路漫漫其修远兮,吾将上下而爬楼梯!

  BlogJava :: 首页 ::  :: 联系 :: 聚合  :: 管理 ::
  21 随笔 :: 8 文章 :: 34 评论 :: 0 Trackbacks
import java.io.UnsupportedEncodingException;
import java.sql.*;
import java.util.ArrayList;
import java.util.Hashtable;
import javax.naming.*;
import javax.sql.*;
import org.apache.tomcat.dbcp.dbcp.BasicDataSource;

/**
 * <strong>mysql数据库操作帮助类</strong>
 * <p>
 * 包装了mysql常用的操作方法。类似于SqlHelper在java中的实现。
 * </p>
 * 
 * 
@author birdshover
 
*/
public abstract class mysqlhelper {
    
private static Boolean locker = false;
    
/**
     * 测试使用方法,也可以直接使用,改方法应该只被调用一次。 用来注册数据源。
     
*/
    
public synchronized static void forTest() {
        
if(locker)
            
return;
        
else
            locker 
= true;
        BasicDataSource bdds 
= new BasicDataSource();
        bdds.setDriverClassName(
"org.gjt.mm.mysql.Driver");
        bdds.setUrl(
"jdbc:mysql://localhost:3306/doclight?useUnicode=true&characterEncoding=UTF-8");
        bdds.setUsername(
"root");
        bdds.setPassword(
"123");
        bdds.setInitialSize(
100);
        Hashtable env 
= new Hashtable();
        env.put(
"java.naming.factory.initial",
                
"org.apache.naming.java.javaURLContextFactory");
        
try {
            InitialContext ict 
= new InitialContext(env);
            ict.bind(
"MySQL", bdds);
        } 
catch (Exception ex) {
            locker 
= false;
            System.out.println(ex.getMessage());
        }
    }

    
/**
     * 返回数据库连接对象,连接失败则返回null
     * 
     * 
@return Connection
     
*/
    
private static Connection getConnection() {
        
try {
            InitialContext context 
= new InitialContext();
            DataSource ds 
= (DataSource) context.lookup("MySQL");
            
return ds.getConnection();
        } 
catch (NamingException ex) {
            
return null;
        } 
catch (SQLException ex) {
            
return null;
        } 
catch (Exception ex) {
            
return null;
        }
    }

    
/**
     * 无结果查询,适用于更新和插入
     * 
     * 
@param SQL语句
     * 
@param 语句带的参数
     * 
@return 操作影响行数
     * 
@throws SQLException
     * 
     * @example Object[] parms = new Object[2];<br/> parms[0] = "标题"; <br/>
     *          parms[1] = "内容";<br/> int val = mysqlhelper.ExecuteNoneQuery(
     *          "insert into Documents(Title,Content) values (?,?)", parms);
     
*/
    
public static int ExecuteNoneQuery(String cmdtext, Object[] parms)
            
throws SQLException {
        PreparedStatement pstmt 
= null;
        Connection conn 
= null;
        
try {
            conn 
= getConnection();
            pstmt 
= conn.prepareStatement(cmdtext);
            prepareCommand(pstmt, parms);
            
return pstmt.executeUpdate();
        } 
catch (Exception ex) {
            System.out.println(ex.getMessage());
        } 
finally {
            
if (pstmt != null){
                pstmt.clearParameters();
                pstmt.close();
            }
            
if (conn != null)
                conn.close();
            
        }
        
return 0;
    }

    
/**
     * 返回查询结果集
     * 
     * 
@param SQL语句
     * 
@param 附带参数
     * 
@return 返回结果,用ArrayList包装Object数组
     * 
@throws SQLException
     * 
     * @example ArrayList list =
     *          mysqlhelper.ExecuteReader("Select * from Documents",null); <br/>
     *          for(int i = 0;i&lt;list.size();i++) { <br/> &nbsp;&nbsp;Object[]
     *          obs = (Object[])list.get(i); <br/> &nbsp;&nbsp;for(int j =
     *          0;j&lt;obs.length;j++) { <br/>
     *          &nbsp;&nbsp;&nbsp;&nbsp;out.print(obs[j].toString()); <br/>
     *          &nbsp;&nbsp;} <br/> &nbsp;&nbsp;out.print("&lt;br/&gt;"); <br/>
     *          } <br/>
     * 
     
*/
    
public static ArrayList ExecuteReader(String cmdtext, Object[] parms)
            
throws SQLException {
        PreparedStatement pstmt 
= null;
        Connection conn 
= null;
        ResultSet rs 
= null;
        
try {
            conn 
= getConnection();
            pstmt 
= conn.prepareStatement(cmdtext);

            prepareCommand(pstmt, parms);
            rs 
= pstmt.executeQuery();

            ArrayList al 
= new ArrayList();
            ResultSetMetaData rsmd 
= rs.getMetaData();
            
int column = rsmd.getColumnCount();

            
while (rs.next()) {
                Object[] ob 
= new Object[column];
                
for (int i = 1; i <= column; i++) {
                    ob[i 
- 1= rs.getObject(i);
                }
                al.add(ob);
            }
            
return al;

        } 
catch (Exception ex) {
        }
        
finally{
            
if (rs != null)
                rs.close();
            
if (pstmt != null)
                pstmt.close();
            
if (conn != null)
                conn.close();
        }
        
return null;
    }

    
/**
     * 返回第1行第1列数据,一般用来查询count值
     * 
     * 
@param SQL语句
     * 
@param 带参数
     * 
@return 值
     * 
@throws SQLException
     
*/
    
public static Object ExecuteScalar(String cmdtext, Object[] parms)
            
throws SQLException {
        PreparedStatement pstmt 
= null;
        Connection conn 
= null;
        ResultSet rs 
= null;
        
try {
            conn 
= getConnection();

            pstmt 
= conn.prepareStatement(cmdtext);
            prepareCommand(pstmt, parms);

            rs 
= pstmt.executeQuery();
            
if (rs.next()) {
                
return rs.getObject(1);
            } 
else {
                
return null;
            }
        } 
catch (Exception e) {
            System.out.println(e.getMessage());
        } 
finally {
            
if (rs != null)
                rs.close();
            
if (pstmt != null)
                pstmt.close();
            
if (conn != null)
                conn.close();
        }
        
return null;
    }

    
private static void prepareCommand(PreparedStatement pstmt, Object[] parms)
            
throws SQLException, UnsupportedEncodingException {
        
if (parms != null && parms.length > 0) {
            
for (int i = 1; i < parms.length + 1; i++) {
                Object item 
= parms[i - 1];
                String typeName 
= item.getClass().getSimpleName();
                
if (typeName.equals("String")) { 
                    pstmt.setString(i, item.toString());
                } 
else if (typeName.equals("Integer")) {
                    pstmt.setInt(i, Integer.parseInt(item.toString()));
                } 
else if (typeName.equals("Date")) {
                    pstmt.setDate(i, Date.valueOf(item.toString()));
                } 
else {
                    pstmt.setObject(i, item);
                }
            }
        }
    }
}
posted on 2008-10-12 13:27 Birdshover 阅读(2294) 评论(2)  编辑  收藏

评论

# re: java操作mysql的帮助类,相当于C#的SqlHelper 2008-10-12 18:07 Birdshover
bdds.setUrl("jdbc:mysql://localhost:3306/doclight?useUnicode=true&characterEncoding=UTF-8");
解决中文乱码,这里使用utf-8编码  回复  更多评论
  

# re: java操作mysql的帮助类,相当于C#的SqlHelper 2008-10-12 18:41 Birdshover
犯了错误。。。。
ExecuteReader方法的关闭加到catch里去了,加到finally里就好了  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: