首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

联接mysql数据库,寻求改进建议

2013-09-11 
连接mysql数据库,寻求改进建议import java.sql.Connectionimport java.sql.DriverManagerimport java.sq

连接mysql数据库,寻求改进建议


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * database DEFAULT CHARACTER SET utf8
 * 
 */

public final class JdbcUtil {

private static final String url = "jdbc:mysql://localhost:3306/dbdemo?useUnicode=true&characterEncoding=UTF-8";
private static final String user = "root";
private static final String password = "sa";

/**
 * 注册
 * 
 * @throws ClassNotFoundException
 * @throws SQLException
 */
public static Connection register(){
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Connection connection = null;
try {
connection = DriverManager.getConnection(url, user, password);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return connection;
}

public static void freeResource(Connection connection, Statement statement,
ResultSet rs) {
try {
if (rs != null) {
rs.close();
}
if (statement != null) {
statement.close();
}
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}



public class BaseDao {

/**
 * 执行sql语句,如果第一个结果是 ResultSet 对象则返回List
 * @param sql
 * @return
 */
public List execute(String sql, List params){
if (sql == null || sql.equals("")) {
return null;
}
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet rs = null;
boolean flag = false;
try {
connection = JdbcUtil.register();
connection.setAutoCommit(false);// 关闭自动提交事务(开启事务)
preparedStatement = connection.prepareStatement(sql);
if(params != null && params.size() > 0){


for(int i = 0; i < params.size(); ++i){
preparedStatement.setObject(i + 1, params.get(i));
}
}
flag = preparedStatement.execute();
connection.commit();
if(flag){
rs = preparedStatement.getResultSet();
List list = convertToList(rs);
return list;
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
JdbcUtil.freeResource(connection, preparedStatement, rs);
}
return null;
}

private List convertToList(ResultSet rs) throws SQLException {
List list = new ArrayList();
// Get the element of resultSet
ResultSetMetaData md = rs.getMetaData();
// Map rowData;
int columnCount = md.getColumnCount();
// Use Map
while (rs.next()) {
Map rowData = new HashMap();
for (int i = 1; i <= columnCount; i++) {
rowData.put(md.getColumnName(i), rs.getObject(i));
}
list.add(rowData);
}
return list;
}
}




public class BaseService {
private BaseDao baseDao = new BaseDao();


public List queryForList(String sql, List params){
List list = baseDao.execute(sql, params);
return list;
}

public void execute(String sql, List params){
baseDao.execute(sql, params);
}


public static void main(String[] args){
BaseService baseService = new BaseService();

String sql = "select * from user where id > 1";
 List list = baseService.queryForList(sql, null);
for (int i = 0; i < list.size(); ++i) {
Map map = (Map) list.get(i);
System.out.println(map.get("name"));
}

//sql = "update user set name=? where id=?";
//list = new ArrayList();
//list.add("udb");
//list.add("92");
//baseService.execute(sql, list);
}
}

数据库 mysql 事务 database 改进


[解决办法]
创建连接的时候,可以使用ThreadLocal进行绑定,一个线程一个connection。
[解决办法]
如果像你原来那样写,每次都需要创建connection,这是非常浪费时间的,也就是效率问题。
[解决办法]
哈哈,马克一下,这学期我也在学JAVA~联接mysql数据库,寻求改进建议
[解决办法]
学习了 这个是不是那个连接池的模式啊 !

热点排行