用面向对象的方式去连接数据库

来源:互联网 发布:海水无机氮数据 编辑:程序博客网 时间:2024/05/16 10:55

                                                                                       JAVA 连接 mysql 数据库

通常在程序中进行增删改查时,连接并对数据库进行操作的步骤为:

  1、建立数据源

  2、导入用到的包

  3、加载驱动程序

  4、创建与数据库的连接

  5、创建语句对象

  6、编写具体的SQL语句

  7、执行具体的SQL语句

  8、处理数据

  9、关闭对象

  10、处理异常

下面看一个简单的例子

public void select()

{

 Connection con = null;

 Statement stmt = null;

 ResultSet rs = null;

String user = "root" ;//用户名是root

String password = "root";//密码是root

 String driverName = "com.mysql.jdbc.Driver";

 String conStr = "jdbc:mysql://localhost:3306/db";//db是数据库的名字

try{

 Class.forName(driverName);

 con = DriverManager.getConnection(conStr,user,password);

 stmt = con.createStatement();

 String  sql = "select * from table";

 rs = stmt.executeQuery(sql);

while(rs.next())

{

 System.out.println(rs.getString(1));

}

}catch()

{}

finally

{

if(rs!=null){

 rs.close();

stmt.close();

con.close();

}

}

以上程序能满足要求,但是如果每个增删改查都要按这个步骤走下来是不是很繁琐?重复代码太多

下面进行简化,单独定义一个类,把重复代码放入类中。下面看例子

package bean;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DBBean {
 private Connection con = null;
 private Statement stmt = null;
 private ResultSet rs = null;
 private static final String DRIVER = "com.mysql.jdbc.Driver";
 private static final String URL = "jdbc:mysql://localhost:3306/db"; //db 是具体数据库的名字
 private static final String USER = "root";
 private static final String PASSWORD = "root";
 public DBBean()
 {
  String conStr = "jdbc:mysql://localhost:3306/db";
  try {
  Class.forName(DRIVER);
 } catch (ClassNotFoundException e1) {
  // TODO Auto-generated catch block
  e1.printStackTrace();
 }
  try {
  con = DriverManager.getConnection(conStr, USER, PASSWORD);
 } catch (SQLException e) {
  e.printStackTrace();
 }
  try {
  stmt = con.createStatement();
 } catch (SQLException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
 
 }

 }*/
 /**
  * 执行有结果集返回的SQL ,select
 * @throws SQLException
  */
 public ResultSet executeQuery(String sql) throws SQLException
 {
  return stmt.executeQuery(sql);
 
 }
 /**
  * 执行增删改操作的SQL
 * @throws SQLException
  */
 public int executeUpdate(String sql) throws SQLException
 {
  return stmt.executeUpdate(sql);
 
 }
 /**
  * 关闭对象
  */
 public void close()
 {
 
  try {
   if(rs!=null){
   rs.close();
   stmt.close();
   con.close();
   }
  } catch (SQLException e) {
   e.printStackTrace();
  }
 }
}
这样再用select函数时就可以这样写

public void select()
{
 
 ResultSet rs=null;
 DBBean db = null;
 try {
     db=new DBBean();   
  String sql = "select * from student";
  rs = db.executeQuery(sql);
  while(rs.next())
  {
   System.out.print(rs.getString(1)+" ");
   System.out.print(rs.getString(2)+" ");
   System.out.print(rs.getString(3)+ " ");
   System.out.println("\n");   
  }
 } catch (Exception e) {
  e.printStackTrace();
 }finally{ 
  db.close(); 
 }
}

 

以上就是面向对象的方式连接数据库,不知道大家还发现什么不好的问题没?

仔细观察发现,虽然公用方法定义在DBBean中了。但是连接数据库时db还是写死的

当想要连接具体的数据库时,就会出问题。下面是改进方案

package bean;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DBBean {
 private Connection con = null;
 private Statement stmt = null;
 private ResultSet rs = null;
 private static final String DRIVER = "com.mysql.jdbc.Driver";
 private static final String USER = "root";
 private static final String PASSWORD = "root";
 public DBBean(String db)       //增加一个参数  传入具体的数据库
 {
  String conStr = "jdbc:mysql://localhost:3306/"+db;
  try {
  Class.forName(DRIVER);
 } catch (ClassNotFoundException e1) {
  // TODO Auto-generated catch block
  e1.printStackTrace();
 }
  try {
  con = DriverManager.getConnection(conStr, USER, PASSWORD);
 } catch (SQLException e) {
  e.printStackTrace();
 }
  try {
  stmt = con.createStatement();
 } catch (SQLException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
 
 }

 }*/
 /**
  * 执行有结果集返回的SQL ,select
 * @throws SQLException
  */
 public ResultSet executeQuery(String sql) throws SQLException
 {
  return stmt.executeQuery(sql);
 
 }
 /**
  * 执行增删改操作的SQL
 * @throws SQLException
  */
 public int executeUpdate(String sql) throws SQLException
 {
  return stmt.executeUpdate(sql);
 
 }
 /**
  * 关闭对象
  */
 public void close()
 {
 
  try {
   if(rs!=null){
   rs.close();
   stmt.close();
   con.close();
   }
  } catch (SQLException e) {
   e.printStackTrace();
  }
 }
}
这样再调用select函数就变成这样

public void select()
{
 
 ResultSet rs=null;
 DBBean db = null;
 try {
     db=new DBBean("book");    //写入具体连接的数据库
  String sql = "select * from student";
  rs = db.executeQuery(sql);
  while(rs.next())
  {
   System.out.print(rs.getString(1)+" ");
   System.out.print(rs.getString(2)+" ");
   System.out.print(rs.getString(3)+ " ");
   System.out.println("\n");   
  }
 } catch (Exception e) {
  e.printStackTrace();
 }finally{ 
  db.close(); 
 }
}

 

 

 

 

 

 

 

 

0 0
原创粉丝点击