JavaSE基础之JDBC
JavaSE基础之JDBC
1、JDBC 的步骤:
①加载数据库驱动;
a.MySQL:com.mysql.jdbc.Driver;
b.SQLServer:com.microsoft.jdbc.sqlserver.SQLServerDriver;
c.Oracle:oracle.jdbc.driver.OracleDriver;
②获取数据库链接;
a.MySQL:jdbc:mysql://localhost:3306/DataBaseName;
b.SQLServer:jdbc:sqlserver://localhost:1433; DatabaseName=DataBaseName;
c.Oracle:jdbc:oracle:thin:@localhost:1521:orcl;
③创建SQL语句对象;
④执行SQL语句对象;
a.如果是insert、delete、update,则返回 int;
b.如果是query,则返回ResultSet,需要封装结果集。
⑤关闭数据库资源。
2、JDBC 的工具类(以链接MySQL为例):DBUtil.java
1 package cn.com.zfc.util; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.PreparedStatement; 6 import java.sql.ResultSet; 7 import java.sql.ResultSetMetaData; 8 import java.sql.SQLException; 9 import java.util.ArrayList; 10 import java.util.HashMap; 11 import java.util.List; 12 import java.util.Map; 13 14 /** 15 * 16 * @title DbUtil 17 * @describe 连接数据库的帮助类:链接 MySQL 数据库 18 * @author 张富昌 19 * @date 2016年8月23日上午9:52:44 20 */ 21 public class DbUtil { 22 /* 数据库链接的 URL,数据库名称可随意更改 */ 23 private final static String URL = "jdbc:mysql://localhost:3306/library"; 24 /* 数据库用户名 */ 25 private final static String USERNAME = "root"; 26 /* 数据库密码 */ 27 private final static String PASSWORD = "root"; 28 /* 数据库链接对象 */ 29 private Connection connection = null; 30 /* 预处理语句对象,相同的 sql 语句只编译一次 */ 31 private PreparedStatement preparedStatement = null; 32 /* 结果集对象,用于存储查询的数据 */ 33 private ResultSet resultSet = null; 34 /* 结果集结构化对象,用于对结果集的处理,方便获取数据 */ 35 private ResultSetMetaData resultSetMetaData = null; 36 37 /** 38 * 39 * 功能:1、加载数据库驱动包 40 * 41 */ 42 static { 43 try { 44 // 需要加载数据库的驱动 45 Class.forName("com.mysql.jdbc.Driver"); 46 } catch (ClassNotFoundException e) { 47 System.out.println("加载数据库驱动包出现了异常..."); 48 e.printStackTrace(); 49 } 50 } 51 52 /** 53 * 54 * 功能:2、获取数据库链接 55 * 56 * 参数: 57 * 58 * 返回类型:Connection 59 */ 60 private Connection getConnection() { 61 try { 62 connection = DriverManager.getConnection(URL, USERNAME, PASSWORD); 63 return connection; 64 } catch (SQLException e) { 65 System.out.println("获取链接出现了异常"); 66 e.printStackTrace(); 67 } 68 return null; 69 } 70 71 /** 72 * 73 * 功能:3、提供更新的方法,包括(添加、修改、删除) 74 * 75 * 参数: String sql, Object... objects 76 * 77 * 返回类型:int 78 */ 79 public int update(String sql, Object... objects) { 80 // 1、创建数据库链接对象 81 connection = getConnection(); 82 83 // 2、创建预处理语句对象 84 try { 85 preparedStatement = connection.prepareStatement(sql); 86 87 // 3、遍历参数 Object,代替 SQL 语句中的占位符(如果有) 88 for (int i = 0; i < objects.length; i++) { 89 preparedStatement.setObject(i + 1, objects[i]); 90 } 91 92 // 4、执行 sql 语句 93 return preparedStatement.executeUpdate(); 94 } catch (SQLException e) { 95 System.out.println("创建预处理语句对象出现了异常..."); 96 e.printStackTrace(); 97 } finally { 98 // 5、关闭数据库资源 99 release(); 100 } 101 return -1; 102 103 } 104 105 /** 106 * 107 * 功能:4、查询数据库中的信息 108 * 109 * 参数:String sql, Object... objects 110 * 111 * 返回类型:List<Map<String,Object>> 112 */ 113 public List<Map<String, Object>> query(String sql, Object... objects) { 114 List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); 115 // 1、创建数据库链接对象 116 connection = getConnection(); 117 118 // 2、创建预处理语句对象 119 try { 120 preparedStatement = connection.prepareStatement(sql); 121 122 // 3、遍历参数 Object 123 for (int i = 0; i < objects.length; i++) { 124 preparedStatement.setObject(i + 1, objects[i]); 125 } 126 // 4、执行 SQL 语句,创建结果集对象 127 resultSet = preparedStatement.executeQuery(); 128 129 // 5、创建结果集结构化对象 130 resultSetMetaData = resultSet.getMetaData(); 131 132 // 6、遍历结果集,把存储数据类型转化为 List<Map<String, Object>> 133 while (resultSet.next()) { 134 Map<String, Object> map = new HashMap<String, Object>(); 135 for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) { 136 String key = resultSetMetaData.getColumnName(i); 137 Object value = resultSet.getObject(key); 138 // 封装结果集 139 map.put(key, value); 140 } 141 list.add(map); 142 } 143 return list; 144 } catch (SQLException e) { 145 System.out.println("创建预处理语句对象出现了异常..."); 146 e.printStackTrace(); 147 } finally { 148 // 7、关闭数据库资源 149 release(); 150 } 151 152 return null; 153 } 154 155 /** 156 * 157 * 功能:5、关闭数据库资源,很重要 158 * 159 * 参数: 160 * 161 * 返回类型:void 162 */ 163 private void release() { 164 // 1、关闭数据库链接对象 165 if (connection != null) { 166 try { 167 connection.close(); 168 } catch (SQLException e) { 169 System.out.println("关闭数据库链接对象出现了异常..."); 170 e.printStackTrace(); 171 } 172 } 173 // 2、关闭预处理语句对象 174 if (preparedStatement != null) { 175 try { 176 preparedStatement.close(); 177 } catch (SQLException e) { 178 System.out.println("关闭预处理语句对象出现了异常..."); 179 e.printStackTrace(); 180 } 181 } 182 183 // 3、关闭结果集对象 184 if (resultSet != null) { 185 try { 186 resultSet.close(); 187 } catch (SQLException e) { 188 e.printStackTrace(); 189 } 190 } 191 } 192 193 }
由于本人技术有限,有不足之处,请指出,谢谢!!!欢迎评论。。。