JDBC框架(一)

2015-02-03 03:52:46 · 作者: · 浏览: 27

public class JdbcUtils {

?

// 表示定义数据库的用户名

private final String USERNAME = "root";

// 定义数据库的密码

private final String PASSWORD = "admin";

// 定义数据库的驱动信息

private final String DRIVER = "com.mysql.jdbc.Driver";

// 定义访问数据库的地址

private final String URL = "jdbc:mysql://localhost:3306/mydb";

// 定义数据库的链接

private Connection connection;

// 定义sql语句的执行对象

private PreparedStatement pstmt;

// 定义查询返回的结果集合

private ResultSet resultSet;

?

public JdbcUtils() {

try {

//注册驱动

Class.forName(DRIVER);

System.out.println("注册驱动成功!!");

} catch (Exception e) {

// TODO: handle exception

}

}

?

// 定义获得数据库的链接

public Connection getConnection() {

try {

//获得数据库连接

connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);

} catch (Exception e) {

// TODO: handle exception

}

return connection;

}

?

/**

* 完成对数据库的表的添加删除和修改的操作

*

* @param sql

* @param params???

* @return

* @throws SQLException

*/

public boolean updateByPreparedStatement(String sql, List params)

throws SQLException {

boolean flag = false;

int result = -1;// 表示当用户执行添加删除和修改的时候所影响数据库的行数

//获得执行SQL语句的对象

pstmt = connection.prepareStatement(sql);

int index = 1;//setObjet参数的第一个是从1开始的,即占位符的第一个位置

//判断所填充的占位符是否有值

if (params != null && !params.isEmpty()) {

for (int i = 0; i < params.size(); i++) {

//setObject填充占位符

pstmt.setObject(index++, params.get(i));//????

}

}

//返回结果要么是0要么是影响的行数

result = pstmt.executeUpdate();

?

flag = result > 0 ? true : false;

return flag;

}

?

/**

* 查询返回单条记录

*

* @param sql

* @param params

* @return

* @throws SQLException

*/

public Map findSimpleResult(String sql, List params)

throws SQLException {

Map map = new HashMap();

int index = 1;//setObjet参数的第一个是从1开始的

//获得执行SQL语句的对象

pstmt = connection.prepareStatement(sql);

if (params != null && !params.isEmpty()) {

for (int i = 0; i < params.size(); i++) {

pstmt.setObject(index++, params.get(i));

}

}

resultSet = pstmt.executeQuery();// 返回查询结果

ResultSetMetaData metaData = resultSet.getMetaData();//返回结果集对象的列的相关信息

int col_len = metaData.getColumnCount();//返回对象的列数

//判断游标移动到下一行后是否还存在数据

while (resultSet.next()) {// 获得列的名称

//循环获得每列的列名和每行该列名所对应的值(判断是否有下一条记录)

for (int i = 0; i < col_len; i++) {

//先获得列名列名从1开始!!!

String cols_name = metaData.getColumnName(i + 1);

//由列名获得对象

Object cols_value = resultSet.getObject(cols_name);

//判断值是否为空,为空给空格

if (cols_value == null) {

cols_value = "";

}

//放入集合MAP中

map.put(cols_name, cols_value);

}

}

return map;

}

?

/**

* 查询返回多行记录

*

* @param sql

* @param params

* @return

* @throws SQLException

*/

public List> findMoreResult(String sql,

List params) throws SQLException {

//多条记录存放list+map

List> list = new ArrayList>();

int index = 1;//setObject()第一参数从1开始

//获得执行SQL语句的对象

pstmt = connection.prepareStatement(sql);

if (params != null && !params.isEmpty()) {

for (int i = 0; i < params.size(); i++) {

pstmt.setObject(index++, params.get(i));

}

}

//执行查询语句并将结果集赋值给resultSet

resultSet = pstmt.executeQuery();

ResultSetMetaData metaData = resultSet.getMetaData();//获得列的相关信息

int cols_len = metaData.getColumnCount();

while (resultSet.next()) {

Map map = new HashMap();

for (int i = 0; i < cols_len; i++) {

String cols_name = metaData.getColumnName(i + 1);

Object cols_value = resultSet.getObject(cols_name);

if (cols_value == null) {

cols_value = "";

}

map.put(cols_name, cols_value);

}

list.add(map);

}

return list;

}

/*

* jAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;

* 对于任意一个对象,都能够调用它的任意一个方法和属性;

* 这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。