Java学习笔记--JDBC快速入门

JDBC: Java DataBase Connectivity

  • 概念 :Java数据库连接,Java语言操作数据库
  • 本质 :官方(sun公司)定义的操作所有关系型数据库的规则(接口)。各个数据库厂商去实现这套接口,提供数据库驱动jar包。我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。

快速入门

public class JdbcDemo {
	public static void main(String[]args) {
		Connection conn=null;
		Statement stmt=null;
		PreparedStatement pstm=null;
		ResultSet rs=null;
		try {
			//1.导入驱动jar包
			//2.注册驱动
			//DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());
			Class.forName("com.mysql.cj.jdbc.Driver");
			//3.获取数据库连接对象
			conn=DriverManager.getConnection(
					"jdbc:mysql://localhost:3306/mydb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8",
					"root",
					"123456");
			//4.使用Statement执行操作
//			//4.1定义SQL语句
//			String sql="select * from student";
//			//4.2获取SQL的对象
//			stmt=conn.createStatement();
//			//4.3执行SQL
//			rs=stmt.executeQuery(sql);
			
			//4.使用PreparedStatement执行操作
			//4.1获取SQL的对象
			pstm =conn.prepareStatement("select * from student");
	        //4.2执行SQL,得到结果
	        rs=pstm.executeQuery();
	        
		    //5.处理结果
			while(rs.next()){
				System.out.print(rs.getString("name")+" ");
			}
		}catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			try {
				//6.释放资源
				if(rs!=null)rs.close();
				if(stmt!=null)stmt.close();
				if(pstm!=null)stmt.close();
				if(conn!=null)conn.close();			
			}catch(Exception e) {
				e.printStackTrace();	
			}
		}	
	}
}
Output:
	  张三 李四 王五 马六

对象详解

1. DriverManager:驱动管理对象

功能:

  • 注册驱动:告诉程序该使用哪一个注册驱动jar包
    static void registerDriver(Driver driver):注册与给定的驱动程序 DriverManager
    写代码时使用:Class.forName("com.mysql.cj.jdbc.Driver");
    在com.mysql.cj.jdbc.Driver类中存在静态代码块。
static {
	try {
	java.sql.DriverManager.registerDriver(new Driver());
	} catch (SQLException E) {
	throw new RuntimeException(“Can’t register driver!);
	}
}
  • 获取数据库连接:
    方法:static Connection getConnection(String url, String user, String password)
    参数:
    url:指定连接的路径(如果连接的是本机mysql服务器,且默认端口是3306,则url可以简写为:jdbc:mysql:///数据库名称)
    user:用户名
    password:密码

2. Connection:数据库连接对象

功能:

  • 获取执行sql 的对象
    Statement createStatement()
    PreparedStatement prepareStatement(String sql)
  • 管理事务:
    开启事务:setAutoCommit(boolean autoCommit) :调用该方法设置参数为false,即开启事务
    提交事务:commit()
    回滚事务:rollback()

3. Statement:执行SQL的对象

功能:执行SQL

  • boolean execute(String sql) :可以执行任意的sql 了解
  • int executeUpdate(String sql) :执行DML(insert、update、delete)语句、DDL(create,alter、drop)语句
    返回值:影响的行数,可以通过这个影响的行数判断DML语句是否执行成功 返回值>0的则执行成功,反之,则失败。
  • ResultSet executeQuery(String sql) :执行DQL(select)语句

4. ResultSet:结果集对象

功能:封装查询结果

  • ResultSet提供的对结果集进行滚动的方法:
    next():移动到下一行
    Previous():移动到前一行
    absolute(int row):移动到指定行
    beforeFirst():移动resultSet的最前面。
    afterLast() :移动到resultSet的最后面。
  • 获取数据的方法:
    getXxx():获取数据,Xxx表示基础数据类型
    参数: int:代表列的编号,从1开始,如getString(1);String:代表列名称。如getString("name");

5. PrepareStatement:执行SQL的对象

  • SQL注入问题: 在拼接SQL时,有一些SQL的特殊关键字参与字符串的拼接。会造成安全性问题。
    如:SQL:"select * from user where name= ' "+ String name=" a ' or 'a' = 'a " +" ' ";当拼接的字符串满足这样的情况时:String name= " a ' or 'a' = 'a " 会出现where语句恒成立的注入问题。
    为解决SQL注入问题:使用PrepareStatement对象来解决

  • 预编译的SQL:参数使用 ?占位符
    如:select * from user where username = ? and password = ?;

    后期都会使用PrepareStatement来完成增删改查的所有操作。

猜你喜欢

转载自blog.csdn.net/Lzy410992/article/details/107864241