数据库连接六步走

如何的连接数据库,在java中,连接数据库采用的是官方提供的JDBC技术作为java访问数据库的标准接口,不同的数据库可以利用不同的数据库驱动对数据库进行操作,例如利用mysql-connector-java-5.1.7-bin组件,可以对mysql进行操作。

使用JDBC连接数据库有六步操作:

1.  加载驱动。首先要加载数据库驱动,可以到数据库厂商的官方网站上下载,之后放在工程里面,一般建立一个bin目录,将组件放在bin目录下面,然后就可以加载数据库驱动,常见的加载数据库驱动的方法是Class.forName(“驱动程序完全限定名”);将驱动类的完全限定名作为参数,如:

Class.forName(“com. mysql. jdbc.Driver”);

com.mysql.jdbc.Drivermysql的完全限定名,数据库驱动加载一次即可完成整个数据可访问过程。

2.   建立连接。之后建立与数据库的连接,例如:

String url = "jdbc:mysql://localhost:3306/blog?characterEncoding=GBK";         

Connection conn = DriverManager.getConnection(url, "root","rootroot");

其中url为连接路径,localhost为连接本机,也可以写IP地址,3306为数据库连接的端口,blog为数据库的名字,里面包含若干的数据表,后面的connection为获取连接,root为数据库的用户名,rootroot为连接数据库的密码。

3  生成sql语句。

     生成sql语句,包括增删改查,其实所有的sal语句都为拼出来的字符串,还可以传参数,例如:

     String sql = "insert into test values (4,'tom',21)";//插入数据

     String sql="update test set tname='sally',tage=20 where tid=2";//修改数据

4.       执行sql语句

Statement stmt = conn.createStatement();

int rows = stmt.executeUpdate(sql);// 可以执行insertupdatedelete语句,返回执行的数据库表的行数

其中增删改操作用的是executeupdate.若是查询操作则应该使用executeQuery(sql).切返回值是一个集合,要用相应的类产生的对象接受。

5.       处理执行的结果

就是对4中的rows进行处理,也就是判断,

if (rows > 0) {

                     System.out.println("成功");

               } else {

                           System.out.println("失败");

                         }

6.       关闭数据库的连接,

stmt.close();

conn.close();

数据库使用完毕后要关闭与数据库的连接,释放资源。

如下两例:

1.数据库的增删改操作:

public static void main1(String[] args) {

                  // 1.确定驱动程序,并且加载驱动程序

                  // com.mysql.jdbc.Driver

                  try {

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

                  } catch (Exception e) {

                           // 异常处理

                           e.printStackTrace();// 把错误信息输出到控制台

                  }

                  // System.out.println("数据库驱动加装成功");

                  try {

                           // 2.建立与数据库的连接

                           String url = "jdbc:mysql://localhost:3306/blog?characterEncoding=GBK";

                           Connection conn = DriverManager.getConnection(url, "root",

                                              "rootroot");

                           // 3.生成sql语句

//                       String sql = "insert into test values (4,'tom',21)";

//                       String sql="update test set tname='sally',tage=20 where tid=2";

                           String sql="delete from test where tid=1";

                           Statement stmt = conn.createStatement();

                           // 4.执行sql语句

                           int rows = stmt.executeUpdate(sql);// 可以执行insertupdatedelete语句,返回执行的数据库表的行数

 

                           // 5.处理执行的结果

                           if (rows > 0) {

                                     System.out.println("成功");

                           } else {

                                     System.out.println("失败");

                           }

                           // 6.关闭与数据库的连接

                           stmt.close();

                           conn.close();

                  } catch (Exception e) {

                           e.printStackTrace();

                  }

         }

2.数据库的查询操作:

public static void main(String[] args) {

                   //1.加载驱动

                   try {

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

                   } catch (Exception e) {

                            // 异常处理

                            e.printStackTrace();// 把错误信息输出到控制台

                  }

                   try {

                            //2.建立连接

                            String url = "jdbc:mysql://localhost:3306/blog?characterEncoding=GBK";

                            Connection conn = DriverManager.getConnection(url, "root",

                                               "rootroot");

                            String  sql="select * from test";

                            Statement stmt=conn.createStatement();

                            ResultSet rs= stmt.executeQuery(sql);//执行查询语句,select

                            while(rs.next())

                            {

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

                                     String tname=rs.getString("tname");

                                     int tage=rs.getInt("tage");

                                     System.out.println("id:"+id+",name:"+tname+",tage:"+tage);

                            }

                            rs.close();

                            stmt.close();

                            conn.close();

                   } catch (SQLException e) {

                            // TODO Auto-generated catch block

                            e.printStackTrace();

                   }

         }

 

 

在实际项目中,这些操作只需要写在一个类中作为父类,用时子类继承父类的内容,可以减少代码的编写量,并且在事物处理中,一个事物只需建立一次连接就可以了,不需要重复连接和关闭,并且在父类中,重写executeUpdate(String sql,Object…args)executeQuery(String sql,Object…args)这样在使用时,就直接可以传参数,减少了很多的代码,以下将重写的代码写出:

//修改,更新,增加

   public int executeUpdate(String sql,Object... args)

   {

      Connection conn=null;

      PreparedStatement pst=null;

      try {

        conn=this.getConnection();

        pst=conn.prepareStatement(sql);

        if(args!=null)

        {

           for (int i = 0; i < args.length; i++) {

           pst.setObject(i+1, args[i]);

           }

        }

        introws=pst.executeUpdate();

        return rows;

      } catch(SQLException e) {

        // TODO Auto-generated catch block

        e.printStackTrace();

      }finally

      {

        this.close(pst);

//      this.close(conn);

      }

      return -1;   

   }

   public static interface RowMapper

   {

      public Object rowMapper(ResultSet rs)throws SQLException;

   }

   //查找

   public ListexecuteQuery(String sql,RowMappermapper,Object...args) {

Listlist=newArrayList();Connection conn=null;

      PreparedStatement pst=null;

      ResultSet rs=null;

      try {

        conn=this.getConnection();

        pst=conn.prepareStatement(sql);

        if(args!=null)

        {

           for (int i = 0; i < args.length; i++) {

              pst.setObject(i+1, args[i]);

           }

        }

        rs=pst.executeQuery();

        while(rs.next())

        {

           Object result=mapper.rowMapper(rs);

           list.add(result);

        }

      } catch(SQLException e) {

        // TODO Auto-generated catch block

        e.printStackTrace();

        

      finally

      {

        this.close(rs);

        this.close(pst);

//      this.close(conn);

      }

      return list;

  }

 

理论只是理论,项目才使程序员成长,以上内容纯属个人手工编写,属于个人学习笔记,只为以后发展开方便之门,有不正确或不足的地方,望各路大侠批评指正。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值