1.新建一个Java Project 工程,并创建 四个package 包,分别为 dao(存放接口)、daoImp(存放接口实现类)、entry(存放实体类)、util(数据库工具包)
如图所示创建一个名为JDBC的工程,结构如图所示:
2.导包,连接数据库我们需要把mysql-connector-java-5.1.7-bin.jar导入到Java项目中。如图新建一个lib用来存放外jar的包。
选中加入的jar包,单击右键选择Build Path 中的 Add to Build Path。
3.编辑util包,创建一个class其中编辑数据库的连接、关闭
public class JDBCUtil {
private static final String driver="com.mysql.jdbc.Driver";
private static final String url="jdbc:mysql://localhost:3306/students";
private static final String user="root";
private static final String password="root";
static{
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static Connection getConnection(){
try {
return DriverManager.getConnection(url,user,password);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
public static void close(ResultSet rs,PreparedStatement ps,Connection con){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(ps!=null){
try {
ps.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(con!=null){
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
}
}
数据库的增删改方法,大部分写法相差无几,因此我们给他们封装一个方法,三个类型方法皆可调用。
/***
* DML操作(增删改)
* 1.获取连接数据库对象
* 2.预处理
* 3.执行更新操作
* @param sql
* @param obj
*/
//调用者只需传入一个sql语句,和一个Object数组。该数组存储的是SQL语句中的占位符
public static void executeUpdate(String sql,Object...obj){
Connection con = getConnection();//调用getConnection()方法连接数据库
PreparedStatement ps=null;
try {
ps = con.prepareStatement(sql);//预处理
for(int i=0;i<obj.length;i++){//预处理声明占位符
ps.setObject(i+1, obj[i]);
}
ps.executeUpdate();//执行更新操作
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
close( null, ps, con);//调用close()方法关闭资源
}
}
2.查询方法
/***
* DQL查询
* Result获取数据集
*
* @param sql
* @param obj
* @return
*/
public static List<Map<String,Object>> executeQuery(String sql,Object...obj){
Connection con = getConnection();
ResultSet rs=null;
PreparedStatement ps=null;
try {
ps = con.prepareStatement(sql);
for(int i=0;i<obj.length;i++){
ps.setObject(i+1, obj[i]);
}
rs = ps.executeQuery();
//new 一个空的list集合用来存放查询结果
List<Map<String ,Object>> list=new ArrayList<>();
//获取结果集的列数
int count = rs.getMetaData().getColumnCount();
//对结果集遍历每一条数据是一个Map集合,列是k,值是v
while(rs.next()){
//一个空的map集合,用来存放每一行数据
Map<String, Object> map=new HashMap<String, Object>();
for(int i=0;i<count;i++){
Object ob=rs.getObject(i+1);//获取值
String key = rs.getMetaData().getColumnName(i+1);//获取k即列名
map.put(key, ob);
}
list.add(map);
}
return list;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
close(rs, ps, con);
}
return null;
}