JDBC预习

概念

JDBC(Java DataBase Connectivity)是Java和数据库之间的一个桥梁,是一个规范而不是一个实现,能够执行SQL语句。它由一组用Java语言编写的类和接口组成。通过JDBC,Java代码能够访问数据库读写数据。

使用步骤

1.导入专用的jar包(不同的数据库需要的jar包不同)
2.获取和数据库的连接(用户名、密码)
3.创建Statement或者PreparedStatement接口,执行SQL语句
4.处理和显示结果

idea导入jar包

jar包的下载官网地址:https://dev.mysql.com/downloads/connector/j/,我们选择Platform Independent,如下图:
在这里插入图片描述
点击下载,下载好之后,再对其进行解压,解压后会发现里面有一个jar包:
在这里插入图片描述

首先创建一个项目 我们先命名为stage:
在这里插入图片描述
在没有导入jar包的情况下External Libraries应该只有jdk,所以我们此时通过以下步骤导入jar包:
在这里插入图片描述
点击Project Structure在这里插入图片描述
点击‘+’号,在电脑中选择jar包的路径,进行导入。

获取与数据库的连接

已知信息:
数据库服务端的IP地址:
127.0.0.1 (这是本机,如果连接其他电脑上的数据库,需填写相应的IP地址)
数据库的端口号: 3306 (mysql专用端口号)
数据库名称 data(根据你自己数据库中的名称填写)
编码方式 UTF-8
账号 root
密码 root(填写自己设置的密码)

数据库连接专用方法

import java.sql.*;

public class start {
    /**
     * 取得数据库的连接
     * @return 一个数据库的连接
     */
    public static Connection getConnection(){
        Connection con = null;
        try {
            //初始化驱动类com.mysql.jdbc.Driver
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/exam?characterEncoding=UTF-8","root", "root");
            //该类就在 mysql-connector-java-5.0.8-bin.jar中,如果忘记了第一个步骤的导包,就会抛出ClassNotFoundException
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }catch (SQLException e) {
            e.printStackTrace();
        }
        return con;
    }
}

执行SQL语句

使用Statement接口

Statement接口创建之后,可以执行SQL语句,完成对数据库的增删改查。其中 ,增删改只需要改变SQL语句的内容就能完成,然而查询略显复杂。在Statement中使用字符串拼接的方式,该方式存在句法复杂,容易犯错等缺点。
主要格式如下:

int executeUpdate(String sql) //executeQuery 用于发送 select 语句
用于发送 DML 语句,增删改的操作,insertupdate delete

参数:SQL 语句

返回值:返回对数据库影响的行数

举一个实例:

void executeUpdate(String sql){
	Statement s = conn.createStatement();
	// 准备sql语句
	// 注意: 字符串要用单引号'
	String sql = "insert into t_courses values(null,"+"'数学')";
	//在statement中使用字符串拼接的方式,这种方式存在诸多问题
	s.execute(sql);
	System.out.println("执行插入语句成功");
}

使用PreparedStatement接口

与 Statement一样,PreparedStatement也是用来执行sql语句的与创建Statement不同的是,需要根据sql语句创建PreparedStatement。除此之外,还能够通过设置参数,指定相应的值,而不是Statement那样使用字符串拼接。这种方式除了避免了statement拼接字符串的繁琐之外,还能够提高性能。

举一个给数据库添加课程的小例子:
(关闭资源的两个方法 DbUtil.close(pstmt); DbUtil.close(conn)下文会介绍)

	public void addCourse(String courseName){
		String sql = "insert into t_course(course_name) values(?)";  
 //该语句为每个 IN 参数保留一个问号(“?”)作为占位符
		Connection conn = null;				//和数据库取得连接
		PreparedStatement pstmt = null;		//创建statement
		try{
			conn = DbUtil.getConnection();
			pstmt = (PreparedStatement) conn.prepareStatement(sql);
			pstmt.setString(1, courseName); //给占位符赋值
			pstmt.executeUpdate();			//执行
		}catch(SQLException e){
			e.printStackTrace();
		}
		finally{
			DbUtil.close(pstmt);
			DbUtil.close(conn);	
		}
	}

处理和显示结果

基本语法:

ResultSet rs = s.executeQuery(sql);

利用While(ResultSet.next()){…}循环可以将集合ResultSet中的结果遍历出来。ResultSet.getXX(); 这里的get方法的括号里面填属性值。

释放资源

在JDBC编码的过程中我们创建了Connection、ResultSet等资源,这些资源在使用完毕之后是一定要进行关闭的。释放原则:先开的后关,后开的先关:ResultSet、Statement、Connection。

基本语法:

rs.close();
stmt.close();
con.close();

这三个关闭操作的方法也写到一个类中便于调用:

import java.sql.*;

public class close{
    public static void close(PreparedStatement pstmt){
        if(pstmt != null){						//避免出现空指针异常
            try{
                pstmt.close();
            }catch(SQLException e){
                e.printStackTrace();
            }

        }
    }

    public static void close(Connection conn){
        if(conn != null){
            try {
                conn.close();
            } catch (SQLException e) {
                // TODO: handle exception
                e.printStackTrace();
            }
        }
    }

    public static void close(ResultSet rs){
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                // TODO: handle exception
                e.printStackTrace();
            }
        }
    }
}

execute和executeUpdate的区别

相同点:二者都能够执行增加、删除、修改等操作。

不同点:

1、execute可以执行查询语句,然后通过getResult把结果取出来。executeUpdate不能执行查询语句。

2、execute返回Boolean类型,true表示执行的是查询语句,false表示执行的insert、delete、update等。executeUpdate的返回值是int,表示有多少条数据受到了影响。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值