有几个问题
1)存在硬编码(usernamet和password, url和classnameDriver)随时会改
2)只要一次加载class文件就好了,每次操作都加载文件
3)connection对象每次查询操作时都要创建,很浪费资源
4)关闭资源代码长而且没有技术含量(dry原则44)
5)拼接sql语句很恶心
解决方案()
1)用配置文件存储username和password(
在项目中创建resourse文件夹,再创db.properties文件存储项目的datasourse配置信息)
2)在项目中创建包util,再创建Jdbcutil类(即jdbc的工具类)
在static代码中加载字节码
3)在Jdbcutil类中创建方法getconn()获取connection对象和使用druid数据库连接池
4)在Jdbcutil类中创建方法close()用于关闭资源
5)用preparestatement代替statement
package util;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import javax.sql.DataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
public class Jdbcutil {
public static DataSource ds=null;
static {
try {
Properties p=new Properties();
InputStream in=Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties");
p.load(in);
Class.forName(p.getProperty("driverClassName"));
ds=DruidDataSourceFactory.createDataSource(p);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
public static Connection getconn() throws SQLException {
return ds.getConnection();
}
public static void close(Connection conn,Statement sta,ResultSet rs) {
// TODO Auto-generated method stub
try {
if (rs != null) {
rs.close();
}
} catch (Exception e) {
// TODO: handle exception
}finally {
try {
if (sta != null) {
sta.close();
}
} catch (Exception e2) {
// TODO: handle exception
}finally {
try {
if (conn != null) {
conn.close();
}
} catch (Exception e3) {
// TODO: handle exception
}
}
}
}
}