0.1JDBC介绍
jdbc是一个独立于数据库管理系统和通用sql的公共接口,为访问不同的数据库提供了一种统一的途径
0.2获取数据库连接
方式一:
String url="jcbc:mysql://localhost:3306/xxx";
String user="用户名"
String password="密码";
Class clazz=Class.forName("com.mysql.jdbc.Driver");
Connection conn=DriverManager.getConnection(url,user,password);
方式二:将数据库连接需要的4个基本信息声明在配置文件中,通过读取配置文件的方式,获取连接。
(1)使数据与代码的分离,实现了解耦
(2)只需要修改配置文件信息,可以避免程序重新打包
user=用户名
password=密码
url=jdbc:mysql://localhost:3306/xxx
dirverClass=com.mysql.jdbc.Driver
InputStream is=ClassLoder.class.getResourceAsStream("jdbc.properties");//该方式的jdbc.properties默认在当前Module的src路径下
Properties pros=new Properties();
pros.load(is);
String user=pros.getProperty("user");
String password=pros.getProperty("password");
String url=pros.getProperty("url");
String driverClass=pros.getProperty("driverClass");
Class.forName(driverClass);
Connection conn=DriverManager.getConnection(url,user,password);
0.3实现CRUD操作
数据库连接被用于向数据库服务器发送命令和SQL语句,并接受数据库服务器返回的结果。
java.sql包中有3个接口分别定义了对象数据库的调用的不同方式:
Statement:用于执行静态SQL语句并返回它所生成结果的对象。
PrepatedStatement:Statement的子接口。SQL语句被预编译并存储在此对象中,可以使用此对象多次高效地执行该语句。
CallableStatement:用于执行SQL存储过程。
使用Statement操作数据表的弊端:
问题一:存在拼串操作,繁琐。
问题二:存在SQL注入问题。在用户输入数据中注入非法的SQL语句,从而利于系统的SQL引用完成恶意行为的做法。
防止SQL注入,只要用PrepatedStatement替换Statement就可以了
//1.加载驱动
class.forName("JDBC驱动类的名称");
//2.创建连接
Connection con=DriverManager.getConnection(数据库连接字符串,数据库用户名,密码);
//3.写sql语句
//4.创建PreparedStatement对象执行sql语句
PreparedStatement psmt=con.prepareStatement(sql语句); //sql语句里的条件先用占位符先占着
psmt.setInt(1,80); //给占位符参数。1为占位符的下标(下标从1开始),80就是参数
ResultSet rs=psmt.executeQuery();
//5.遍历结果
while(rs.next())
{
int id=rs.getInt("id");
String name=rs.retString("name");
}
//6.关闭连接
0.4JDBC事务处理
当一个连接对象被创建时,默认情况下是自动提交的。
关闭数据库连接,数据就会自动的提交,如果多个操作,每个操作使用的是自己单独的连接,则无法保证事务,即同一个事务的多个操作必须在同一个连接下。
调用Connection的方法:
setAutoCommit(false); //取消数据的自动提交
commit(); //提交事务
rollback(); //回滚事务