1-JDBC步骤及其中可以考究的问题

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
 * jdbc操作分为9步
 * @author hadoop
 * <p>
 *      说明:java提供了一套操作数据库的接口 具体实现由数据库厂商提供
 *        开发人员不用关注开发商的具体实现 只需要将具体数据库的驱动加载注册即可
 * </p>
 */
public class JDBCReview {
    public static void main(String[] args) {
        //0:声明jdbc相关变量
        Connection connection =null; //sql
        PreparedStatement preparedStatement = null;//sql
        ResultSet resultSet = null;  //sql
        try {
            //1:加载驱动并注册驱动到DriverManager
            Class.forName("com.mysql.jdbc.Driver"); 
            /*
             * java中class.forName()和classLoader都可用来对类进行加载。
         class.forName()前者除了将类的.class文件加载到jvm中之外,还会对类进行解释,执行类中的static块。
         classLoader只是是将.class文件加载到jvm中,不会执行static中的内容,只有在newInstance才会去执行static块。
         forName(name, initialize, loader)带参函数也可控制是否加载static块。同理,只有newInstatnce时才会执行static块。

         Class.forName(”com.mysql.jdbc.Driver“) 之所以说是 加载并注册 Driver ,是因为在mysql的实现类中将java接口进行 ”绑定“。 
            static {  
              try {  
                      java.sql.DriverManager.registerDriver(new Driver()); //1  
                 } catch (SQLException E) {  
                 throw new RuntimeException("Can't register driver!");  
                 }   
            }
*/
            //2:获取连接
            connection=DriverManager.getConnection(
                        "jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf8",
                        "root",
                        "root");
            //3:准备sql(防注入)
            String sql = "select * from user where id = ?";
            //4:生成预处理的准备对象 (方法名和返回对象的名称)
            preparedStatement = connection.prepareStatement(sql);
            //5:设置参数 parameterIndex the first parameter is 1, the second is 2
            preparedStatement.setInt(1, 10);
            //6:执行操作,接收结果
            resultSet=preparedStatement.executeQuery();
            //7:处理结果 Before start of resultset
            while(resultSet.next()) {
                // resultSetIndex the first  is 1, the second is 2
                System.out.println(resultSet.getInt(1)+" "+resultSet.getString(2));
                System.out.println(resultSet.getDate(3)+" "+resultSet.getString(4));
                System.out.println(resultSet.getString(5));
                //根据字段名称
                System.out.println(resultSet.getInt("id")+" "+resultSet.getString("username"));
                System.out.println(resultSet.getDate("birthday")+" "+resultSet.getString("sex"));
                System.out.println(resultSet.getString("address"));
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            //TODO 8:从低到高关闭资源流 先关闭connection 会出现什么样的问题?
            try {
                //关闭顺序不对可能存在空指针异常
                resultSet.close();
                preparedStatement.close();
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

 

 

posted @ 2018-03-15 19:24  拉粑粑小魔仙  阅读(168)  评论(0)    收藏  举报