conn=DriverManager.getConnection(url, user, passwd);报nullclassfound解决

本文介绍了一种使用单例模式管理数据库连接的方法,通过检查连接状态避免频繁创建新的连接,同时提供了一个实用的工具类实现数据库操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


1.打印输出conn检查conn是否为空,为空时对其做出判断,new一个connetion,

if (null==conn||conn.isClosed()) {
            conn=DriverManager.getConnection(url, user, passwd);
        }


2.数据库操作太频繁,不要每个数据库操作都new一个connection连接,我的操作是把connection类写成单利模式,并实时的操作不关闭connection,但是,

prepare statement和result set需要关闭,为了保险起见你也可以,在操作数据库的类中new一个全局的connection变量,每次操作传入connection,同时判断是否为空,为空时new一个;

package

import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
public class OracleDBUtil {//单利模式的工具类,可能有所欠缺,也可自己写个
    Connection conn = null;
    private OracleDBUtil (){
    }
    private static OracleDBUtil instance=new OracleDBUtil();
    public static OracleDBUtil getinstance(){
        return instance;
    }
public   Connection getOracleConnection(){
    
    Properties prop = new Properties();
    try {
        prop.load(new FileInputStream("config.properties"));
    } catch (IOException e1) {
        e1.printStackTrace();
    }
    String driver=prop.getProperty("driver");
    String url=prop.getProperty("url");
    String user=prop.getProperty("username");
    String passwd=prop.getProperty("password");
    try {
        if (driver==null) {
            driver=prop.getProperty("driver");
        }
        Class.forName(driver);
        if (null==conn||conn.isClosed()) {
            conn=DriverManager.getConnection(url, user, passwd);
        }
        System.out.println("oracle连接成功");
    } catch (SQLException e) {
        e.printStackTrace();
        System.out.println("sql exception"+e.getMessage());
    }catch (ClassNotFoundException e) {
        e.printStackTrace();
        System.out.println("Driver class not found"+e.getMessage());
    }
    return conn;
}
public   void closeConnection(Connection connection){
     
    if (connection!=null) {
    try {
        if (!connection.isClosed()) {
            connection.close();
            System.out.println("oracle已经断开");
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
}
}
public   void closeConnection(ResultSet st,PreparedStatement pstme){
    try {
        if (st!=null) {
            st.close();
        }
        if (pstme!=null) {
            pstme.close();
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
}
public static void main(String[] args) {
    /*getOracleConnection();
     closeConnection(conn);*/
}
}


以下为调用调用

Connection connconfig=OracleDBUtil.getinstance().getOracleConnection();//new一个

String cardIdkey=new OracleSql().Read(tablename,connconfig);//传入conn

public  String Read(String tablename,Connection conn) throws SQLException{//得到身份证字段
     try {
        String sql=" XXXX   ";
        if (conn==null||conn .isClosed()) {
            conn=OracleDBUtil.getinstance().getOracleConnection();
            pstme = conn.prepareStatement(sql);
        }else {
            pstme = conn.prepareStatement(sql);
            }
            pstme.setString(1,tablename);
            rs=pstme.executeQuery();
            while (rs.next()) {
                cardString= rs.getString(1);
       System.out.println("#######+"+cardString+rs.getString(2)+rs.getString(3)+rs.getString(4));
            
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
    finally{
        OracleDBUtil.getinstance().closeConnection(rs, pstme);
    }

参考附录1-4,选择数据库新建一个表,新建程序可以访问、插入、更新这个表。(注意,附录2-4没有将数据库访问信息直接写在程序中,而是将信息写在同一个工程中的 properties 文件)附录1 JdbcTest . java import java . io .*; import java . sql .*; import java . util . Properties ; import java . util . ArrayList ; public class JdbcTest { private Properties props ; private String url ; private String user ; private String passwd ; public JdbcTest (){ testJdbc (); try { jbInit (); catch ( Exception ex ){ ex . printStackTrace (); public static void main ( String [] args ){ JdbcTest jdbctest = new JdbcTest (); public void testJdbc (){ try { props = new Properties (); props . load ( new FilelnputStream (" jdbc . properties ")); url = props . getProperty (" url "); user = props . getProperty (" user "); passwd = props . getProperty (" password "); Class . forName ( props . getProperty (" driver ")); Connection conn = DriverManager . getConnection ( url , user , passwd ); Statement stmt = conn . createStatement (); ResultSet result = stmt . executeQuery (" SELECT * FROM authors "); while ( result . next ()){ System . out . println ("\ n System . out . print ( result . getString (" au _ fname ")+"( t "); System . out . print ( result . getString (" city "')+"\( t "); System . out . print ( result . getString (" address ")+"( t "); --'"'); System . out . println (); stmt . executeUpdate (" update authors set state =' cn ' where au _ id ='172-32-1176';''); stmt . executeUpdate (" insert into authors ( au _ id , au _ Iname , au _ fname , contract ) values ('123-45-6789',' hello ',' good ',0);''); stmt . executeUpdate (" insert into authors ( au _ id , au _ Iname , au _ fname , contract ) values ('000-00-0000',' hello ',' good ',0);''); stmt . executeUpdate (" delete from authors where au _ id ='123-45-6789';,'; result = stmt . executeQuery (" SELECT * FROM authors au _ id ='000-00-0000'""); if ( result . next ()){ System . out . printin ("\ n - System . out . print ( result . getString (" au _ fname ")+"( t "); System . out . print ( result . getString (" city ")+"\( t "); System . out . print ( result . getString (" address ")+"( t "); System . out . printin (); stmt . close (); conn . close (); where ---"); catch ( Exception e ){ e . printStackTrace (); private void jbInit () throws Exception {
06-07
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值