JDBC---用Java操作数据库

什么是JDBC

Java database connectivity——Java数据库链接,Java语言操作数据库。
数据库驱动----数据库厂商提供的可以和Java链接的接口。
jdbc是官方定义的一套操作所有关系型数据库的规则,即接口,各个数据库厂商实现接口,
提供数据库驱动jar包,通过JDBC编程,真正执行代码的是驱动的jar包中的程序。

JDBC快速入门

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
/**
 * JDBC快速入门
 *
 */
public class JDBCDemo1 {
    public static void main(String[] args) throws Exception {
        //1.导入jar包---mysql-connector-java-8.0.13
        /*
            创建目录 方便管理 第三方库
            新建目录 转为 库
            将jar包复制到项目的目录文件下
         */
        //2.注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        //3.获取数据库连接对象
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db3", "root", "15367485979");
        //4.定义一个SQL语句
        String sql = "update mytable set score = 500 where ages =5";
        //5.执行SQL对象 statement
        Statement statement = conn.createStatement();
        //6执行sql
        int count = statement.executeUpdate(sql);
        //7.处理结果
        System.out.println(count);
        //8.释放资源
        statement.close();
        conn.close();
        /*
        如果报错和时区有关的错误时,可以参考下面的博客,亲测有效
        https://blog.csdn.net/manongxf/article/details/87615026
         */
    }
}

JDBC 接口

**DriverManager;		驱动管理对象**
功能:
 注册驱动---告诉程序哪个数据库驱动jar,MySQL5之后的jar包可以省略注册驱动程序。
	Class.forName("com.mysql.jdbc.Driver");
	通过查看源码发现在com.mysql.jdbc.Driver类中存在静态代码块
	---注册驱动部分代码;	
 获取数据库连接
	Connection conn=DriverManager.getConnection
	("jdbc:mysql://localhost:3306/db3", "root", "15367485979");
	"jdbc:mysql://localhost:3306/db3"指定链接数据。
-------------------------------------------------------------------------------------------------------------
**Connection;		数据库链接对象**
功能:
 	获取执行SQL的对象
 		statement createstatement()
 		 preparedstatement preparestatement(string sql)
 	管理事务
 		开启事务 setautocommit(boolean autocommit)参数为false 开启事务
 		提交事务 commit()
 		回滚事务 rollback()
-----------------------------------------------------------------------------------------------------------
**Statement;		执行SQL对象**
		int executeUpdate(string sql)执行DML(insert update delete)语句DDL(create alter drop)语句,返回值指影响的行数,即数据库表中被修改的数据记录条数。
		Boolean execute(string sql)可以执行任意的SQL了解
		resultset executequery(string sql)执行DQL(select)语句
------------------------------------------------------------------------------------------------------
**ResultSet;		结果集对象**
	Boolean next()游标向下移动一行
	get数据类型:获取数据(参数),参数为列名
// ResultSet rset=null;
rset= stat.executeQuery(sql2);
for (int i=0;i<5;i++){
//处理结果
//让光标向下移动一行
rset.next();
//获取数据
int value = rset.getInt(1);
int value2 = rset.getInt(2);
System.out.println(value+","+value2);}

利用返回值和while来进行遍历

// ResultSet rset=null;
rset= stat.executeQuery(sql2);
 boolean v=rset.next();
 while(v){
  //处理结果
  //获取数据
  int value = rset.getInt(1);
  int value2 = rset.getInt(2);
  System.out.println(value+","+value2);
  //让光标向下移动一行
     v =  rset.next();
 }
---------------------------------------------------------------------------------------------------------
	
**PreparedStatement;	执行SQL的对象**
  public static void main(String[] args) {
        Connection conn=null;
        Statement stat=null;
            //注册驱动
        try {
            Class.forName("com.mysql.jdbc.Driver");
            //创建链接
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db3", "root", "15367485979");
            //定义SQL
            String sql = "insert into mytable value(5,6)";
            //执行SQL
            stat = conn.createStatement();
            int s = stat.executeUpdate(sql);
            boolean ss = stat.execute(sql);
            if(s>0){
                System.out.println("数据执行成功");
            } else{
                System.out.println("数据执行失败");
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            //避免空指针异常
            if (stat!=null){
                //关闭资源
                try {
                    stat.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (conn!=null){
                //关闭资源
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

编写JDBC工具类

目的:简化书写
分析:
	1.注册驱动抽取
	2.抽取一个方法获取链接对象
	3.释放资源

工具类的实现

/**
 * JDBC工具类
 * 使用配置文件传递参数
 */
public class JDBCUtils {
    private static String url;
    private static String user;
    private static String password;
    private static String driver;
    static {//静态代码块 能够使得在类加载的时候就获取数据
        //创建集合类
        Properties pro = null;
        try {
            pro = new Properties();//集合类 基于哈希表
            //加载文件
            pro.load(new FileReader("utils\\jabc.properties"));
            //获取数据 赋值
            url = pro.getProperty("url");
            user = pro.getProperty("user");
            password = pro.getProperty("password");
            driver = pro.getProperty("driver");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    /**
     * 获取链接对象
     * @return
     */
    public static Connection getConnection(){
        try {
            Class.forName(driver);
            return DriverManager.getConnection(url, user, password);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 释放资源
     */
    public static void close(ResultSet rs,Statement stmt, Connection conn){
        if(stmt!=null){
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(conn!=null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (rs!=null){
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}
上一篇:java中异常直接的继承关系


下一篇:基于JAVA的设计模式之外观模式