JDBC操作

目录

一、实现JDBC步骤

1.注册驱动

 1.1导入驱动包

1.1异常处理

2.创建连接

2.1导包

2.2处理异常

3.得到执行sql语句的Statement对象

3.1修改数据操作

 3.2删除数据操作

3.3插入数据操作

3.4查询数据操作 

4.执行sql语句,并返回结果,并处理结果

5.关闭资源

6.完整代码

6.1修改数据操作代码

6.2查询数据操作代码

二、JDBC封装函数

1.建立两个类(工具类、测试类)

2.全局变量声明

3.初始化数据库链接函数

4.修改数据函数

5.查询数据函数

6.关闭资源函数

7.测试代码

7.1修改数据测试代码

7.2查询数据测试代码


一、实现JDBC步骤

1.注册驱动

 1.1导入驱动包

1.1异常处理

更正一下是 Class.forName("com.mysql.jdbc.Driver"),上面代码写错了。 

//注册驱动(加载驱动类,5.0版本)
try {
    Class.forName("com.mysql.jdbc.Driver");
	System.out.println("加载驱动成功");
} catch (ClassNotFoundException e) {
    // TODO Auto-generated catch block
	System.out.println("加载驱动失败");
	e.printStackTrace();
}

2.创建连接

2.1导包

2.2处理异常

//创建数据库连接
String url = "jdbc:mysql://127.0.0.1:3306/score";
//jdbc:mysql: //数据库主机地址:端口号/数据库名
String user="root"; //数据库用户名
String password="268875"; //数据库密码
Connection connection = DriverManager.getConnection(url,user,password);			
System.out.println("获取数据库连接成功");

3.得到执行sql语句的Statement对象

3.1修改数据操作

//修改数据操作
String sql = "update student SET Sage=? where Sid=?";
PreparedStatement pre = connection.prepareStatement(sql);
//prepareStatement--预编译SQL语句执行对象
//把数据设置到占位符位置
pre.setInt(1, 39);
//向sql语句中第一个位置设置数据
pre.setString(2,"100010");
//向sql语句中第二个位置设置数据

 3.2删除数据操作

//删除数据操作
String sql="delete from student where Sid=?";
pre = connection.prepareStatement(sql);
pre.setString(1, "100020");

3.3插入数据操作

//插入数据操作
String sql="insert into student values(?,?,?,?,?)";
//问号为占位符,使用占位符主要为了避免sql注入
pre = connection.prepareStatement(sql);
pre.setString(1,"100010");
pre.setString(2,"黎明");
pre.setInt(3,30);
pre.setString(4,"女");
pre.setString(5,"手机游戏");

3.4查询数据操作 

//查询数据操作
String sql="select * from student";
pre = connection.prepareStatement (sql);
ResultSet set = pre.executeQuery();
//查询,返回的是结果集,类似于一张虚拟表
//把虚拟表中的数据取出来,即解析结果集
while(set.next()){
/* 调用next()方法时,
 * 游标向下移动一行,
 * 判断是否存在数据,
 * 并把数据放入结果集中,
 * 返回值为布尔类型。
 */
	/* 通过数所在位置去获取数据,这个方法不可取
	 * System.out.println(set.getString(1));
	 * System.out.println(set.getString(2));
	 * System.out.println(set.getInt(3));
	 * System.out.println(set.getString(4));
	 * System.out.println(set.getString(5));
	 */
	System.out.println(set.getString("Sid"));
	System.out.println(set.getString("Sname"));
	System.out.println(set.getInt("Sage"));
	System.out.println(set.getString("Ssex"));
	System.out.println(set.getString("Szhuanye"));
}

4.执行sql语句,并返回结果,并处理结果

/* 执行sql语句
 * 对于jdbc来说操作数据库只有两种操作
 * 1.修改(增,删,改);2.查询(查)
 */
int row = pre.executeUpdate();
//修改,返回影响数据库的行数
System.out.println(row);
if(row>0){
    System.out.println("修改数据成功");
}else{
	System.out.println("修改数据失败");
}

5.关闭资源

finally{
//关闭资源,finally无论代码是否出现异常都会被执行
	try {
		if(connection!=null)
			connection.close(); //关闭数据库链接
		if(pre!=null)
			pre.close(); //关闭语句执行对象
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}		
}

6.完整代码

对于jdbc来说操作数据库只有两种操作:
1.修改(增,删,改);

2.查询(查)。

6.1修改数据操作代码

package java_projects;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class JDBCTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//设置成全局变量,便于后面直接关闭资源
		Connection connection = null;
		PreparedStatement pre = null;
		
		//注册驱动(加载驱动类,5.0版本)
		try {
			Class.forName("com.mysql.jdbc.Driver");
			System.out.println("加载驱动成功");
			
			//创建数据库连接
			String url = "jdbc:mysql://127.0.0.1:3306/score";
			//jdbc:mysql://数据库主机地址:端口号/数据库名
			String user="root";	//数据库用户名
			String password="268875"; //数据库密码
			connection = DriverManager.getConnection(url,user,password);			
			System.out.println("获取数据库连接成功");
			
//			//通过数据库链接对象获取sql语句执行对象Statement
//			//修改数据
//			String sql = "update student SET Sage=? where Sid=?";
//			pre = connection.prepareStatement(sql);
//			//prepareStatement--预编译SQL语句执行对象
//			//把数据设置到占位符位置
//			pre.setInt(1, 39);
//			//向sql语句中第一个位置设置数据
//			pre.setString(2,"100010");
//			//向sql语句中第二个位置设置数据
			
//			//删除数据操作
//			String sql="delete from student where Sid=?";
//			pre = connection.prepareStatement(sql);
//			pre.setString(1, "100020");
			
			//插入数据操作
			String sql="insert into student values(?,?,?,?,?)";
			//问号为占位符,使用占位符主要为了避免sql注入
			pre = connection.prepareStatement(sql);
			pre.setString(1,"100010");
			pre.setString(2,"黎明");
			pre.setInt(3,30);
			pre.setString(4,"女");
			pre.setString(5,"手机游戏");
			
			int row = pre.executeUpdate();
			//修改,返回影响数据库的行数
			System.out.println(row);
			if(row>0){
				System.out.println("修改数据成功");
			}else{
				System.out.println("修改数据失败");
			}
			
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			System.out.println("加载驱动失败");
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			System.out.println("获取数据库连接失败");
			e.printStackTrace();
		}finally{
		//关闭资源,finally无论代码是否出现异常都会被执行
			try {
				if(connection!=null)
					connection.close(); //关闭数据库链接
				if(pre!=null)
					pre.close(); //关闭语句执行对象
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}		
		}
	}
}

6.2查询数据操作代码

package java_projects;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class JDBCTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//设置成全局变量,便于后面直接关闭资源
		Connection connection = null;
		PreparedStatement pre = null;
		ResultSet set = null;

		//注册驱动(加载驱动类,5.0版本)
		try {
			Class.forName("com.mysql.jdbc.Driver");
			System.out.println("加载驱动成功");
			
			//创建数据库连接
			String url = "jdbc:mysql://127.0.0.1:3306/score";
			//jdbc:mysql://数据库主机地址:端口号/数据库名
			String user="root";	//数据库用户名
			String password="268875";	//数据库密码
			connection = DriverManager.getConnection(url,user,password);			
			System.out.println("获取数据库连接成功");
			
			//查询数据操作
			String sql="select * from student";
			pre = connection.prepareStatement (sql);
			set = pre.executeQuery();
			//查询,返回的是结果集,类似于一张虚拟表
			//把虚拟表中的数据取出来,即解析结果集
			while(set.next()){
			/* 调用next()方法时
			 * 游标向下移动一行
			 * 判断是否存在数据
			 * 并把数据放入结果集中
			 * 返回值为布尔类型
			 */
				/* 通过数所在位置去获取数据,这个方法不可取
				 * System.out.println(set.getString(1));
				 * System.out.println(set.getString(2));
				 * System.out.println(set.getInt(3));
				 * System.out.println(set.getString(4));
				 * System.out.println(set.getString(5));
				 */
				System.out.println(set.getString("Sid"));
				System.out.println(set.getString("Sname"));
				System.out.println(set.getInt("Sage"));
				System.out.println(set.getString("Ssex"));
				System.out.println(set.getString("Szhuanye"));
			}
			
			/* 执行sql语句
			 * 对于jdbc来说操作数据库只有两种操作
			 * 1.修改(增,删,改);2.查询(查)
			 */

		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			System.out.println("加载驱动失败");
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			System.out.println("获取数据库连接失败");
			e.printStackTrace();
		}finally{
		//关闭资源,finally无论代码是否出现异常都会被执行
			try {
				if(connection!=null)
					connection.close(); //关闭数据库链接
				if(pre!=null)
					pre.close(); //关闭语句执行对象
				if(set != null)
					set.close(); //关闭结果集资源
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}	
		}
	}
}

二、JDBC封装函数

1.建立两个类(工具类、测试类)

2.全局变量声明

private	static	Connection connection;
private	static	PreparedStatement pre;
private	static	ResultSet set;
private	static	String url="jdbc:mysql://127.0.0.1:3306/score";
private	static	String user="root";
private	static	String password="268875";
private	static	String driver="com.mysql.jdbc.Driver";

3.初始化数据库链接函数

public static void initConnection(){
	try {
		Class.forName(driver);
		connection = DriverManager.getConnection(url, user, password);
	} catch (ClassNotFoundException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}

4.修改数据函数

/**
 * 修改数据操作(增、删、改)
 * @param o 数组第一个位置放sql语句,后面的所有位置放sql语句中对应的值
 * @return 影响的行数
 */
public static int update(Object ... o) {
    /* Object ... o
	 * 该写法叫可变参数
	 * 可以传递0到无限个object参数进来
	 * 把可变参数当成数组使用即可
	 */
	try {
		pre=connection.prepareStatement(o[0].toString());
		for(int i=1;i < o.length;i ++){
			pre.setObject(i, o[i]); 
			//不知道设置什么类型,直接使用Object
		}
		return pre.executeUpdate();			
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}finally{
		close(); //关闭资源函数
	}
	return 0;
}
	

5.查询数据函数

	/**
	 * 查询操作
	 * @param o 数组第一个位置放sql语句,后面的所有位置放sql语句中对应的值
	 * @return 返回结果集
	 */
	public static ResultSet select(Object ... o){
		initConnection();
		try {
			pre=connection.prepareStatement(o[0].toString());
			for(int i = 1;i < o.length;i ++){
				pre.setObject(i, o[i]);
			}
			set = pre.executeQuery();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}//结果集资源不能被关闭,所以没有finally语句
		return set;
	}

6.关闭资源函数

public static void close(){
	try {
		if(connection!=null)
			connection.close(); //关闭数据库链接
		if(pre!=null)
			pre.close(); //关闭语句执行对象
		if(set!=null)
			set.close(); //关闭结果集资源
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}

7.测试代码

7.1修改数据测试代码

package java_projects;

public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		JDBCTool.initConnection();
		JDBCTool.update("insert into student values(?,?,?,?,?)","100020","黑暗",50,"男","电脑游戏");
//		int row=JDBCTool.update("insert into student values(?,?,?,?,?)","100020","黑暗",50,"男","电脑游戏");
//		if(row>0){
//			System.out.println("修改数据成功");
//		}else{
//			System.out.println("修改数据失败");
//		}
	}
}

7.2查询数据测试代码

package java_projects;

import java.sql.ResultSet;
import java.sql.SQLException;

public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		JDBCTool.initConnection();
		ResultSet set = JDBCTool.select("select * from student");
		try {
			while(set.next()){
				System.out.println(set.getString("Sid"));
				System.out.println(set.getString("Sname"));
				System.out.println(set.getInt("Sage"));
				System.out.println(set.getString("Ssex"));
				System.out.println(set.getString("Szhuanye"));
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			JDBCTool.close();
			/*结果集必须在使用完之后再关闭
			 * 在查询数据函数中不能调用关闭资源函数
			 * 因为查询数据函数返回的是结果集
			 */
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值