JDBC使用方法

本文介绍了JDBC使用方法,包括创建数据库连接、执行SQL语句、处理Resultset对象的步骤。详细讲解了如何进行查询、增加操作,并强调了规范化的资源关闭顺序。还提到了PrepareStatement的重要性,以防止SQL注入攻击。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、简述创建流程
1.通过Class.forName(“com.mysql.jdbc.Driver”);来创建一个驱动。

2.通过DriverManager.getConnection(“jdbc:mysql://localhost:3306/数据库名称”,用户名,密码); —>其返回值是一个connection对象,用于驱动与mysql数据库的连接。

3.通过 connection.createStatement();来得到一个Statement的对象,主要用于执行 SQL语句。

4.Statement 对象通过执行 statement.executeQuery(sql语句)来操作mysql数据库,返回一个结果的Resultset的对象,里面存放着一张结果的表。

5.Resultset对象 ,通过调用next()方法,将游标往后移一位,就像这样:
在这里插入图片描述
最开始时,游标没有指向数据,当执行一次next()后就会指向第一行数据,此时就可以找到第一行数据。

6.通过Resultset.getXXX(下标);来得到数据,注意:下标从①开始。

注意:
1.关于Driver:

Class.forName("com.mysql.jdbc.Driver");
	// 等于下边这两句
 com.mysql.jdbc.Driver driver = new com.mysql.jdbc.Driver();//创建一个mysql的驱动
 DriverManager.registerDriver(driver);//注册驱动
 

二、具体代码

1.查询

@Test
	public void test() throws ClassNotFoundException, SQLException {
		
		/**
		 * 加载驱动  --->背住:com.mysql.jdbc.Driver   --->jdbc的Driver类
		 */
		Class.forName("com.mysql.jdbc.Driver");
		
		/**
		 * 通过driverManager.getConnection来得到connection对象
		 * localhost:本地ip
		 * 3306:端口号
		 * day17test:数据库名称
		 * root:用户名
		 * xxxx:密码
		 * 
		 */
		Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/day17test", "root", "xxxx");
		
	
		
		//编写sql语句
		String sql = "SELECT AVG(age) FROM stu where sex = 'male'";
		
		//获得statement对象来执行查询语句
		Statement state = con.createStatement();
		
		//执行state.executeQuery(str)语句并得到set结果对象
		ResultSet set = state.executeQuery(sql);
		
		//判断set对象是否还有下个元素(下一行)
		while (set.next()) {
			//输出set的下标为1的列的结果,返回string类型
			//注意:返回值要想等
			//     下标从1开始
			System.out.println(set.getString(1));
		}
		
	}

注意:若发现查询不出结果,则在getConnection方法中的第一个参数后加上
?useUnicode=true&characterEncoding=UTF-8即可。

2.增加:

	public static void add(String username,String name,int role_id) {
		
		Connection con = null;
		Statement state = null;
		ResultSet set = null;
		
		con = getConn();
		
		try {
			state = con.createStatement();
			
			String sql = "INSERT `user` VALUES ('"+username+"','"+name+"',null,"+role_id+")";
			
			int result =  state.executeUpdate(sql);
			
			if(result>0) {
				System.out.println("插入成功");
			}
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			closeAll(con, state, set);
		}
		
	}

3.删除和修改省略;

三、规范化代码
连接对象: Connection
执行语句对象: State
结果表对象:ResultSet
都需要关闭,关闭顺序:
1.ResultSet
2.State
3.Connection

四、PrepareStatement
为了防止SQL语句攻击的。
例子:

	public static void login(String userName,String password) throws SQLException {
		
		Connection con = null;
		Statement state = null;
		ResultSet set = null;
		
		con = getConn();
		
		state = con.createStatement();
		
		String sql = "SELECT * from stu where sname = '"+userName+"' and sid = '"+password+"'";
		
		set = state.executeQuery(sql);
		
		if (set.next()) {
			System.out.println("登陆成功,欢迎您"+userName);
		}else {
			System.out.println("登陆失败!");
		}
		
		
	}

当我们传入参数恶意修改SQL语句时,总是会登陆成功的。

prepareStatement的使用:


	public static void main(String[] args) {

		try {
			Class.forName("com.mysql.jdbc.Driver");
			
			Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/day18homework", "root", "zxh86356449");
			//传入的条件用?来限定
			String sql = "Select * from user where id = ?";
			//通过connection.prepareStatement(String sql)来得到prepareStatement对象
			PreparedStatement pre = con.prepareStatement(sql);
			//设置第一个?处的值为3
			pre.setInt(1, 3);
			//直接执行。
			ResultSet set = pre.executeQuery();
			set.next();
			System.out.println(set.getString(1));
			
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		
	}

论什么情况,都去使用PreparedStatement,而不是使用Statement。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值