public class DBUtil {
private Connection conn = null;
private ResultSet rs = null;
private PreparedStatement ste =null;
private final String URL = "JDBC:mysql://localhost/hyhl";
private final String USERNAME = "root";
private final String PASSWORD = "root";
static{
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}//加载就注册驱动
}
//获取connection连接对象的方法;
public Connection getCon(){
try {
conn = DriverManager.getConnection(URL,USERNAME,PASSWORD);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
//关闭资源的方法
public void closeIO(){
try {
if(rs!=null){
rs.close();
}
if(ste!=null){
ste.close();
}
if(conn!=null){
conn.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//查询的方法
public List<Map<String,String>> query(String sql,Object obj[]){
List<Map<String,String>> list = new ArrayList<Map<String,String>>();
//存储元数据提出的数据
getCon();
try {
ste = conn.prepareStatement(sql);
//查询要执行结果集
//我们不能再工具类操作结果集,而是把结果集反馈给使用者
//ResultSet 不能反馈出去,释放资源后就没结果集了
//它必须被关闭,那么关闭之前需要把数据存储到别的地方
//把需要填写占位符的值设置到SQL语句当中
for(int i = 0 ; i < obj.length ; i++){
// System.out.println(rsmd.getColumnName(i+1));//该方法返回字段名
ste.setObject(i+1,obj[i]);
}
rs = ste.executeQuery();//查询数据返回结果集
ResultSetMetaData rsmd = rs.getMetaData();//从结果集复制份元数据
//一个Map储存一行记录,创建多少Map?有多少元数据的行数就创建多少Map;
while(rs.next()){
Map<String,String> ma = new HashMap<String,String>();
for (int i = 1; i <= rsmd.getColumnCount(); i++) {
ma.put(rsmd.getColumnName(i),rs.getString(i));//有几个字段 Map录入几次值;
}
//把map放进list里面
list.add(ma);
}
//处理结果集
closeIO();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
public int update(String sql,Object [] obj){
int i=0;
getCon();
try {
ste = conn.prepareStatement(sql);
//从数据库拿值
for (int j = 0; j < obj.length; j++) {
ste.setObject(j+1, obj[j]);
}
i = ste.executeUpdate();//更新几条数据返回几
closeIO();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return i;
}
private Connection conn = null;
private ResultSet rs = null;
private PreparedStatement ste =null;
private final String URL = "JDBC:mysql://localhost/hyhl";
private final String USERNAME = "root";
private final String PASSWORD = "root";
static{
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}//加载就注册驱动
}
//获取connection连接对象的方法;
public Connection getCon(){
try {
conn = DriverManager.getConnection(URL,USERNAME,PASSWORD);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
//关闭资源的方法
public void closeIO(){
try {
if(rs!=null){
rs.close();
}
if(ste!=null){
ste.close();
}
if(conn!=null){
conn.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//查询的方法
public List<Map<String,String>> query(String sql,Object obj[]){
List<Map<String,String>> list = new ArrayList<Map<String,String>>();
//存储元数据提出的数据
getCon();
try {
ste = conn.prepareStatement(sql);
//查询要执行结果集
//我们不能再工具类操作结果集,而是把结果集反馈给使用者
//ResultSet 不能反馈出去,释放资源后就没结果集了
//它必须被关闭,那么关闭之前需要把数据存储到别的地方
//把需要填写占位符的值设置到SQL语句当中
for(int i = 0 ; i < obj.length ; i++){
// System.out.println(rsmd.getColumnName(i+1));//该方法返回字段名
ste.setObject(i+1,obj[i]);
}
rs = ste.executeQuery();//查询数据返回结果集
ResultSetMetaData rsmd = rs.getMetaData();//从结果集复制份元数据
//一个Map储存一行记录,创建多少Map?有多少元数据的行数就创建多少Map;
while(rs.next()){
Map<String,String> ma = new HashMap<String,String>();
for (int i = 1; i <= rsmd.getColumnCount(); i++) {
ma.put(rsmd.getColumnName(i),rs.getString(i));//有几个字段 Map录入几次值;
}
//把map放进list里面
list.add(ma);
}
//处理结果集
closeIO();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
public int update(String sql,Object [] obj){
int i=0;
getCon();
try {
ste = conn.prepareStatement(sql);
//从数据库拿值
for (int j = 0; j < obj.length; j++) {
ste.setObject(j+1, obj[j]);
}
i = ste.executeUpdate();//更新几条数据返回几
closeIO();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return i;
}