JDBC
:使用我们的应用程序去访问数据库中的数据;
JDBC访问数据库的过程:
1.加载数据库驱动
2.连接数据库文件(DB)
3.预编译SQL语句对象
4.执行SQL语句
5.获取返回结果
6.释放资源
DAO
:数据库访问对象,就是将数据库语句的执行操作单独的封装起来,不要和其他元素发生关系,使之形成单独的模块,便于重复利用。
注意点:一条sql语句对应一个Dao方法,同时Dao方法中不要有任意除数据库操作之外的其他元素(比如界面)
Dao类的命名规则:操作对象+Dao(比如:要实现用户增删改查则命名为:UserDao)
如果要进行dao的封装的话,最好先写一个类(DbUtil),把JDBC连接数据库的前两步进行打包,方便其他dao方法进调用。
代码如下:
public class DbUtil {
private static DbUtil dbUtil;
private Connection con;
public static DbUtil getDbUtil(){
if(dbUtil==null){
dbUtil=new DbUtil();
}
return dbUtil;
}
private DbUtil() {
//希望它只执行一次的语句
try {
Class.forName("org.sqlite.JDBC");
con = DriverManager.getConnection("jdbc:sqlite:CloudData.db");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void realse(PreparedStatement pre,ResultSet set){
try {
if(pre!=null){
pre.close();
}
if(set!=null){
set.close();
}
}catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public Connection getCon() {
return con;
}
public void setCon(Connection con) {
this.con = con;
}
}
再举一个例子来看看dao方法怎么写:
public boolean insert(String name, String pass) {
String sql=" INSERT INTO t_user VALUES (?,?,?)";
PreparedStatement pre=null;
try {
Connection con=DbUtil.getDbUtil().getCon();
pre=con.prepareStatement(sql);
pre.setString(1,null);
pre.setString(2,name);
pre.setString(3,pass);
int add=pre.executeUpdate();
//注意这句话如果是查询的话换成pre.executeQuery(),返回一个结果集
if(add>0){
return true;
}
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}finally{
DbUtil.getDbUtil().realse(pre, null);
}
return false;
}