(在上一篇文章中,我们详细的介绍了连接数据库的方法,以及eclipse操作数据库信息的相关方法,在这里我们将主要讲封装。)
主要内容:
一般的连接数据库测试
把连接数据库的方法封装成一个类和测试
一个简单的插入表实例
查询数据实例
封装查询的数据库的信息
封装信息后的查询数据库
一.一般的数据库连接测试
1 public classTestConnection1 {2 public static void main(String[] args) throwsException {3 Class.forName("com.mysql.jdbc.Driver");4 String url="jdbc:mysql://localhost:3306/test?"//数据库url
5 + "useUnicode=true&characterEncoding=UTF8";//防止乱码
6 String user="h4";7 String pass="111";8 Connection conn=DriverManager.getConnection(url, user, pass);9
10 System.out.println(conn+",成功连接数据库");11 conn.close();12 }13 }
二.我们不可能每写一个处理信息功能就写一次连接,这样太麻烦,那么为了方便以后的应用,我们通常把数据库连接封装起来。
具体实现步骤如下:
1.定义变量:
private static String DRIVER_CLASS;
private static String URL;
private static String USERRNAME;
private static String PASSWORD;
2.在你建的eclipse根目录下新建一个File文件Properties;
文件内容为你定义的变量所指向的对象:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test? useUnicode=true&characterEncoding=UTF8
user=h4
pass=111
3.构建一个Properties对象:Properties p=new Properties();
4. java.io下的类FileInputStream的方法;FileInputStream(String name) :通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name 指定。
来获取这个文件里面的资料:FileInputStream fis=new FileInputStream("db.properties");
5. 用3构建的变量p来下载资料:p.load(fis);
6.利用getProperty();获取参数:
DRIVER_CLASS=p.getProperty("driver");
URL=p.getProperty("url");
USERRNAME=p.getProperty("user");
PASSWORD=p.getProperty("pass");
7.写一个连接数据库的方法getConection();
8.写一个关闭数据库的方法close(Connection conn);
写好后代码如下:
1 public classjdbcutil {2 private staticString DRIVER_CLASS;3 private staticString URL;4 private staticString USERRNAME;5 private staticString PASSWORD;6 private static Properties p=newProperties();7 static{8 try{9 FileInputStream fis=new FileInputStream("db.properties");10 p.load(fis);11 DRIVER_CLASS=p.getProperty("driver");12 URL=p.getProperty("url");13 USERRNAME=p.getProperty("user");14 PASSWORD=p.getProperty("pass");15 Class.forName(DRIVER_CLASS);16 fis.close();17 } catch(IOException e) {18 e.printStackTrace();19 } catch(ClassNotFoundException e) {20 e.printStackTrace();21 }22 }23 public staticConnection getConection(){24 Connection conn=null;25 try{26 conn=DriverManager.getConnection(URL, USERRNAME, PASSWORD);27 }28 catch(Exception e) {29 e.printStackTrace();30 }31 returnconn;32 }33 public static voidclose(Connection conn) {34 try{35 if (conn != null)36 conn.close();37 } catch(Exception e) {38 e.printStackTrace();39 }40 }41
42 }
那么封装好之后,我们来写一个测试类,测试连接
1 public classTestConnection2 {2
3 public static void main(String[] args) throwsException {4 Connection conn=jdbcutil.getConection();//利用封装好的类名来调用连接方法便可
5 System.out.println(conn+",成功连接数据库");6 jdbcutil.close( conn);//同样利用类名调用关闭方法即可
7 }8 }
三.连接成功,我们写一个简单的向数据库插入表的实例。
1 public classTestDDl {2
3 public static voidmain(String[] args) {4 Connection conn=null;5 Statement stmt=null;6 conn=jdbcutil.getConection();//连接数据库
7 String createTableSql= " create table user_test1( "+//记住引号和单词间一定要有空格
8 " id int, "+
9 " name varchar(32) , "+
10 " password varchar(32) , "+
11 " birthday date "+
12 " ) ";13 try{14 stmt=conn.createStatement();15 stmt.execute(createTableSql);16 } catch(SQLException e) {17 e.printStackTrace();18 }19 jdbcutil.close(null, stmt, conn);//关闭数据库
20 }21 }
四.我们在写一个查询数据库数据的实例。(有三种方法)
1 public classTestDQL {2 public static voidmain(String[] args){3 Connection conn=null;//定义为空值
4 Statement stmt=null;5 ResultSet rs=null;6 String sql="select * from employees";//sql语句
7 conn=jdbcutil.getConection();8 try{9 stmt=conn.createStatement();//创建一个Statement语句对象
10 rs=stmt.executeQuery(sql);//执行sql语句
11 while(rs.next()){12 System.out.print(rs.getInt(1)+",");13 System.out.print(rs.getString(2)+",");//直接使用参数14 System.out.print(rs.getString(3)+",");15 System.out.print(rs.getString(4)+",");16 System.out.println(rs.getString(5));17 }18 } catch(SQLException e) {19 e.printStackTrace();20 }finally{21 jdbcutil.close(rs,stmt,conn);//关闭数据库
22 }23 }24 }
//第二种方法如下:
1 public classTestDQl2 {2
3 public static voidmain(String[] args) {4 Connection conn=null;5 Statement stmt=null;6 ResultSet rs=null;7 String sql="select * from employees";8 conn=jdbcutil.getConection();9 try{10 stmt=conn.createStatement();11 rs=stmt.executeQuery(sql);12 while(rs.next()){13 System.out.print(rs.getInt("userid")+",");//里面直接写要查找的内容名称
14 System.out.print(rs.getString("employee_id")+",");15 System.out.print(rs.getString("last_name")+",");16 System.out.print(rs.getString("salary")+",");17 System.out.println(rs.getString("department_id"));18 }19 } catch(SQLException e) {20 e.printStackTrace();21 }finally{22 jdbcutil.close(rs,stmt,conn);23 }24 }25 }
1 //第三种方法如下:
2 public classTestDQL3 {3 public static voidmain(String[] args) {4 Connection conn=null;5 Statement stmt=null;6 ResultSet rs=null;7 String sql="select * from employees";8 conn=jdbcutil.getConection();9 try{10 stmt=conn.createStatement();11 rs=stmt.executeQuery(sql);12 while(rs.next()){13 int index=1;14 System.out.print(rs.getInt(index++)+",");15 System.out.print(rs.getString(index++)+",");16 System.out.print(rs.getString(index++)+",");17 System.out.print(rs.getString(index++)+",");18 System.out.println(rs.getString(index++));19 }20 } catch(SQLException e) {21 e.printStackTrace();22 }finally{23 jdbcutil.close(rs,stmt,conn);24 }25 }26 }
五.在四里面我们写了查询员工资料的信息,但是有的时候我们要保存起来方便之后更好的查找,那怎么办呢?没错,封装。
1 public class employees implementsSerializable {2 privateInteger userid;3 privateString employee_id;4 privateString last_name;5 privateString salary;6 privateString department_id;7
8 publicemployees() {9 super();10 }11
12 publicemployees(String employee_id, String last_name, String salary, String department_id) {13 super();14 this.employee_id =employee_id;15 this.last_name =last_name;16 this.salary =salary;17 this.department_id =department_id;18 }19
20 @Override21 publicString toString() {22 return "employees [userid=" + userid + ", employee_id=" + employee_id + ", last_name=" +last_name23 + ", salary=" + salary + ", department_id=" + department_id + "]";24 }25
26 publicInteger getUserid() {27 returnuserid;28 }29
30 public voidsetUserid(Integer userid) {31 this.userid =userid;32 }33
34 publicString getEmployee_id() {35 returnemployee_id;36 }37
38 public voidsetEmployee_id(String employee_id) {39 this.employee_id =employee_id;40 }41
42 publicString getLast_name() {43 returnlast_name;44 }45
46 public voidsetLast_name(String last_name) {47 this.last_name =last_name;48 }49
50 publicString getSalary() {51 returnsalary;52 }53
54 public voidsetSalary(String salary) {55 this.salary =salary;56 }57
58 publicString getDepartment_id() {59 returndepartment_id;60 }61
62 public voidsetDepartment_id(String department_id) {63 this.department_id =department_id;64 }65 }
六.封装好后的查询和上面没封装之前有点变化。
1 public classTestDQL4 {2 public static voidmain(String[] args) {3 Connection conn=null;4 Statement stmt=null;5 ResultSet rs=null;6 List emps=new ArrayList<>();//构造集合对象
7
8 String sql="select * from employees";9
10 conn=jdbcutil.getConection();//获取数据库连接
11
12 try{13 stmt=conn.createStatement();14 rs=stmt.executeQuery(sql);15 while(rs.next()){//遍历结果集16 int index=1;17 employees emp=new employees();//构造员工类对象
18 emp.setUserid(rs.getInt(index++));//获取值
19 emp.setEmployee_id(rs.getString(index++));20 emp.setLast_name(rs.getString(index++));21 emp.setSalary(rs.getString(index++));22 emp.setDepartment_id(rs.getString(index++));23 emps.add(emp);//放到集合中去
24 }25 } catch(SQLException e) {26 e.printStackTrace();27 }finally{28 jdbcutil.close(rs,stmt,conn);//关闭连接
29 }30 for(employees emp:emps){//遍历
31 System.out.println(emp);32 }33 }34 }
其实我们可以继续封装,把遍历结果集给封装起来。
1 public classTestDQL5 {2
3 public static voidmain(String[] args) {4 Connection conn=null;5 Statement stmt=null;6 ResultSet rs=null;7 List emps=new ArrayList<>();8
9 String sql="select * from employees";10
11 conn=jdbcutil.getConection();12
13 try{14 stmt=conn.createStatement();15 rs=stmt.executeQuery(sql);16 emps=resultSetToEmployees(rs);17 } catch(SQLException e) {18 e.printStackTrace();19 }finally{20 jdbcutil.close(rs,stmt,conn);21 }22 for(employees emp:emps){23 System.out.println(emp);24 }25 }26 public static ListresultSetToEmployees(ResultSet rs){27 List emps=new ArrayList<>();28 try{29 while(rs.next()){30 int index=1;31 employees emp=newemployees();32 emp.setUserid(rs.getInt(index++));33 emp.setEmployee_id(rs.getString(index++));34 emp.setLast_name(rs.getString(index++));35 emp.setSalary(rs.getString(index++));36 emp.setDepartment_id(rs.getString(index++));37 emps.add(emp);38 }39 } catch(SQLException e) {40 e.printStackTrace();41 }42
43 returnemps;44 }45 }
如果是一个人查询信息呢?还可以这样封装。
1 public classTestDQL6 {2 public static voidmain(String[] args) {3 Connection conn=null;4 Statement stmt=null;5 ResultSet rs=null;6 List emps=new ArrayList<>();7
8 String sql="select * from employees";9
10 conn=jdbcutil.getConection();11
12 try{13 stmt=conn.createStatement();14 rs=stmt.executeQuery(sql);15 while(rs.next()){16 employees emp=resultSetToEmployee(rs);17 emps.add(emp);18 }19 } catch(SQLException e) {20 e.printStackTrace();21 }finally{22 jdbcutil.close(rs,stmt,conn);23 }24 for(employees emp:emps){25 System.out.println(emp);26 }27 }28 public staticemployees resultSetToEmployee(ResultSet rs){29 employees emp=null;30 try{31 int index=1;32 emp=newemployees();33 emp.setUserid(rs.getInt(index++));34 emp.setEmployee_id(rs.getString(index++));35 emp.setLast_name(rs.getString(index++));36 emp.setSalary(rs.getString(index++));37 emp.setDepartment_id(rs.getString(index++));38 } catch(SQLException e) {39 e.printStackTrace();40 }41 returnemp;42 }43 }