Java 数据库连接——Java DataBase Connectivity

JDBC:
提供了java通用的各种连接数据库的能力。
它是官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口。

然后各个数据库厂商去实现这套接口,并提供数据库驱动(jar包)。我们可以使用这套接口(jdbc)编程。
Java 数据库连接——Java DataBase Connectivity_第1张图片

步骤:

1.导入驱动jar包
2.注册驱动
3.获取数据库的连接对象 Connection
4.定义SQL语句
5.获取执行SQL语句的对象 Statement/PraparedStatement
6.执行SQL,接收返回结果
7.释放资源

Public class JdbcDemo1{
	static public void main(String[] args) throws Exception{
		//1.导入驱动jar包
		//2.注册驱动
		Class.forName("com.mysql.jdbc.Driver");
		//3.获取数据库连接对象
		Connection con = DriverManager.getConnection(url:"jdbc:mysql://127.0.0.1:3306/database1",user:"root",password:"root");
		//4.定义SQL语句
		String sql = "update account set balance = 1000 where id = 001";
		//5.获取执行SQL语句的对象:Statement
		Statement stm = con.createStatement();
		//6.执行SQL,接收返回结果并处理
		int res = stm.executeUpdate(sql);
		if(res==1){
			sysout("更改成功");
		}else{
			sysout("更改失败");
		}
		//7.释放资源
		stm.close();
		con.close();
	}
}

详解各个对象:

1.DriverManager:驱动管理对象
2.Connection:数据库连接对象
3.Statement:执行SQL的对象(不安全)
4.ResultSet:结果及对象
5.PreparedStatement:执行SQL的对象(可以防   止sql注入,效率更高)

DriverManager对象:
  1. 注册驱动:告诉程序该使用哪一个数据库驱动jar包
    static void registerDriver(Driver driver):注册与给定的驱动程序 DriverManager。
    写代码使用:Class.forName("com.mysql.jdbc.Driver");
    这句话是使用反射机制,把这个类文件加载进了内存,通过查看源码发现,在com.mysql.jdbc.Driver类中存在静态代码块:
static{
	try{
		java.sql.DriverManager.registerDriver(new Driver());
	}catch(SQLException E){
		throw new RuntimeException("Can't register driver!");
	}
}

在mysql5之后的驱动jar包可以省略注册驱动的步骤、因为系统自动把这个类的名字写到此文件中,如果没有写会先读取此文件,然后系统自动帮我们注册。但实际开发中建议写上!
Java 数据库连接——Java DataBase Connectivity_第2张图片2. 获取数据库连接:

  • 方法:static Connection getConnection(String url, String user, String password);
    url:指定连接的路径:jdbc:mysql://IP地址(域名):端口号/数据库名称
Connection对象:

功能:
1.获取执行sql的对象:

  • Statement createStatement()
  • PreparedStatement prepareStatement(String sql)

2.管理事务:

  • 开启事务:setAutoCommit(boolean autoCommit):调用该方法设置参数为false,即开启事务。
  • 提交事务:commit()
  • 回滚事务:rollback()
Statement对象:

1.执行sql

  • int executeUpdate(String sql);:执行DML(insert,update,delete)语句、DDL(create,alter,drop)语句。
  • ResultSet executeQuery(String sql):执行DQL(select)语句。
ResultSet对象:

封装查询结果。
获取数据:通过游标向下移动一行,然后判断是否有数据,再获取数据。
Java 数据库连接——Java DataBase Connectivity_第3张图片

  • next():游标向下移动一行。返回boolean值,有数据返回true,无数据返回false。
  • getXxx():获取数据。如getInt(),getString()等。
    参数:
  • int:代表列的编号,从1开始。如:getString(1);获取第一列
  • String:代表列名称。如:getDouble("balance");获取balance这一列
PreparedStatement对象:

1.sql注入问题:在拼接SQL时,有一些SQL的特殊关键字参与字符串的拼接,会造成安全问题。

  • 用户随便输入账号,输入密码为:a' or 'a' = 'a
  • SQL:select * from user where username = 'jdkaj' and password = 'a' or 'a' = 'a'

2.我们可以使用预编译的SQL来解决占位符问题(?)

  • 定义SQL语句:
    select * from user where username=? and password=?;
  • 获取执行SQL语句的对象:PreparedStatement
    Connection.prepareStatement(String sql);
  • 给?赋值:
    setXxx(arg1, arg2);
    参数1:?的位置编号,从1开始。
    参数2:?的值。
    Java 数据库连接——Java DataBase Connectivity_第4张图片

注:参itheima[^1].

你可能感兴趣的:(数据库)