JAVA jdbc(数据库连接池)学习笔记(一)

学习内容:

1.JDBC的含义...

JDBC想必学过JAVA的就不会陌生,JDBC到底是什么呢?其实就是由JAVA的一些类和接口构成的API,保存在java.sql和javax.sql..包中的一些API...

2.使用JDBC的原因...

  那么为什么要使用,这个想必大家也是更为了解了,一个应用程序如果不和数据库进行连接,那这根本就不算是个应用程序,那么应用程序是不能直接对数据库进行操作的,那么就需要一个辅助工具去连接数据库,从而操作数据库...那这个辅助的工具就是JDBC了,这个仅限于JAVA应用程序...其实总体的规模就是这样:应用程序——>JDBC——>(mysql driver——>mysql)

                       JDBC——>(oracle driver——>oracle)

                       JDBC——>(DB2 driver——>db2)就是这么简单的事...多余的就不罗嗦了...

3.如何使用JDBC...

如何使用JDBC,才是真正的重点...使用JDBC分为几个步骤...

我这里只对链接mysql进行讲解...

i.首先注册驱动

Class.forName("com.mysql.Driver");//这种方式是最好的,不会对具体驱动产生依赖...

DriverManager.registerDriver(com.mysql.jdbc.Driver);//会产生两个相同的驱动,并会对具体驱动产生依赖...

System.setProperty("jdbc.drivers","driver1:driver2");//基本不常用,所以可以不用记,一般就使用第一种就行了...

ii.建立连接

Connection conn = DriverManager.getConnection(url, user, password);  

iii.创建执行SQL语句...

Statement st = conn.createStatement();  

st.executeQuery(sql);  

PreparedStatement  

String sql = "select * from table_name where col_name=?";  

PreparedStatement ps = conn.preparedStatement(sql);  

ps.setString(1, "col_value");  

ps.executeQuery();  

iv.处理执行结果...

    ResultSet rs = statement.executeQuery(sql);  

    While(rs.next()){  

    rs.getString(“col_name”);  

    rs.getInt(“col_name”);  

    }  

v.释放资源...

释放资源这是必须的,使用close()进行关闭...由于数据库的资源是非常珍贵的,因此只要我们不去使用资源的时候,一定要记得释放...

先来个例子:还是例子更加的好理解...

import java.sql.*;//1.引包是必须的...



public class JDBC_1_1 {

    static final String JDBC_DRIVER="com.mysql.jdbc.Driver";

    static final String DB_URL ="jdbc:mysql://localhost:3306/emp";//这个链接是我本机的数据库emp...emp里有个表格叫employees....

    /*表格的信息

     *create table employees

     *(

     *    id int not null,

     *    first varchar(255) not null,

     *    last varchar(255) not null,

     *    age int not null

     *);

     */

    static final String USER="root";//登陆数据库时的用户名...

    static final String PAS="49681888";登陆时的密码...

    public static void main(String[] args) {

        // TODO Auto-generated method stub

        Connection conn=null;

        Statement stmt=null;//

        try {

            //2.注册JDBC驱动程序...

            Class.forName("com.mysql.jdbc.Driver");

            //3.打开一个链接...

            System.out.println("Connection database....");

            conn=DriverManager.getConnection(DB_URL,USER,PAS);



            //4.执行一个操作...

            System.out.println("Creating statement");

            stmt=conn.createStatement();

//          String sql;

//          sql="select id,first,last,age from employees"; 这个是查询操作...

//          ResultSet rs=stmt.executeQuery(sql);

            String sql_1="insert into employees " + "values (7, 'z', 'yh', 20)";//插入操作...

            stmt.executeUpdate(sql_1); 

            

            

            5.提取数据...

//          while(rs.next()){  //rs用来保存sql执行后的结果...

//              int id=rs.getInt("id");

//              int age=rs.getInt("age");

//              String first=rs.getString("first");

//              String last=rs.getString("last");   

//              System.out.println(id+" "+age+" "+first+" "+last);

//          }

            6.清理环境

//          rs.close();

            stmt.close();

            conn.close();

        } catch (Exception e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

            System.out.println("no class");

        }finally{

            if(stmt!=null){

                try {

                    stmt.close();

                } catch (SQLException e) {

                    // TODO Auto-generated catch block

                    e.printStackTrace();

                }

            }

            if(conn!=null){

                try {

                    conn.close();

                } catch (SQLException e) {

                    // TODO Auto-generated catch block

                    e.printStackTrace();

                }

            }

        }

        System.out.println("Goodbye");

    }



}

其他操作,比如说删除啊,更改啊,这个模式基本都差不多...就不进行解释了...

  注意:如果我们使用JDBC的时候,一定要检查检查自己的的jdk的lib文件夹下有没有mysql-connector-java-5.1.18-bin.jar这个压缩文件..如果没有,那么程序运行时会出现错误...解决方法就是我们下一个mysql-connector-java-5.1.18-bin.jar这个文件,几k而已,下载完毕之后直接拷贝到jdk的lib文件夹下即可..

  如果使用的是eclipse,我们还要导入这个文件...右击我们建立的项目文件,然后点击build path——>configure build path,弹出对话框以后,点击Libraries——>Add External JARs...找到这个mysql-connector-java-5.1.18-bin.jar文件导入,然后就可以了...

4.使用JDBC实现CURD操作...什么是CURD操作呢?其实就是对数据进行更新,删除等操作...

这里我们采用分层操作...这个代码很长...

首先是User实体...

package JDBC_3;

import java.util.Date;

class User{            //user类..

    private int id;

    private String name;

    private Date birthday;

    private float money;

    public User(){

    }

    public User(int id,String name,Date birthday,float money){

        this.id=id;

        this.name=name;

        this.birthday=birthday;

        this.money=money;

    }

    public int getid(){

        return id;

    }

     public void setId(int id) {  

            this.id = id;  

        }  

        public String getName() {  

            return name;  

        }  

        public void setName(String name) {  

            this.name = name;  

        }  

        public Date getBirthday() {  

            return birthday;  

        }  

        public void setBirthday(Date birthday) {  

            this.birthday = birthday;  

        }  

        public float getMoney() {  

            return money;  

        }  

        public void setMoney(float money) {  

            this.money = money;  

        }  

      

        @Override  

        public String toString(){  

            return "[id="+id+",name="+name+",birthday="+birthday+",money="+money+"]";  

        }  

}

接着是我们的Dao层,就是接口...

package JDBC_3;



interface UserDao{

    public abstract void addUser(User user);

    public abstract User getUserById(int userid);

    public abstract int update(User user);

    public abstract int delete(User user);

}

然后是实现接口的类...

package JDBC_3;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.SQLException;

import java.sql.Date;

import java.sql.ResultSet;

/*

 * JDBC实现crud操作

 * crud操作就是对数据进行增删改查...

 * */

public class JDBC_3_1_server implements UserDao{

    static final String DB_URL="jdbc:mysql://localhost:3306/emp";

    static final String user_1="root";

    static final String pas="49681888";

    static{

        try {

            Class.forName("com.mysql.jdbc.Driver");

        } catch (ClassNotFoundException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

    }

    public void addUser(User user){

        Connection cn=null;

        PreparedStatement ps=null;

        try {

            cn=DriverManager.getConnection(DB_URL,user_1,pas);

            String sql="insert into userr values(2,'clearlove','1995-01-26',200)";

            //String sql="insert into userr values(?,?,?,?)";这句话是传参数是未知的,需要我们进行获取...

            ps=cn.prepareStatement(sql);

            //这四个函数就是为了获取我们插入的信息...上面采用了直接在sql里写入我们要插入的数据,其实我们也可以在主函数里进行传参...见下面主函数...

//            ps.setInt(1,user.getid());

//            ps.setString(2,user.getName());

//            ps.setDate(3, new Date(user.getBirthday().getTime()));

//            ps.setFloat(4, 20);

            int count=ps.executeUpdate();

            System.out.println("添加的记录数"+count);

            ps.close();

            cn.close();

            

        } catch (Exception e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

            

        }finally{

            if(ps!=null){

                try {

                    ps.close();

                } catch (SQLException e) {

                    // TODO Auto-generated catch block

                    e.printStackTrace();

                }finally{

                    if(cn!=null){

                        try {

                            cn.close();

                        } catch (SQLException e) {

                            // TODO Auto-generated catch block

                            e.printStackTrace();

                        }

                    }

                }

            }

        }

        

    }

    public User getUserById(int userid){

        Connection cn=null;

        PreparedStatement ps=null;

        ResultSet rs=null;

        try {

            cn=DriverManager.getConnection(DB_URL,user_1,pas);

            String sql="select * from userr where id=1";

            //导入sql语句...

            ps=cn.prepareStatement(sql);

            //保存执行sql语句后的结果对象...

            rs=ps.executeQuery();

            ps.close();

            cn.close();

            rs.close();

        } catch (Exception e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }finally{

            if(ps!=null){

                try {

                    ps.close();

                } catch (SQLException e) {

                    // TODO Auto-generated catch block

                    e.printStackTrace();

                }

            }

            if(rs!=null){

                try {

                    rs.close();

                } catch (SQLException e) {

                    // TODO Auto-generated catch block

                    e.printStackTrace();

                }

            }

            if(cn!=null){

                try {

                    cn.close();

                } catch (SQLException e) {

                    // TODO Auto-generated catch block

                    e.printStackTrace();

                }

            }

        }

        return null;

    }

    public int update(User user){

        Connection cn=null;

        PreparedStatement ps=null;

        try {

            cn=DriverManager.getConnection(DB_URL,user_1,pas);

            String sql="update userr set name='clearlove',birthday='1994-12-19',money=60 where id=1";

            ps=cn.prepareStatement(sql);

            int count=ps.executeUpdate();

            return count;

        } catch (SQLException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }finally{

            try {

                cn.close();

                ps.close();

            } catch (Exception e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            }

        }

        return 0;

    }

    public int delete(User user){

        Connection cn=null;

        PreparedStatement ps=null;

        try {

            cn=DriverManager.getConnection(DB_URL,user_1,pas);

            String sql="delete from userr where id=1";

            ps=cn.prepareStatement(sql);

            int count=-1;

            count=ps.executeUpdate();

            return count;

        } catch (SQLException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }finally{

            try {

                cn.close();

                ps.close();

            } catch (Exception e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            }        

        }

        return 0;

    }

}

接着是服务层...

package JDBC_3;

class userserves {

    

    private UserDao userDao;

    public userserves(){

        userDao =DaoFactory.getInstance().createUserDao();//通过工厂实例化一个例子。。

        System.out.println("userDao "+userDao);

    }

    

    public void regist(User user){

        if(user==null){

            System.out.println("注册表信息无效...");

        }else{

            userDao.addUser(user);

        }

    }

    

    public User query(int userId){  

        User user = userDao.getUserById(userId);  

        if(user == null){  

            System.out.println("查询结果为空!!");  

        }else{  

            System.out.println(user.getid()+"\t"+user.getName()+"\t"+user.getBirthday()+"\t"+user.getMoney());  

        }  

        return userDao.getUserById(userId);  

    }  

    

    public void update(User user){

        if(user.getid()<0){

            System.out.println("用户id无效,重新输入");

        }else{

            userDao.update(user);

        }

    }

    

    public void delete(User user){

        if(user.getid()<0){

            System.out.println("用户id无效,重新输入");

        }else{

            userDao.delete(user);

        }

    }

}

定义一个工厂模式来实例化对象UserDao。。。

package JDBC_3;

class DaoFactory{

    private static UserDao userdao=null;

    private static DaoFactory instance= new DaoFactory();

    private DaoFactory(){

        try {

            userdao=(UserDao)Class.forName("JDBC_3.JDBC_3_1_server").newInstance();

        } catch (Exception e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        } 

    }

    public static DaoFactory getInstance(){

        return instance;

    }

    public UserDao createUserDao(){

        return userdao;

    }

}

最后是测试类...

package JDBC_3;

import java.sql.Date;

public class JDBC_3_1_ceshi {



    public static void main(String[] args) {

        // TODO Auto-generated method stub

        userserves userse=new userserves();

        System.out.println("添加用户");

        userse.regist(new User()); //这句话我们也可以这样

        //userse.regist(new User(1,"clearlove","1995-01-26",300));这样写我们可以固定传参...但是上面的一些代码就要进行修改了...

    }



}

上面的代码估计是有点长,但是也没关系...一名优秀的程序员这点代码对于我们来说算什么呢?其实上面的例子是很好理解的...都是一些基本的东西...

我们除了上述那种方式可以对类名进行加载,我们还可以使用proprties...是一种很灵活的方式...

private DaoFactory(){  

        /** 

         * 通过读取属性文件来动态的加载Dao层类 

         */  

        Properties prop = new Properties();  

        try{  

            FileInputStream fis = new FileInputStream("src/com/weijia/domain/daoconfig.properties");  

            prop.load(fis);  

            String className = prop.getProperty("userDaoClass");  

            Class<?> clazz = Class.forName(className);  

            userDao = (UserDao)clazz.newInstance();  

            fis.close();  

        }catch(Exception e){  

        }  

    }  

这里的数据库就是一个简单的数据库...

create table userr

( 

    id int not null,

    name varchar(255) not null,

    birthday Date,

    money float not null

);

 

你可能感兴趣的:(数据库连接池)