1. JDBC编程


1.1.1. JDBC编程六步

第一步:注册驱动(作用:告诉Java程序,即将要连接的是哪个品牌数据库)
第二步:获取连接(表示JVM的进程和数据库进程之间的通道打开了,这属于进程之间的通信,重量级的,使用完毕之后一定要关闭连接)
第三步:获取数据库操作对象(专门执行sql语句的对象)
第四步:执行SQL语句(DML、DQL...)
第五步:处理查询结果(只有当第四步执行的是select语句的时候,才有这第五步处理查询结果集)
第六步:释放资源(使用完资源后一定要关闭资源)

1.1.2. 编写测试类

import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.Statement;

public class JDBCTest01 {
    public static void main(String[] args) {
        Statement stmt = null;
        Connection conn = null;
        try {
            // 第一步:注册驱动(作用:告诉Java程序,即将要连接的是哪个品牌数据库)  
            Driver driver = new com.mysql.jdbc.Driver();
            DriverManager.registerDriver(driver);
            // 第二步:获取连接(表示JVM的进程和数据库进程之间的通道打开了,这属于进程之间的通信,重量级的,使用完毕之后一定要关闭连接)  
            String url = "jdbc:mysql://127.0.0.1:3306/node";
            String user = "root";
            String password = "333";
            conn = DriverManager.getConnection(url, user, password);
            System.out.println("数据库连接对象 = " + conn);
            // 第三步:获取数据库操作对象(专门执行sql语句的对象)  
            stmt = conn.createStatement();
            // 第四步:执行SQL语句(DML、DQL...)   
            // executeUpdate:专门执行DML语句的(insert delte update)
            // 返回值是“影响数据库中的记录条数” 

            // 增
            String sql = "insert into dept(deptno, dname, loc) values(50,'人事部','北京'";
            int count = stmt.executeUpdate(sql);
            System.out.println(count == 1 ? "保存成功" : "保存失败");

            // 删
            // String sql = "delete from dept where deptno = 40";
            // int count = stmt.executeUpdate(sql);
            // System.out.println(count == 1 ? "删除成功" : "删除失败");

            // 改
            // String sql = "update dept set dname = '销售部', loc = '天津' where deptno = 20";
            // int count = stmt.executeUpdate(sql);
            // System.out.println(count == 1 ? "修改成功" : "修改失败");

            // 第五步:处理查询结果(只有当第四步执行的是select语句的时候,才有这第五步处理查询结果集)  
        } catch(SQLException e) {
            e.printStackTrace();
        } finally {
            // 第六步:释放资源(使用完资源后一定要关闭资源)
            // 为了保证资源一定释放,在finally语句中关闭资源
            // 并且要遵循从小到大依次关闭
            // 分别对其try catch
            if (conn != null) {
                try {
                    conn.close()
                } catch(SQLException e) {
                    e.printStackTrace();
                }
            }
            if (conn != null) {
                try {
                    conn.close()
                } catch(SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

执行:

javac *.java
java JDBCTest01

报错:

chenchangqingdeMacBook-Pro-2:jdbc chenchangqing$ java JDBCTest01
Exception in thread "main" java.lang.UnsupportedClassVersionError: com/mysql/jdbc/Driver : Unsupported major.minor version 52.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at JDBCTest01.main(JDBCTest01.java:10)

配置的驱动使用的是JDK1.8,但是本地编译代码的JDK是1.7,升级本地JDK为1.8,问题解决。

1.1.3. 类加载的方式注册驱动

import java.sql.*;
import java.util.*;
public class JDBCTest02 {
    public static void main(String[] args) {
        try {
            // 注册驱动的第一种方式
            // DriverManager.registerDriver(new com.mysql.jdbc.Driver());

            // 注册驱动的第二种方式:常用的
            Class.forName("com.mysql.jdbc.Driver")
        } catch(SQLException e) {
            e.printStackTrace();
        } catch(ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

1.1.4. 从属性资源文件中读取连接数据库信息

创建jdbc.properties:

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mysql
user=root
password=123456
import java.sql.*;
import java.util.*;

public class JDBCTest03 {
    public static void main(String[] args) {
        // 使用资源绑定器绑定属性配置文件
        ResourceBundle bundle = ResourceBundle.getBundle("jdbc");
        String driver = bundle.getString("driver");
        String url = bundle.getString("url");
        String user = bundle.getString("user");
        String user = bundle.getString("password");

        Connection conn = null;
        Statement stmt = null;
        try {
            // 1、注册驱动
            Class.forName(driver);
            // 2、获取连接
            conn = DriverManager.getConnection(url, user, password);
            // 3、获取数据库操作对象
            stmt = conn.createStatement();
            // 4、执行SQL语句
            String sql = "update dept set dname = '销售部', loc = '天津' where deptno = 20";
            int count = stmt.executeUpdate(sql);
            System.out.println(count == 1 ? "修改成功" : "修改失败");
        } catch(SQLException e) {
            e.printStackTrace();
        } catch(ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            // 5、释放资源
        }
    }
}

1.1.5. 处理查询结果集

import java.sql.*;
import java.util.*;

public class JDBCTest04 {
    public static void main(String[] args) {
        // 使用资源绑定器绑定属性配置文件
        ResourceBundle bundle = ResourceBundle.getBundle("jdbc");
        String driver = bundle.getString("driver");
        String url = bundle.getString("url");
        String user = bundle.getString("user");
        String user = bundle.getString("password");

        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        try {
            // 1、注册驱动
            Class.forName(driver);
            // 2、获取连接
            conn = DriverManager.getConnection(url, user, password);
            // 3、获取数据库操作对象
            stmt = conn.createStatement();
            // 4、执行SQL语句
            String sql = "select empno, ename, sal from emp";
            rs = stmt.executeQuery(sql);
            // 5、处理结果集
            while(rs.next()) {

                String empno = rs.getString("empno");
                String ename = rs.getString("ename");
                String sal = rs.getString("sal");

                // 第二种方式取值
                // String empno = rs.getString(1);
                // String ename = rs.getString(2);
                // String sal = rs.getString(3);

                System.out.println(empno + "," + ename + "," + sal);
            }
        } catch(SQLException e) {
            e.printStackTrace();
        } catch(ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            // 6、释放资源
            if (rs != null) {
                try {
                    rs.close()
                }catch(SQLException e) {
                    e.printStackTrace();
                }
            }
            if (stmt != null) {
                try {
                    stmt.close()
                } catch(SQLException e) {
                    e.printStackTrace();
                }
            }
            if (conn != null) {
                try {
                    conn.close()
                } catch(SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

results matching ""

    No results matching ""