DriverManeger(驱动管理类,里面都是静态类getconnection和registerDriver)
1、注册驱动
Class.forName("com.mysql.jdbc.Driver");
2、获取数据库连接
url:
Connection(数据库连接对象)
1、获取执行sql执行对象
普通执行sql对象
Statement createStatement()
预编译sql执行对象:防止sql注入
PreparedStarement prepareStatement(sql)
2、事务管理
try{
//开启事务
conn.setAutoCommit(false);
//执行sql
int count1 = stmt.executeUpdate(sql1);//受影响的行数
//处理结果
System.out.println(count1);
//执行sql
int count2 = stmt.executeUpdate(sql2);
//处理结果
System.out.println(count2);
//提交事务
conn.commit();
}catch(Exception throwables){
//回滚事务
conn.rollback();
throwables.printStackTrace();
}
Statement
执行sql语句
1、int executeUpdate:执行DML DDL语句
//DML
//获取执行sql对象
Statement stmt = conn.createStatement();
//执行sql
int count = stmt.execeteUpdate(sql);//执行DML语句
//DDL
String sql = "create datebase db2";
String sql = "drop datebase db2";
2、Result executeQuery(sql):执行DQL语句。返回ResultSet对象
ResultSet(结果集对象)
1、封装了DQL查询语句的结果
//定义sql
String sql = "select *from account";
//获取statemet 对象
Statement stmt = conn.createStatement();
//执行sql
ResultSet rs = stmt.executeQuery(sql);
//处理结束,遍历rs中所有数据。
//光标向下移动,并且判断当前行是否有数据
while(rs.next()){
//获取数据 getXXX()
int id = rs.getInt(1);
String name = rs.getString(2) ;
double money = rs.getDouble(3);
}
//释放资源
rs.close();
conn.close();
stmt.close();
PreparedStatement(是接口,继承自Statement)
1、预防sql注入问题(预编译sql语句并执行)
sql注入:通过操作输入来修改事先定义好的sql语句,以达到执行代码对服务器进行攻击的方法
令password = ' or ' 1 ' = '1 可能直接登陆网页
//防注入
String name = "zhangsan";
String pwd = "hdbkhgfeish";
//定义sql
String sql = "select *from tb_user where username = ? and password = ?";
//获取pstmt对象
PreparedStstement pstmt = conn.prepareStatement(sql);
//设置?的值
pstmt.setString(1,name);
pstmt.setString(2,pwd);
//执行sql
ResultSet rs = pstmt.executeQuery();
//判断登录是否成功
if(rs.next()){
System.out.println("登录成功");
}else{
System.out.println("登录失败");
}
//释放资源
rs.close();
pstmt.close();
conn.clise();