数据库操作类,将所有连接数据库的配置信息以及基本的CRUD操作封装在一个类里,方便项目里使用,将连接数据库的基本信息放在配置文件 "dbinfo.properties" 中,通过类加载器调用(也可以通过ServletContext调用配置文件,或者配置在web.xml里通过ServletConfig调用),需要修改数据库连接信息时,只需修改配置文件即可。
1 package com.latiny.db; 2 3 import java.io.*; 4 import java.sql.*; 5 import java.util.ArrayList; 6 import java.util.Properties; 7 8 /* 9 * 数据库操作类 10 */ 11 12 public class DBUtil { 13 14 //定义需要的变量 15 private static String driver =null; 16 private static String url =null; 17 private static String user=null; 18 private static String password=null; 19 20 private static Connection conn; 21 //使用PreparedStatment可以防止sql注入 22 private static PreparedStatement ps; 23 private static ResultSet rs; 24 private static CallableStatement cs; 25 26 //读配置文件 27 private static Properties pp=null; 28 private static InputStream fis=null; 29 30 31 //加载驱动,只需要执行一次 32 static 33 { 34 try 35 { 36 pp = new Properties(); 37 38 //当我们使用java web的时候,读取文件要使用类加载器 39 fis = DBUtil.class.getClassLoader().getResourceAsStream("dbinfo.properties"); 40 41 pp.load(fis); 42 driver = pp.getProperty("DRIVER"); 43 url = pp.getProperty("URL"); 44 user = pp.getProperty("USER"); 45 password = pp.getProperty("PASSWORD"); 46 47 // 1 加载驱动 48 Class.forName(driver); 49 50 } 51 catch(Exception e) 52 { 53 e.printStackTrace(); 54 } 55 finally 56 { 57 try 58 { 59 fis.close(); 60 } catch (IOException e) { 61 // TODO Auto-generated catch block 62 e.printStackTrace(); 63 } 64 fis = null; 65 } 66 } 67 68 /* 69 * 获取Connection连接 70 */ 71 public static Connection getConn() 72 { 73 try 74 { 75 // 2 获取数据库连接 76 conn = DriverManager.getConnection(url, user, password); 77 } 78 catch (SQLException e) 79 { 80 // TODO Auto-generated catch block 81 e.printStackTrace(); 82 } 83 84 return conn; 85 } 86 87 /* 88 * 直接返回rs结果,此方法不能关闭rs,因为后面调用它的类还会用到,如果关闭则不能正常使用 89 */ 90 public static ResultSet queryResult(String sql, String[] parameters) 91 { 92 try 93 { 94 conn = getConn(); 95 // 3 创建Statement对象 96 ps = conn.prepareStatement(sql); 97 // 4 给问号赋值,即给sql语句的条件参数赋值如果需要的话 98 if(parameters!=null) 99 {100 for(int i=1; i<=parameters.length; i++)101 {102 ps.setString(i, parameters[i-1]);103 }104 }105 106 // 5 执行sql获取返回结果107 rs = ps.executeQuery();108 } 109 catch (SQLException e) 110 {111 // TODO Auto-generated catch block112 e.printStackTrace();113 }114 115 return rs; 116 }117 118 /*119 * 将rs结果封装成ArrayList,然后可以关闭rs,节省数据库访问资源120 */121 public static ArrayList queryResult2(String sql, String[] parameters)122 {123 ArrayList al = new ArrayList();124 125 try 126 {127 //2 获取数据库连接128 conn = getConn();129 //3 创建Statement对象130 ps = conn.prepareStatement(sql);132 //4 给问号赋值,即给sql语句的条件参数赋值如果需要的话133 if(parameters!=null)134 {135 for(int i=1; i<=parameters.length; i++)136 {137 ps.setString(i, parameters[i-1]);138 }139 }140 141 //5 执行sql语句获取返回结果142 rs = ps.executeQuery();143 144 //获取rs的结构145 ResultSetMetaData rsmd = rs.getMetaData();146 //获取查询语句的列数147 int column = rsmd.getColumnCount();148 149 while(rs.next())150 {151 //对象数组,存储一行数据152 Object[] objs = new Object[column];153 for(int i=0; i
dbinfo.properties文件配置信息
DRIVER=com.mysql.jdbc.DriverURL=jdbc:mysql://localhost:3306/servletUSER=latinyPASSWORD=123456