目录
一、JDBC是什么
1、JDBC:访问数据库的解决方案
2、JAVA定义了一套标准接口,即访问数据库的通用API,不同的数据库厂商根据各自的数据库特点去实现这些接口
3、JDBC希望用相同的方式访问不同的数据库,让具体的数据库操作与数据库厂商无关,从而在不同数据库之间轻易切换
4、JAVA提供解决方案,数据库用接口去实现
二、JDBC链接数据库的六个步骤
1、加载驱动
2、通过DriverMannager获取连接对象
3、创建statement用于执行SQL语句
4、查询结果返回ResultSet
5、释放资源
三、添加jar包
四、DaoUtil
1、加载驱动、获取链接对象
通过Class.forName()方法反射完成驱动类注册
static {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static Connection getConn() {
Connection conn=null;
try {
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/myschool?serverTimezone=GMT","root","123456");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
2、释放资源
public static void close(ResultSet rs,Statement state,Connection conn) {
//释放
if(rs!=null) {
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//释放statement
if(state !=null) {
try {
state.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//释放connection
if(conn!=null) {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
五、BaseDaoUtil层
不同的SQL语句,要调用不同的方法来执行:
- statement用于执行DML,返回int型的影响行数
int count =stmt.exxecuteUpdate(sql);
- statement用于执行DQL,返回结果集由ResultSet接收
ResultSet rs=stmt.executeQuery(sql);
public class UpdateAndFind{
protected static Connection conn;
protected static Statement state;
protected static ResultSet rs;
//增删改
protected int update(String sql) {
int ret=0;
try {
conn = DaoUtil.getConn();
state = conn.createStatement();
ret = state.executeUpdate(sql);
} catch (SQLException e) {
e.printStackTrace();
}finally {
DaoUtil.close(null, state, conn);
}
return ret;
}
//查询
protected ResultSet find(String sql) {
int ret=0;
try {
conn = DaoUtil.getConn();
state = conn.createStatement();
rs = state.executeQuery(sql);
} catch (SQLException e) {
e.printStackTrace();
}
return rs;
}
六、基本操作
1、查询
@Override
public List<Student> findAll() {
List<Student> slist=null;
try {
rs=find("select * from student");
if(rs !=null) {
slist=new ArrayList<Student>();
while(rs.next()) {
Student s=new Student();
s.setSid(rs.getInt("sid"));
s.setSname(rs.getString("sname"));
s.setBirthday(rs.getDate("birthday"));
s.setSsex(rs.getString("ssex"));
s.setClassid(rs.getInt("classid"));
slist.add(s);
}
}
}catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
//释放资源
DaoUtil.close(rs, state, conn);
}
return slist;
}
2、新增
@Override
public int add(Student s) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String sql = "insert into student(sname,birthday,ssex,classid) "
+ "values('"+s.getSname()+"','"+ sdf.format(s.getBirthday()) +"','"+s.getSsex()+"',"+s.getClassid()+")";
int ret =update(sql);
if(ret>0) {
System.out.println("新增成功");
}else {
System.out.println("新增失败");
}
return ret;
}
3、修改
@Override
public int update(Student s) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String sql="update student set sname= '"+s.getSname()+"',birthday='"+sdf.format(s.getBirthday())+"',ssex='"+s.getSsex()+"',classid='"+s.getClassid()+"'";
int ret = update(sql);
if(ret>0) {
System.out.println("修改成功");
}else {
System.out.println("修改失败");
}
return ret;
}
4、删除
@Override
public int del(int sid) {
int ret = update("delete from student where sid='"+sid+"'");
if(ret >0) {
System.out.println("删除成功");
}else {
System.out.println("删除失败");
}
return ret;
}