A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 冯超 高级黑马   /  2013-3-15 22:09  /  1457 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 冯超 于 2013-3-16 15:48 编辑
  1. package jdbc;

  2. import java.sql.Connection;
  3. import java.sql.DriverManager;
  4. import java.sql.ResultSet;
  5. import java.sql.SQLException;
  6. import java.sql.Statement;

  7. //工具类
  8. public final class JdbcUtils {
  9.         private static String url = "jdbc:mysql://localhost:3306/jdbc";
  10.         private static String user = "root";
  11.         private static String password = "5512013025";
  12.         private JdbcUtils() {

  13.         }
  14.         static {
  15.                 //注册驱动
  16.                 try {
  17.                         Class.forName("com.mysql.jdbc.Driver");
  18.                 } catch (ClassNotFoundException e) {
  19.                         // TODO Auto-generated catch block
  20.                         e.printStackTrace();
  21.                 }
  22.         }
  23.         public static Connection getConnection() throws SQLException {
  24.                 return DriverManager.getConnection(url,user,password);
  25.         }
  26.         public static void free(ResultSet rs, Statement st, Connection conn) {
  27.                 try {
  28.                         if(rs != null)
  29.                                 rs.close();
  30.                 } catch (SQLException e) {
  31.                         e.printStackTrace();
  32.                 } finally {
  33.                         try {
  34.                                 if(st != null)
  35.                                         st.close();
  36.                         } catch (SQLException e) {
  37.                                 e.printStackTrace();
  38.                         } finally {
  39.                                 if(conn != null) {
  40.                                         try {
  41.                                                 conn.close();
  42.                                         } catch (SQLException e) {
  43.                                                 e.printStackTrace();
  44.                                         }
  45.                                 }
  46.                         }
  47.                 }
  48.         }
  49. }
复制代码
  1. package jdbc;

  2. import java.sql.Connection;
  3. import java.sql.DriverManager;
  4. import java.sql.ResultSet;
  5. import java.sql.SQLException;
  6. import java.sql.Statement;

  7. public class Base {

  8.         /**
  9.          * @param args
  10.          * @throws ClassNotFoundException
  11.          * @throws SQLException
  12.          */
  13.         public static void main(String[] args) throws SQLException, ClassNotFoundException {
  14.                 // TODO Auto-generated method stub
  15.                 //test();
  16.                 template();
  17.         }
  18.         //正规的jdbc码 模板如下
  19.         @SuppressWarnings("null")
  20.         static void template() throws SQLException
  21.         {
  22.                 Connection conn = null;
  23.                 Statement st = null;
  24.                 ResultSet rs = null;
  25.                 try {
  26. //                        2.建立连接
  27.                         JdbcUtils.getConnection();
  28.                         //3.创建语句
  29.                     st = conn.createStatement();
  30.                         //4.执行语句
  31.                     rs = st.executeQuery("select * from user");
  32.                         //5.处理结果
  33.                         while(rs.next()) {
  34.                                 System.out.println(rs.getObject(1) + "\t" +
  35.                                                                 rs.getObject(2) +
  36.                                                                 rs.getObject(3) + "\t" +
  37.                                                                 rs.getObject(4) + "\t");
  38.                                 
  39.                         }
  40.                 } finally {
  41.                         JdbcUtils.free(rs, st, conn);
  42.                 }
  43.         }
复制代码
为什么出现空指针异常
当我把他们写在一个函数的时候
  1. public static void test() throws SQLException, ClassNotFoundException {
  2.                 //1.注册驱动
  3.                 //DriverManager.registerDriver(new com.mysql.jdbc.Driver());//方法一
  4.                 //System.setProperty("jdbc.drivers","com.mysql.jdbc.Driver");//方法二
  5.                 Class.forName("com.mysql.jdbc.Driver"); //方法三 最好
  6.                
  7.                 //2.建立连接
  8.                 String url = "jdbc:mysql://localhost:3306/jdbc";
  9.                 String user = "root";
  10.                 String password = "5512013025";
  11.                 Connection conn = DriverManager.getConnection(url,user,password);
  12.                
  13.                 //3.创建语句
  14.                 Statement st = conn.createStatement();
  15.                
  16.                 //4.执行语句
  17.                 ResultSet rs = st.executeQuery("select * from user");
  18.                
  19.                 //5.处理结果
  20.                 while(rs.next()) {
  21.                         System.out.println(rs.getObject(1) + "\t" +
  22.                                                         rs.getObject(2) +
  23.                                                         rs.getObject(3) + "\t" +
  24.                                                         rs.getObject(4) + "\t");
  25.                         
  26.                 }
  27.                 System.out.println("aaaaaaaaabbbbbbbbbbb");
  28.                 //释放资源
  29.                 rs.close();
  30.                 st.close();
  31.                 conn.close();
  32.         }
复制代码
就没问题,不知道为什么?

点评

如果问题未解决,请继续追问回复者,如果问题已经解决,请将分类改为“已解决”,谢谢  发表于 2013-3-24 07:18
为什么不写一个jdbc的工具类,那有方便开发的使用和框架模式  发表于 2013-3-15 23:01

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

3 个回复

倒序浏览
为什么英文都转化成我亲切的汉语了
回复 使用道具 举报
本帖最后由 陈腾跃_2013 于 2013-3-15 23:03 编辑

我是还没学到JDBC,不过看你的代码:

“当我把他们写在一个函数的时候”     的代码有:“Connection conn = DriverManager.getConnection(url,user,password);”

但是上面两块代码第二块第30行:“JdbcUtils.getConnection();”
其中,getConnection();  是你自定义的一个方法,方法体中有DriverManager.getConnection(url,user,password);
根据这个判断30行应该是conn = JdbcUtils.getConnection();  吧,你没有给conn赋值。

不知道说的对不对,有学到JDBC的朋友们欢迎拍砖斧正

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1 加油~

查看全部评分

回复 使用道具 举报
en`发帖了 我发现了这个问题
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马