/*
- jdbc基本流程:
- 1.加载驱动 (选择数据库)
- 2.获取连接 (与数据库建立连接)
- 3.准备sql
- 4.创建处理块 (发送执行sql的工具)
- 5.发送sql (这里sql语句)
- 6.获取结果集
- 7关闭
*/
public class JDBCDemo01 {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//1.加载驱动 (选择数据库) 1)调用方法 2)创建对象 3)反射
Class.forName(“oracle.jdbc.driver.OracleDriver”);
//2.获取连接 (与数据库建立连接)
Connection conn=DriverManager.getConnection(“jdbc:oracle:thin:@localhost:1521:xe”, “SCOTT”, “TIGER”);
//3.准备sql
String sql=“select empno,ename from emp”; //sql不要加分号
//4.创建处理块 (发送执行sql的工具)
//静态处理块
Statement state=conn.createStatement();
//5.发送sql (这里sql语句)
ResultSet result=state.executeQuery(sql);
//6.获取结果集+处理
while(result.next()){
int id=result.getInt(1);
String name=result.getString(“ename”);
System.out.println(id+"—>"+name);
}
//7关闭
result.close();
state.close();
conn.close();
}
}
/*
- 模拟用户模块的基本操作:
- 注册用户
- 用户登录
- 修改用户数据
- 注销用户
- 优化功能:
-
注册:检查用户名知否已被占用
-
登录:只根据用户名查询,比对密码
*/
public class JDBCTest03 {
public static void main(String[] args) {
/boolean flag=reg(“yinwei”,“123456”);
if(flag){
System.out.println(“注册成功”);
}else{
System.out.println(“注册失败”);
}/
login("yinweidf","123456 or 1=1");
//change();
}
/*
* 转账:
* 张三给李四转账100元
* 保证在同一个事务中,通知成功,同时失败
*
* 事务默认自动提交,设置手动提交
*/
public static void change(){
Connection conn=null;
PreparedStatement state=null;
try {
conn=DBUtil.getConnection();
String sql1="update sxt_user set money=money-100 where name='zhangsan'";
String sql2="update sxt_user set money=money+100 where name='lisi'";
//设置手动提交
conn.setAutoCommit(false);
state=conn.prepareStatement(sql1);
int rows1=state.executeUpdate();
state=conn.prepareStatement(sql2);
int rows2=state.executeUpdate();
if(rows1>0 && rows2>0){
conn.commit(); //提交
System.out.println("转账成功");
}else{
conn.rollback(); //回滚
System.out.println("转账失败");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
DBUtil.release(conn, state);
}
}
/*
* 登录功能
* 逻辑:
* 1)根据用户名去表中查看密码,如果有与用户输入的密码是否相同
* 2)根据用户名和密码直接查看,看是否能够查到记录
*
*
* 推荐使用预处理块:
* 1.预先编译,执行效率高
* 2.防止sql注入
* ?在PreparedStatement是一个占位符
*
*/
public static void login(String name,String pwd){
String sql="select name from sxt_user where name=? and pwd=?";
Connection conn=null;
PreparedStatement state=null;
ResultSet result=null;
try {
conn=DBUtil.getConnection();
state=conn.prepareStatement(sql);
//完善sql语句,为占位符?赋值
state.setString(1, name);
state.setObject(2, pwd);
result=state.executeQuery();
if(result.next()){
System.out.println("登录成功");
}else{
System.out.println("登录失败");
}
} catch (SQLException e) {
e.printStackTrace();
} finally{
DBUtil.release(conn, state, result);
}
}
//注册工能
public static boolean reg(String name,String pwd){
boolean flag=false;
//获取连接
Connection conn=null;
Statement state=null;
try {
conn=DBUtil.getConnection();
state=conn.createStatement();
String sql="insert into sxt_user values(sq_sxt_user_id.nextval,'"+name+"',"+pwd+")";
int rows=state.executeUpdate(sql);
if(rows>0){
flag=true;
}
} catch (SQLException e) {
e.printStackTrace();
} finally{
DBUtil.release(conn, state, null);
}
return flag;
}
}