JDBC编程

JDBC编程-----数据库的链接

本文转自:http://blog.csdn.net/hanxiaoshuang123/article/details/6776539

1、创建一个以JDBC连接数据库的程序,包括如下7个步骤。

(1)加载JDBC驱动程序
Class.forName(“com.mysql.jdbc.Driver”);
或者:Driver driv=new com.mysql.jdbc.Driver();
           DriverManager.registerDriver(driv);

(2)提供JDBC连接的URL
String url="jdbc:mysql://localhost:3306/test";
String username="root";
String password="1234";

或urll ="jdbc:mysql://localhost:3306/test?user=root&password=1234”

(3)创建数据库的连接
Connection con;
con=DriverManager.getConnection(url,username,password);

或con=DriverManager.getConnection(urll);

(4)创建一个Statement
Statement stat=con.createStatement();

(5)执行SQL语句
stat.executeUpdate(sql);//sql是insert、update和delete语句
stat.executeQuery(sql);//sql是select语句
stat.execute(sql);  //多个结果集、多个更新计数或组合语句

(6)处理结果---执行结果可能会出现两种情况

执行更新返回的是本次操作影响到的记录数

执行查询返回的结果是一个ResultSet对象,该对象以0或多条记录的形式包含了查询结果,可以通过隐含的游标(指针)来定位数据,初始化时,游标位于第一条记录前,可以通过next()方法移动到下一条记录。

ResultSet rs=stat.executeQuery(“select …”);

rs.next();//移动游标到第一条记录,如果没有到最后一条记录的后面,方法返回true,否则返回false。

例子:

    while(rs.next()){

      //读取游标所指的记录行数据

      System.out.println(“学号:”+rs.getInt(1));

      System.out.println(“学号:”+rs.getInt(“id”));

}

ResultSet对象rs中有getXXX()方法,可从当前记录行中获取指定列的信息,可通过指定列索引号或列明两种方式指定要读取的列。

(7)关闭JDBC对象
在操作完成以后要把所使用的JDBC对象全部关闭,以释放JDBC资源,关闭的顺序和声明顺序相反。

finally{
   if(rs!=null){
       try {
       rs.close();
       } catch (SQLException e) {
       e.printStackTrace();
       }
   }…
}

 

2.JDBC的链接,完成对数据库的访问,对数据的增、删、改、查

 注:用面向对象的方法

 

第一步:建立表结构 

第二步:创建一个包为 cn.hbsi.bean 的包,然后在此包下创建类,类中定义的是在数据库中建立的列,在此类中把这些列定义为私有的属性,并用getter  setter 方法来初始化,以便于在访问数据库时可以使用私有的属性。

第三步:建立一个工具类,用来封装数据库中必备的连接,其中包括用户名、密码、连接的路径,而且用户名、密码、连接的路径都放在一个配置文件中。(配置文件就是存放键值对的,所以存放的数据是一一对应的)

注:重要的是在第二步,它所包含的是所有要对数据库操作的方法,操作方法一般情况下为boolean类型的,所以要注意及时修改boolean类型的值

 

重点说一下在连接数据库的时候注意的事项--------查询数据库:

第一步:因为要执行和数据库的操作会很多,所以可以把Connection   preparedStatement    ResultSet   这三个类提取出来用私有变量去定义,使用时可以直接调用类的对象,例如:

private Connection conn;

    private PreparedStatement pstmt;//预处理类

  private ResultSet rs; 

第二步:获取连接对象

   conn = JdbcUtil.getConnection();

第三步: 定义SQL语句---------查询的语句

String sql = “insert into studInfo(name,sex,remune,image) values(?,?,?,?)”;

第四步:创建预处理对象

    pstmt = conn.prepareStatement(sql);

第五步:为占位符赋值

    int index = 1;//定义index,是在显示的是?的赋值

    pstmt.setString(index++, entity.getName());//用到的index++可以避免定义固定的,可以自增

    pstmt.setString(index++, entity.getSex());

    pstmt.setString(index++, entity.getResume());

    pstmt.setObject(index++, entity.getImage());

第六步:执行更新

    int i = pstmt.executeUpdate();

第七步:判断

    if(i > 0){

       flag = true;

    }

第八步:释放资源

   JdbcUtil.release(rs, pstmt, conn);

 

实例:

public boolean insert(StudentInfo entity){

       boolean flag = false;

       try {

           //第二步:获取连接对象

           conn = JdbcUtil.getConnection();

           //第三步:定义SQL语句

           String sql = "insert into studInfo(name,sex,resume,image) values(?,?,?,?)";

           //第四步:创建预处理对象

           pstmt = conn.prepareStatement(sql);

           //第五步:为占位符赋值

           int index = 1;

           pstmt.setString(index++, entity.getName());

           pstmt.setString(index++, entity.getSex());

           pstmt.setString(index++, entity.getResume());

           pstmt.setObject(index++, entity.getImage());

           //第六步:执行更新

           int i = pstmt.executeUpdate();

           //第七步:判断

           if(i > 0){

              flag = true;

           }

           //第八步:

           JdbcUtil.release(rs, pstmt, conn);

       } catch (SQLException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       }

       //必须注意修改返回值

       return flag;

      

    }

//主方法测试

    public static void main(String[] args) throws FileNotFoundException {

       // TODO Auto-generated method stub

       StudentHandle sh = new StudentHandle();

       StudentInfo entity = new StudentInfo();

       //准配实体bean对象,即是向列表中插入数据,通过面向对象的思想去调用私有成员的getter  setter方法

      

       entity.setName("gehref");

       entity.setSex("女");

       entity.setResume("高级工程师");

       //向数据库中添加图片

        entity.setImage(StudentInfo.class.getClassLoader().getResourceAsStream("./image/ai.jpg"));

    sh.insert(entity);

}

注意:在写的时候可能会出现很多问题,比如在复制时么有该数据库名,么有导入数据库,配置文件的位置不对,或是配置文件中的数据不对都很有可能出现

 

在实现其他的操作的时候,和查询的操作大同小异

删除的操作:

   public boolean delete(Student entity) {

    第一步:声明返回结果变量

       boolean flag = false;

 

      try {

           第二步:获取连接对象

              conn = JdbcUtil.getConnection();

           第三步:定义sql语句

              String sql = "delete from student where id=?";

          第四步:根据sql语句创建预处理对象

             pstmt = conn.prepareStatement(sql);

          第五步:为站位符赋值

            int index = 1;

            pstmt.setObject(index++, entity.getId());

           第六步:执行更新

          int i = pstmt.executeUpdate();

           第七步:判断

              if (i > 0) {

                 flag = true;

              }

          第八步:释放资源

              JdbcUtil.release(rs, pstmt, conn);

 

      } catch (SQLException e) {

          // TODO Auto-generated catch block

          e.printStackTrace();

      }

 

      /*    *****修改返回变量值 */

      return flag;

   }

 

更新的操作,和插入一样

   public boolean update(Student entity) {

      /* 第一步:声明返回结果变量 */

      boolean flag = false;

 

      try {

          /* 第二步:获取连接对象 */

          conn = JdbcUtil.getConnection();

          /* 第三步:定义sql语句 */

          String sql = "update student set name=?,sex=?,resume=?,image=? where id=?";

          /* 第四步:根据sql语句创建预处理对象 */

          pstmt = conn.prepareStatement(sql);

          /* 第五步:为站位符赋值 */

          int index = 1;

          pstmt.setObject(index++, entity.getName());

          pstmt.setObject(index++, entity.getSex());

          pstmt.setObject(index++, entity.getResume());

          // pstmt.setBinaryStream(parameterIndex, x)

          pstmt.setObject(index++, entity.getImage());

          pstmt.setObject(index++, entity.getId());

          /* 第六步:执行更新 */

          int i = pstmt.executeUpdate();

          /* 第七步:判断 */

          if (i > 0) {

             flag = true;

          }

          /* 第八步:释放资源 */

          JdbcUtil.release(rs, pstmt, conn);

 

      } catch (SQLException e) {

          // TODO Auto-generated catch block

          e.printStackTrace();

      }

 

      /*    *****修改返回变量值 */

      return flag;

   }

显示所有的信息

   public List<Student> findAll() {

      /* 第一步:声明返回结果变量 */

       用到泛型

       List<Student> entities = new ArrayList<Student>();

 

      try {

          /* 第二步:获取连接对象 */

          conn = JdbcUtil.getConnection();

          /* 第三步:定义sql语句 */

          String sql = "select id,name,sex,resume,image from student";

          /* 第四步:根据sql语句创建预处理对象 */

          pstmt = conn.prepareStatement(sql);

          /* 第五步:为站位符赋值 */

 

          /* 第六步:执行查询 */

          rs = pstmt.executeQuery();

          /* 第七步:判断 */

          while (rs.next()) {

             // 每指向一条记录就对应一个崭新的对象 在循环中声明实体bean对象

             数据多,把数据放到一个类里封装

             Student entity = new Student();

             // 为每条记录对应的对象赋值

             entity.setId(rs.getInt("id"));

             entity.setName(rs.getString("name"));

             entity.setSex(rs.getString("sex"));

             entity.setResume(rs.getString("resume"));

             entity.setImage(rs.getBinaryStream("image"));

             // 把每条记录对应的对象添加到集合中进行保存

             entities.add(entity);

          }

          /* 第八步:释放资源 */

          JdbcUtil.release(rs, pstmt, conn);

 

      } catch (SQLException e) {

          // TODO Auto-generated catch block

          e.printStackTrace();

      }

 

      /*    *****修改返回变量值 */

      return entities;

}


你可能感兴趣的:(JDBC编程)