JDBC:Java语言操作数据库

 

概念:Java databese connectivity ---Java数据库连接,Java语言操作数据库。

JDBC本质:是sun公司定义的操作所有关系型数据库的规则(接口),各个数据库厂商根据jdbc的接口写自己的实现类,也叫数据库驱动(jar包),我们可以使用这套接口(jdbc)编程,真正执行的是驱动jar包中的实现类。

 

快速入门:

步骤:

1.导入驱动jar包。先复制jar包到项目的libs目录下,然后add as library.

2.编写代码,注册驱动。

3.获取数据库的连接对象,Connection,Java代码和数据库之间的桥梁

4.定义sql

5.获取执行sql语句的对象,Statement

6.执行sql,接受返回结果。

7.处理结果

8.释放资源,关闭连接对象。

 

Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/db2","root","root");
String sql = "update account set balance=500 where id=1";
Statement statement = connection.createStatement();
int i = statement.executeUpdate(sql);
System.out.println(i);
statement.close();
connection.close();

 

详解各个对象:

DriverManager:驱动管理对象

功能:

1.注册驱动

static void registerDriver(Driver driver) :注册与给定的驱动程序 DriverManager 。

Class.forName("com.mysql.jdbc.Driver");

通过查看源码发现:在com.mysql.jdbc.Driver类中,存在静态代码块。

try {java.sql.DriverManager.registerDriver(new Driver());
} catch (SQLException E) {
throw new RuntimeException("Can't register driver!");
}
}

注意:mysql5之后的驱动jar包可以省略注册驱动的步骤。

2.获取数据库连接

方法:static Connection getConnection(String url,String user,String password);

 

Connection:数据库连接对象

1.功能:

1.获取执行sql的对象。 Statement createStatement();

PreparedStatement prepareStatement(String sql);

2.管理事务:

开启事务:void setAutoCommit(boolean autoCommit):方法参数设为false,即开启事务

提交事务:commit();

回滚事务:rollback();

Statement:执行sql的对象

1.执行sql

1.boolean execute(String sql);可以执行任意的sql语句

2.int executeUpdate(String sql);执行DML语句,DDL语句。

返回值:是影响的行数。可以通过返回值判断DML语句是否执行成功,>0成功,反之失败。

3.ResultSet executeQuery(String sql):执行下DQL语句。

ResultSet结果集对象

使用步骤:

1. 游标向下移动一行 boolean next()

2. 判断是否有数据 boolean next()

3. 获取数据 getxxx();

String sql = "select * from account";
ResultSet resultSet = statement.executeQuery(sql);
while (resultSet.next()){
int id = resultSet.getInt(1);
String str = resultSet.getString(2);
double balance = resultSet.getDouble(3);
System.out.println(id+"---"+str+"---"+balance);
}

PreparedStatement:执行sql的对象

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

1.输入用户名随便,输入密码:a or 'a' = 'a';

2.解决sql注入问题,使用PreparedStatement对象来解决。

3.预编译的sql.参数使用?作为占位符。

4.步骤:

1.导入驱动jar包。先复制jar包到项目的libs目录下,然后add as library.

2.注册驱动。

3.获取数据库的连接对象,Connection,Java代码和数据库之间的桥梁

4.定义sql

select * from user where username=? and password=?;

5.获取执行sql语句的对象,PreparedStatement Connection.prepareStatement(String sql)

5.1: 给?赋值:方法:setxxxx(参数1,参数2)

参数1:?的位置编号从1开始

参数2:?的值。

6.执行sql,接受返回结果。

7.处理结果

8.释放资源,关闭连接对象。

PreparedStatement:注意:后期都会使用PreparedStatement来完成增删改查的操作。

1.防止sql注入

2.效率更高。

 

使用JDBC来控制事务:

事务:一个包含多个步骤的业务操作。如果这个操作被事务管理,这多个步骤要么同时成功,要么同时失败。

操作:

1.开启事务

2.提交事务

3.回滚事务

使用Connection对象来管理事务:

开启事务:void setAutoCommit(boolean autoCommit):方法参数设为false,即开启事务

提交事务:commit();

回滚事务:rollback();