JDBC整理

1. 常见命令

2. 获取连接的方式

五种方式(四+1)。


public class ConnectionTest {
    //方式一
    @Test
    public void testConnection_01() throws SQLException {

        Driver driver=new com.mysql.cj.jdbc.Driver();
        String url="jdbc:mysql://localhost:3306/test";//主协议:子协议://端口号/数据库名
        Properties info=new Properties();//将用户名密码封装于此
        info.setProperty("user","root");
        info.setProperty("password","111111");
        Connection conn= driver.connect(url,info);

        System.out.println(conn);
    }
    //方式二:对方式一的迭代   如下中 不出现第三方api 使得程序具有更好的可移植性
    @Test
    public void testConnection_02() throws ClassNotFoundException, InstantiationException, IllegalAccessException, SQLException {
        //1.获取Driver实现类的对象:使用反射
        Class clazz= Class.forName("com.mysql.cj.jdbc.Driver");
        Driver driver= (Driver) clazz.newInstance();

        //提供要连接的数据库
        String url="jdbc:mysql://localhost:3306/test";//主协议:子协议://端口号/数据库名
        Properties info=new Properties();//将用户名密码封装于此
        info.setProperty("user","root");
        info.setProperty("password","111111");

        //获取链接
        Connection conn =driver.connect(url,info);
        System.out.println(conn);

    }

    //方式三:使用DriverManager替换Driver
    @Test
    public void testConnection_03() throws ClassNotFoundException, InstantiationException, IllegalAccessException, SQLException {
        //1.获取Driver实现类的对象:使用反射
        Class clazz= Class.forName("com.mysql.cj.jdbc.Driver");
        Driver driver= (Driver) clazz.newInstance();

        //2.提供三个连接的信息
        String url="jdbc:mysql://localhost:3306/test";//主协议:子协议://端口号/数据库名
        String user="root";
        String password="111111";

        //注册驱动
        DriverManager.registerDriver(driver);

        //获取链接
        Connection conn =DriverManager.getConnection(url,user,password);
        System.out.println(conn);
    }

    //方式四:三的基础上的优化
    @Test
    public void testConnection_04() throws Exception {

        //1.提供三个连接的信息
        String url="jdbc:mysql://localhost:3306/test";//主协议:子协议://端口号/数据库名
        String user="root";
        String password="111111";

        //2.加载驱动  在Driver 底层的静态代码块中存在于下文注释信息功能相同的静态代码块
        Class.forName("com.mysql.cj.jdbc.Driver");
//        Driver driver= (Driver) clazz.newInstance();
//        //注册驱动
//        DriverManager.registerDriver(driver);

        //3.获取链接
        Connection conn =DriverManager.getConnection(url,user,password);
        System.out.println(conn);
    }

    //方式四Pro:四的基础上的改变
    @Test
    public void testConnection_041() throws Exception {

        //1.提供三个连接的信息
        String url="jdbc:mysql://localhost:3306/test";//主协议:子协议://端口号/数据库名
        String user="root";
        String password="111111";

        //2.加载驱动  在Driver 底层的静态代码块中存在于下文注释信息功能相同的静态代码块
       // Class.forName("com.mysql.cj.jdbc.Driver");  jar包中已经有了,但是不建议注释 因为只有mysql中可以注释掉
//        Driver driver= (Driver) clazz.newInstance();
//        //注册驱动
//        DriverManager.registerDriver(driver);

        //3.获取链接
        Connection conn =DriverManager.getConnection(url,user,password);
        System.out.println(conn);
    }

     //五 最终版 将数据库连接需要的四个基本信息声明在配置文件中,通过读取配置文件的方式,获取连接。
    @Test
    /*
    好处:
    1.实现了数据和代码的分离 (实现了解耦)
    2.如果需要修改配置文件信息 这样可以避免重新打包程序代码
     */
    public void testConnection_05() throws Exception {

        //1.读取配置文件中的四个基本信息
        InputStream is=ConnectionTest.class.getClassLoader().getResourceAsStream("jdbc.properties");//获取类的加载器

        Properties pros=new Properties();

        pros.load(is);
        String user= pros.getProperty("user");
        String password= pros.getProperty("password");
        String url= pros.getProperty("url");
        String driver= pros.getProperty("driver");

        Class.forName(driver);
        Connection conn=DriverManager.getConnection(url,user,password);
        System.out.println(conn);

    }


}

3. 使用PreparedStatement实现CRUD操作

3.1 插入

public class prepareedStatement {
    /*
    增删改(无返回) 查(有返回)操作
     */

    //向表添加一条记录
    @Test
    public void testInsert(){
        Connection conn = null;
        PreparedStatement ps = null;
       try {
           //1.读取配置文件中的四个基本信息
           //获取类的加载器
           InputStream is=ConnectionTest.class.getClassLoader().getResourceAsStream("jdbc.properties");

           Properties pros=new Properties();

           pros.load(is);
           String user= pros.getProperty("user");
           String password= pros.getProperty("password");
           String url= pros.getProperty("url");
           String driver= pros.getProperty("driver");

           Class.forName(driver);
            conn= DriverManager.getConnection(url,user,password);

           //预编译sql语句
           String sql="insert into customers(name,email,birth)values(?,?,?)";//?占位符
            ps=conn.prepareStatement(sql);
           //填充占位符
           ps.setString(1,"哪吒");//与数据库交互的索引从一开始。
           ps.setString(2,"nezha@email.com");
           SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
           java.util.Date date=sdf.parse("1000-1-1");
           ps.setDate(3,new Date(date.getTime()));//date.getTime()将util下的date转换为sql下的date(共同点 毫秒数相同)

           //执行操作
           ps.execute();
       }catch (Exception e){
           e.printStackTrace();
       }finally {

       }
        //资源的关闭
        try {
            if (ps!=null)
            ps.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            if (conn!=null)
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        System.out.println("插入成功!");
    }
}

上一篇:MySQL_Ch8


下一篇:安卓 网络编程