一、故事梗概(不想看的直接跳到二)

今天在做一个用Session来获取浏览记录的练习,在用for循环输出集合中获取的数据库内容的时候,没有内容输出,debugger后发现集合为null。根据设置,集合为null为数据库链接时抛出异常。折腾一天之后,顺藤摸瓜终于找到的错误所在。

链接数据库的DBHelper类

public class DBHelper {
    private  static final String driver="com.mysql.jdbc.Driver";

    private static final String url="jdbc:mysql://localhost:3306/shop?autoReconnect=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8";
    private static final String user="root";
    private static final String password="123456";
    private static Connection conn=null;
    //静态代码加载驱动
    static {
        try {
            Class.forName(driver);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static Connection getConnection() throws Exception {
        if(conn==null){
            conn= DriverManager.getConnection(url,user,password);
            return conn;
        }
        return conn;
    }

    public static void main(String[] args) {
        try {
            Connection conn=DBHelper.getConnection();
            if(conn!=null){
                System.out.println("数据库链接正常");
            }
            else System.out.println("数据库链接异常 ");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

操作数据放到集合中的Dao类

public class ItemsDao {
    public ArrayList<Items> getAllItems(){
        Connection conn=null;
        PreparedStatement stmt=null;
        ResultSet rs=null;
        ArrayList<Items> list=new ArrayList<Items>();

        try {
            conn= DBHelper.getConnection();
            String sql="SELECT * FROM items;";//sql语句
            stmt=conn.prepareStatement(sql);
            rs=stmt.executeQuery();
            while(rs.next()){
                Items item=new Items();
                item.setId(rs.getInt("id"));
                item.setName(rs.getString("name"));
                item.setCity(rs.getString("city"));
                item.setNumber(rs.getInt("number"));
                item.setPrice(rs.getInt("price"));
                item.setPicture(rs.getString("picture"));
                list.add(item);

            }
            return list;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        finally {
            //释放数据集对象
            if(rs!=null){
                try {
                    rs.close();
                    rs=null;
                } catch (Exception ex) {
                    ex.printStackTrace();
                }

            }
            //释放语句对象
            if(stmt!=null){
                try {
                    stmt.close();
                    stmt=null;
                } catch (Exception e) {
                    e.printStackTrace();
                }

            }
        }
    }
}

debugger之后发现list=null

捕获到异常:java.sql.SQLException: No suitable driver found for jdbc

二、解决方案

java.sql.SQLException: No suitable driver found for jdbc是因为找不到jdbc包引起的,在java的源文件中加入jdbc包即可避免异常

1.下载jar包

下载Mysql JDBC
选择java语言的jdbc包下载下载

2.把jar放入java源文件中

1)打开Finder,选择菜单栏“前往”,选择前往文件夹。

2)在地址栏中输入/library/Java进入文件夹

3)复制jdbc jar包到JavaVirtualMachines/jdk/Contents/Home/jre/lib/ext

3.重新运行,异常消失。