图解java【JDBC】小白也能弄懂

目录

JDBC简介

工作原理:

工作过程:

JDBC驱动与连接

JDBC驱动

连接JDBC驱动

1.下载特定数据库的JDBCjar包

2.加载并注册数据库驱动

3.连接驱动

JDBC常见API

JDBC数据查询

一般查询

1.接口详解

2.一般查询示例程序

JDBC数据维护

数据维护一般流程

更新数据

插入数据

1.插入单条记录

2.批量插入数据

删除数据

拓展

JDBC中设置Date类型参数

1.手动设置时间

2.自动获取本地时间


JDBC简介

JDBC:JDBC在应用程序与数据库之间起到了一个桥梁作用,当应用程序使用JDBC访问特定的数据库时,只需要通过不同的数据库驱动与其对应的数据库进行连接,连接后即可对该数据库进行相应的操作。

工作原理:

工作过程:

JDBC驱动与连接

JDBC驱动

由JDBC驱动直接访问数据库

优点:纯java,快,跨平台

缺点:访问不同的数据库需要下载专用的JDBC驱动

连接JDBC驱动

1.下载特定数据库的JDBCjar包

到使用的数据库的官网上下载,本文会提供mysql-connector-java-5.1.39-bin.jar jar包

2.加载并注册数据库驱动

方法一:写代码(只用于一次程序,不推荐)

//Class.forName("Driver全名");
Class.forName("com.mysql.jdbc.Driver");//以mysql数据库为例

方法二:将jar包复制到java运行环境jre文件中(适用于JDBC4.0以后)

(1)找到java文件,将jar包放到jdk下,jre下,lib下,ext中。

(2)找到java文件,将jar包放到jre下,lib下,ext中。

注意:如果使用第三方软件编程(如:eclipse)则一定要复制jar包到公共jre中

3.连接驱动

(1)getConnection方法详解

DriverManager.getConnection(String url,String user,String password);
/*url:定位符,找到本机数据库
*jdbc:数据库服务名://主机名:端口号:/创建的数据库名*/
//user:连接数据库时登录的用户名
//password:连接数据库时的登录密码
//例:
    //1、加载并注册数据库驱动。
	Class.forName("com.mysql.jdbc.Driver");
    //2、通过DriverManager获取数据库连接。
	Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc", "root", "12345");

JDBC常见API

1.Driver:Driver接口是所有JDBC驱动程序必须实现的接口,用于加载驱动。一次程序的运行中,只需要加载一次。

2.DriverManager:使用该类注册驱动

3.Connection:连接数据库的对象

4.Statement:执行静态的SQL语句,并返回一个结果对象(繁琐,不安全)

5.ResultSet:结果集对象(封装了查询结果的数据)

6.PreparedStatement:Statement的子接口,用于执行预编译的SQL语句。(通过Connection进行获取)

JDBC数据查询

一般查询

1.接口详解

一般查询需要JDBC API中的Statement接口与ResultSet接口

Statement接口:

(1)由Connection产生;

(2)Statement对象用于将SQL语句发送到数据库中;

(3)在JDBC API 中通常有3种Statement对象,它们都可以作为在给定连接上执行SQL语句的容器。

3种Statement对象
Statement 用于无参数的查询

PreparedStatement

(预编译SQL语句)

用于带参数的查询,当SQL语句多次运行,使用该对象可提高运行效率。
CallableStatement 用于调用存储过程

(4)Statement与PreparedStatement对象的创建

//使用Connection对象的createStatement方法,创建Statement对象(conn为Connection对象)
Statement stmt=conn.createStatement();
//使用Connection对象的prepareStatement方法,创建PreparedStatement对象
PreparedStatement pstmt =conn.prepareStatement("要执行的SQL语句");

(5)Statement对象的方法

//适用于执行select语句
public ResultSet executeQuery()throws SQLException;
//适用于执行insert,update,delete等数据修改和维护语句
public 行数 executeUpdate(String sql)throws SQLException;

ResultSet接口:

(1)ResultSet对象用于包含符合SQL语句中条件的所有记录,它的组织结构类似于一张临时表。

(2)ResultSet接口自带游标,只有使用next()方法才可使游标转到ResultSet对象中的第一行。

(3)getXxx()方法,用于返回当前行中指定列索引columnNumber或列名字columnName的数据。

/*语法:
XXX getXXX (int columnNuber);
XXX getXXX (String columnName);*/
//例:
int id =resultSet.getInt("id");
String name=resultSet.getString("name");

(4)close()用于关闭ResultSet对象

2.一般查询示例程序

(1)一般查询执行步骤

(2)一般查询执行程序

	public static void main(String[] args) {
		try {
			//1.注册驱动(已将JDBC Driver jar包放入ext文件中可不写)
			Class.forName("com.mysql.jdbc.Driver");
			//2.获取数据库连接对象
			//如果对象是主机,并端口号是默认值:3306,url可简写:"jdbc:mysql:///jdbc"
			Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc", "root", "12345");
			//3.获取SQL语句的执行对象
                        //此处使用Statement接口的子接口PreparedStatement更安全
			PreparedStatement pstmt=conn.prepareStatement("select*from users");
			//4.执行SQL语句,调用executeQuery查询方法
			ResultSet resultSet=pstmt.executeQuery();
			//5.处理结果集
			while(resultSet.next()){//next方法返回值为boolean类型
				int id =resultSet.getInt("id");//getXxx方法:可以根据列号与列名获取
				String name=resultSet.getString("name");
				String password=resultSet.getString(3);
				String email=resultSet.getString(4);
				
				System.out.println(id+" "+name+" "+password+" "+email);
			}
			//6.关闭流释放资源
			conn.close();
			pstmt.close();
			resultSet.close();
		} catch (Exception e) {
			
			e.printStackTrace();
		}
	}

JDBC数据维护

会使用到的Statement的方法

//适用于执行insert,update,delete等数据修改和维护语句
public 行数 executeUpdate(String sql)throws SQLException;

数据维护一般流程

更新数据

例1:
public static void main(String[] args) throws Exception {
		//1.注册驱动
	    //Class.forName("com.mysql.jdbc.Driver");
		//2.获取数据库连接
		Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc", "root", "12345");
		//3.获取SQL语句的执行者
		PreparedStatement pstmt=conn.prepareStatement("UPDATE users SET NAME='tc' WHERE id=?");
		//给占位符进行填充数据
		pstmt.setObject(1, "1");//
		//4.执行SQL语句
		int count=pstmt.executeUpdate();//返回值是int数组
		//5.处理结果集
		if(count>0){
			System.out.println(count+"行受到影响");
		}else{
			System.out.println("更改失败");
		}
		//6.释放资源
		conn.close();
		pstmt.close();
	}
例2:
String sql="update users set email='[email protected]' where name='ert'";

插入数据

1.插入单条记录

请回顾Statement接口详解

例1:
public static void main(String[] args) {
		try{
			//1.注册驱动
			//Class.forName("com.mysql.jdbc.Driver");
			//2.获取数据库连接
			Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc", "root", "12345");
			//3.准备insert SQL语句
			String sql="INSERT INTO users(name,password,email,birthday) VALUES(?,?,?,?)";
			//4.设置参数,注意所使用的参数的数据类型
			PreparedStatement pstmt=conn.prepareStatement(sql);
			pstmt.setString(1, "cm");pstmt.setString(2, "1234556");
			pstmt.setString(3, "[email protected]");
			SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd" );//设置日期格式
			java.util.Date date = sdf.parse( "2002-5-6" );//设置日期参数
			long lg = date.getTime(); // 日期 转 时间戳
			pstmt.setDate(4, new java.sql.Date( lg ));
			//5.执行SQL语句
			int count=pstmt.executeUpdate();
			//6.判断执行结果,返回值大于1则成功插入一条数据
			if(count>0){
				System.out.println("记录成功");
			}else{
				System.out.println("记录失败");
			}
			conn.close();
			pstmt.close();
		}catch(Exception e){
			e.printStackTrace();
		}

	}
例2:

public static void main(String[] args) {
		try{
			//1.注册驱动
			//Class.forName("com.mysql.jdbc.Driver");
			//2.获取数据库连接
			Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc", "root", "12345");
			//3.准备insert SQL语句
			String sql="insert into users(name,password,email,birthday) values('wm','123456','[email protected]','1984-05-17');";
			PreparedStatement pstmt=conn.prepareStatement(sql);
			SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd" );//设置日期格式
			java.util.Date date = sdf.parse( "2002-5-6" );//设置日期参数
			long lg = date.getTime(); // 日期 转 时间戳
			pstmt.setDate(4, new java.sql.Date( lg ));
			//4.执行SQL语句
			int count=pstmt.executeUpdate();
			//5.判断执行结果,返回值大于1则成功插入一条数据
			if(count>0){
				System.out.println("记录成功");
			}else{
				System.out.println("记录失败");
			}
            //6.关闭接口
			conn.close();
			pstmt.close();
		}catch(Exception e){
			e.printStackTrace();
		}

	}

2.批量插入数据

采用批量提交的方式,使用addBatch(String sql)方法添加批量操作SQL语句,然后用executeBath()方法对所提交的多个SQL语句进行批量操作。

注:批量操作只适用于DML(增删改操作)

Satement对象的executeBath()方法

public int[] executeBatch() throws SQLException;//该语句不能执行具有返回结果集的SQL语句
//例:
public static void main(String[] args) throws Exception {
				//1.加载驱动
				//Class.forName("com.mysql.jdbc.Driver");
				//2.获取数据库连接
				Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc", "root", "12345");
				//3.准备3个插入SQL语句
				String sql="INSERT INTO users(name,password,email)VALUES(?,?,?)";
				//4.
				PreparedStatement pstmt=conn.prepareStatement(sql);
				//5.设置参数
				pstmt.setString(1, "jdh");
				pstmt.setString(2, "3452");
				pstmt.setString(3, "[email protected]");
				//6.添加一次预定义参数
				pstmt.addBatch();
				//7.设置参数
				pstmt.setString(1, "jdsh");
				pstmt.setString(2, "34322");
				pstmt.setString(3, "[email protected]");
				//8.再添加一次预定义参数
				pstmt.addBatch();
				//9.批量执行预定义SQL
				int []count=pstmt.executeBatch();
				//10.判断执行结果,返回值大于1则成功插入一条数据
				if(count[0]>0){
					System.out.println("记录成功");
				}else{
					System.out.println("记录失败");
				}
				conn.close();
				pstmt.close();
				
	}

删除数据

例1:
public static void main(String[] args) throws Exception {
		//1.注册驱动
		//Class.forName("com.mysql.jdbc.Driver");
		//2.获取数据库连接
		Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc", "root", "12345");
		//3.准备insert SQL语句
		String sql="DELETE FROM users WHERE id=?";
		//4.使用Connection接口的prepareStatement方法创建PreparedStatement对象
			//将SQL语句发送到数据库中
		PreparedStatement ps=conn.prepareStatement(sql);
		//5.设置参数
		ps.setString(1,"1");
		//6.//执行SQL语句
		int ret=ps.executeUpdate();
		//7.//判断执行结果
		if(ret>0){
			System.out.println("记录删除成功!!");
		}else{
			System.out.println("记录删除失败!!");
		}
		//8.关闭Connection和PreparedStatement对象
		conn.close();
		ps.close();
	}
例2:
String sql="delete from users where name='tsa'";

拓展

JDBC中设置Date类型参数

1.手动设置时间

PreparedStatement 的 setDate 方法使用的是 java.sql.Date 类型的日期参数。

设置这种参数的方法,例子:

SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" );//设置时间格式

java.util.Date date = sdf.parse( "2015-5-6 10:30:00" );//设置时间

long lg = date.getTime();    // 日期 转 时间戳

PreparedStatement pst = conn.prepareStatement(sql);   // 创建 PreparedStatement 对象

ps.setDate( 3, new java.sql.Date( lg ) );

2.自动获取本地时间

如果要在java代码中向数据库插入数据,可使用TimeStamp对象:创建java.util.Date对象,转换成TimeStamp对象(java.sql.Date对象不能保存时间,utils的可以)插入数据库(TimeStamp继承自java.sql.Date,数据库中自动转换成Date)

(1)ps.setTimestamp(1, new java.sql.Timestamp(System.currentTimeMillis()));

(2)java.sql.Date date = new java.sql.Date(System.currentTimeMillis());//获取当前时间

java.util.Date date = new java.util.Date();    // 获取一个Date对象

Timestamp timeStamp = new Timestamp(date.getTime()); 

   //   将日期时间转换为数据库中的timestamp类型

pstmt.setTimestamp(2, timeStamp);
发布了9 篇原创文章 · 获赞 15 · 访问量 1333

猜你喜欢

转载自blog.csdn.net/m0_46209092/article/details/105492229
今日推荐