JDBC—常用类

详解各个对象

DriverManager

驱动管理对象

功能:

1.注册驱动:

静态方法:static void registerDriver(Driver driver) 注册与给定的驱动程序 DriverManager 。

*使用:Class.forName("com.mysql.jdbc.Driver");

//Driver中的一个静态代码块
static {
        try {
            java.sql.DriverManager.registerDriver(new Driver());
        } catch (SQLException E) {
            throw new RuntimeException("Can't register driver!");
        }
    }

2.获取数据库连接:

静态方法: static Connection getConnection (String url, String user, String password) 尝试建立与给定数据库URL的连接。

参数:url:指定连接的路径;语法:jdbc:mysql://IP地址:端口号/数据库名称;

user:用户名; password:密码;

Connection

数据库连接对象

功能:

1.获取执行sql对象:

Statement createStatement() 创建一个 Statement对象,用于将SQL语句发送到数据库。
PreparedStatement prepareStatement(String sql) 
创建一个 PreparedStatement对象,用于将参数化的SQL语句发送到数据库。

2.管理事务:

1.开启事务:setAutoCommit (boolean autoCommit) ;将参数设置为false,即开启事务;

2.提交事务:commit();

3.回滚事务:rollback();

Statement

执行sql的对象(静态)

1.执行sql: 1.boolean excute(String sql):可以执行的任意sql;

2.int excuteUpdate(String sql):执行DML、DCL语句;

返回值:受到影响的行数(可以根据该值判断语句是否执行成功)

3.ResultSet excuteQuery(String sql):执行DCL语句;

返回结果集对象;

练习:

public static void main(String[] args)  {
    Statement stmt  = null;
    Connection  conn = null;
    try {
        Class.forName("com.mysql.jdbc.Driver");
        String  sql  = "insert into acount values(null,'wang',1500) ";
        //String  sql2 = "update acount set balance = 1000 where id=3";
        conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/qinsujie", "root", "qinsujie123");
        stmt= conn.createStatement();
        int count  = stmt.executeUpdate(sql);
        System.out.println(count);
        if(count>0){
            System.out.println("添加成功");
        }else{
            System.out.println("添加失败");
        }
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (SQLException e) {
        e.printStackTrace();
    }finally {
        if(stmt!=null){
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(conn!=null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
       /* stmt.close();
        conn.close();*/
    }

ResultSet

结果集对象,封装查询结果

1.next():游标向下移动一行,判断当前行是否是最后一行末尾(返回false时没有数据);

2.getXxx(参数):获取数据;

Xxx表示数据类型;

参数:1.int :代表列的编号(从1开始);2. String : 代表列的名称;

注意:使用步骤:1.游标向下移动一行;2.判断是否有数据;3.获取数据

while(res.next()){
    int id=res.getInt(1);
    String name  = res.getString(2);
    String balance = res.getString(3);
    System.out.println("id="+id+"  name="+name+"  balance="+balance);
}

//抽取JDBC工具类

目的:简化书写;

配置jdbc.properties文件;
url=jdbc:mysql://127.0.0.1:3306/practice
user=root
password=qinsujie123
driver=com.mysql.jdbc.Driver
public class JDBCUtils {
    private static String url;
    private static String user;
    private static String password;
    private static String driver;
    /**
     * 文件只读取一次即可拿到这些值
     */
    static{

        try {
            Properties pro = new Properties();
            //获取src路径下的资源方式
            ClassLoader  classLoader= JDBCUtils.class.getClassLoader();
            URL resourse = classLoader.getResource("jdbc.properties");
            String path = resourse.getPath();
            //加载文件
           // pro.load(new FileReader("learn.DataBase\JDBC\src\jdbc.properties"));
            pro.load(new FileReader(path));
            url=pro.getProperty("url");
            user=pro.getProperty("user");
            password=pro.getProperty("password");
            driver = pro.getProperty("driver");
            try {
                Class.forName(driver);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取连接
     * 不传递参数,但是要求通用性
     * 解决:配置文件
     * @return 返回连接对象
     */
    public static Connection  getConnection(){
        try {
            return DriverManager.getConnection(url,user,password);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 释放资源
     * @param conn
     * @param stmt
     * @param res
     */
    public static void close(Connection conn , Statement stmt , ResultSet res){
        if(res!=null){
            try {
                res.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();
            }
        }
    }
    public static void close(Connection conn , Statement stmt ){
            if (stmt!=null){
                try {
                    stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(conn!=null){
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
    }
}

PreparedStatement

表示预编译的sql对象:参数使用?占位符替代。

1.SQL注入问题:在拼接sql时,有sql特殊的关键字参与拼接,有安全隐患;

2.解决SQL注入问题:使用PreparedStatement对象解决

原文地址:https://www.cnblogs.com/susexuexi011/p/14353782.html