MYSQL JDBC操作

JDBC 是java语言操作数据库的包 属于javaSe部分,由一组Java工具类和接口组合而成在JDBC中

常用的类有:

DriverManager;驱动,该类提供注册驱动的方法,但是使用会使驱动被注册两次和硬编码后期不易程序扩展和维护。所以一般直接使用的是Class.forName

Connection;连接

Statement;执行对象

ResultSet。结果集


开发步骤

1、注册驱动

2、获取连接

3、获得语句执行者

4、执行SQL语句

5、处理结果

6、释放资源

例如在asd库中搜索显示所有信息

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

import org.junit.Test;
public class QueryAll {

	@Test
	public void test123(){
		Connection conn= null;
		Statement stmt = null;
		ResultSet rs = null;		
		try {
			//1.注册驱动
			Class.forName("com.mysql.jdbc.Driver");	//MYSQL驱动类提供了实现类
			//2.获取连接								 //数据库服务器ip 端口 
			String url ="jdbc:mysql://127.0.0.1:3306/asd?useSSL=false";	//url固定由jdbc:mysql://localhost:3306/库名	
			conn = DriverManager.getConnection(url, "root", "ch595200");//三个参数分别未url 登录名和密码
		//此时已经连接上
			//3.获取执行sql语句对象
			stmt = conn.createStatement();	
			//4.编写sql语句 做什么写什么 
			String sql = "select * from product";	
			//5.执行sql语句
			rs = stmt.executeQuery(sql);	
				/*查询使用executeQuery(sql) DQL语句 返回了一个结果集 
				 * executeUpdate(sql) DML语句(插入数据等) 返回int
				 * execute(sql) ①执行select 返回true 用getResultSet获取结果
				 * 				②执行其他语句 返回false 用getUpdateCount()获得影响的行数 
				 */
			//6.处理结果集
			while(rs.next()){	//用光标获取数据 
				System.out.println("用户名:"+rs.getString(2)+" pid:"+rs.getString("pid"));
			}			
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			if(rs!=null)
				try {
					rs.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			if(stmt!=null)
				try {
					stmt.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			if(conn!=null)
				try {
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
		}
	}
	public static void main(String[] args) {
	}
}

注意:有时候会发生SQL攻击 , 我们输入的参数中的某些参数被当成sql语句执行代码片,此时要用占位符,并预处理。

所以,无论什么情况,多使用PreparedStatement,而不是使用Statement。如搜索name和cid ,


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

import org.junit.Test;

public class TestLogin {

	//sql注入问题 预处理 PreparedStatement
	@Test
	public void test()
	{
			try {
				se("士兵' or '黄迎", "1");	//SQL攻击  此时有错误 需要预处理 	
			} catch (Exception e) {
				e.printStackTrace();
			}
	}
	public void se(String name,String cid) throws ClassNotFoundException, SQLException
	{
			//注册驱动
			Class.forName("com.mysql.jdbc.Driver");
			//获得连接
			String url = "jdbc:mysql://127.0.0.1:3306/asd?useSSL=false";
			Connection conn = DriverManager.getConnection(url, "root", "ch595200");
				
			//编写sql语句
			//String sql = "select * from product where pname='"+name+"' and cid="+cid;
			String sql = "select * from product where pname=? and cid=?";	//占位符
			
			// 创建预处理对象防止SQL攻击;提高代码的可读性,以可维护性;提高效率。
			PreparedStatement pstmt = conn.prepareStatement(sql);//创建的时候已与一条sql语句绑定
			// 设置参数(给占位符)
			pstmt.setString(1, name);
			pstmt.setString(2, cid);
			
			//执行sql语句,获取结果
			ResultSet rs = pstmt.executeQuery();	//此时没有参数
			//显示结果
			if(rs.next())
			{
				System.out.println("查询到," + name + ",成功!");
				System.out.println(sql);
			}
			else
				System.out.println("查不到");
			if (rs != null)
				rs.close();
			if (pstmt != null)
				pstmt.close();
			if (conn != null)
				conn.close();
	} 
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值