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();