我JSP学得不多,自己写了一个类来连接数据库,JDBC方式的. 我想做一个网站,很多地方需要对数据库进行操作,所以把它做成一个应该比较好一些. 但是我不知道这个类该怎样写才更合适一些. 怎样更省资源,怎样用起来更方便和安全.还有一个问题,我在别的servlet里面要想使用这个类,直接用它一实例化一个对象,然后使用就可以了吗? 但是我试过,一直出问题.想请教一下大家在这里都是怎么做的?package testPackage;
import java.sql.*; public class ConMySQL {

String sDataBase = "jdbc:mysql://localhost/ijseblog?user=root&password=clslist";

Connection con = null;
Statement stmt = null;

private void connect()
{
try
{
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection(sDataBase);
stmt = con.createStatement();
}catch(ClassNotFoundException ex)
{
ex.printStackTrace();
}catch(SQLException ex)
{
System.err.println(ex);
}
}

public ResultSet Query(String sql)
{
ResultSet rs = null;
connect();
try
{
rs = stmt.executeQuery(sql);
}catch(SQLException ex)
{
ex.printStackTrace();
}
return rs;
}

public int Update(String sql)
{
int rt = 0;
connect();
try
{
rt = stmt.executeUpdate(sql);
}catch(SQLException ex)
{
ex.printStackTrace();
}
return rt;
}

public void close()
{
try
{
if(stmt != null)
{
stmt.close();
stmt = null;
}
if(con != null)
{
con.close();
con = null;
}
}catch(SQLException ex)
{
System.err.println(ex);
}
}
}

解决方案 »

  1.   

    给你几点建议:
    1、使用数据库连接池,性能要比你现在不停创建--销毁要高得多
    2、你可以封装一个连接类,里面有基本的获取Connection,释放Connection,执行sql语句,commit等各常用方法。
    3、记住,数据库连接,用完必须释放。而且必须在finally块中释放,否则执行过程中出现异常,连接将永远保持。
      

  2.   

    你可以不学SSH,但要知道他的思想,比如你可以见点RO类,体会下面向对象
      

  3.   

     嗯..我就是想要这么一个类,使每次操作数据库都不用这么麻烦...这个类是我自己瞎写的,而且测试还有问题,我在调用它的时候,实例化了一个对象,在MyEclipse下提示:
    Null pointer access: The variable conData can only be null at this location
      

  4.   

    private void connect()
        {
            try
            {
                Class.forName("com.mysql.jdbc.Driver");
                con = DriverManager.getConnection(sDataBase);
                stmt = con.createStatement();
            }catch(ClassNotFoundException ex)
            {
                ex.printStackTrace();
            }catch(SQLException ex)
            {
                System.err.println(ex);
            }
        }
    红色部分最好放入静态代码块中。只加载一次就好。
    另外你可以把这个类做成单例类或者方法是静态方法,这样就不用频繁的创建不必要的对象了
      

  5.   

    package com.betty.news.common.db;import java.io.InputStream;
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.Properties;import javax.sql.DataSource;import org.apache.commons.dbcp.BasicDataSourceFactory;public class JDBCUtil { private static DataSource dataSource = null; /**
     * 初始化数据库连接资源
     */
    static {
    Properties properties = new Properties();
    InputStream inputStream = JDBCUtil.class.getClassLoader()
    .getResourceAsStream(
    "com\\betty\\news\\common\\db\\dbcpconfig.properties"); try {
    properties.load(inputStream);
    inputStream.close();
    dataSource = BasicDataSourceFactory.createDataSource(properties);
    } catch (Exception e) {
    throw new RuntimeException(e);
    }
    } public static Connection getConnection() throws SQLException {
    return dataSource.getConnection();
    } /**
     * 关闭rs,stmt,conn,释放数据库连接资源
     * 
     * @param rs
     * @param stmt
     * @param conn
     * @throws SQLException
     */
    public static void release(ResultSet rs, Statement stmt, Connection conn)
    throws SQLException {
    try {
    if (rs != null) {
    rs.close();
    }
    } finally {
    try {
    if (stmt != null) {
    stmt.close();
    }
    } finally {
    if (conn != null) {
    conn.close();
    }
    }
    }
    } /**
     * overLoade release
     * 
     * @param stmt
     * @param conn
     * @throws SQLException
     * @throws SQLException
     */
    public static void release(Statement stmt, Connection conn)
    throws SQLException {
    release(null, stmt, conn);
    }

    public static void main(String[] args) throws SQLException {
    System.out.println(getConnection());
    }
    }
      

  6.   

    1.update和query方法是完全可以执行其他(比如删除)sql语句的,因此此处的方法签名不严谨,且有迷惑人的缺点。
    2.这两个方法还是不要捕获异常,向上层抛出,就像小领导那儿出了自己管辖范围之外的事,或是其他自己管不了的大事时,要向上级汇报一样。异常设计中有一点思想就是:当前方法出现了自己无法解决的异常时,就要往上层抛,即:如果当前无法为异常提供解决办法,就不要截住异常。