总
本博客分为三个部分:
一、CRUD各个操作具体代码示例
二、对CRUD操作的总结
三、CRUD操作源码【Javabean】
分
一、CRUD各个操作具体代码示例
1.添加数据
String sql="insert into books(name,price,bookCount,author) values(?,?,?,?);
PreparedStatement ps=conn.preparedStatement(sql);//获取PreparedStatement对象;
ps.setString(1,book.getName());//对sql语句中的第一个参数赋值;
ps.setDouble(2,book.getPrice());
ps.setInt(3,book.getBookCount());
ps.setString(4,book.getAuthor());
int row=ps.executeUpdate();//执行更新操作。返回影响的行数;
2.查询数据
Statement stmt = conn.createStatement();// 获取Statement
String sql = "select * from tb_books";// 添加图书信息的SQL语句
ResultSet rs = stmt.executeQuery(sql);// 执行查询
或者:
String sql = "select * from tb_books";// 添加图书信息的SQL语句
PreparedStatement stmt=conn.preparedStatement(sql);//获取PreparedStatement对象
ResultSet rs = stmt.executeQuery();// 执行查询
*注意sql的引用顺序*
3.修改数据
PreparedStatement ps = conn.prepareStatement(sql);// 获取PreparedStatement
ps.setInt(1, bookCount);// 对SQL语句中的第一个参数赋值
ps.setInt(2, id);// 对SQL语句中的第二个参数赋值
ps.executeUpdate();// 执行更新操作
4.删除数据
PreparedStatement ps = conn.prepareStatement(sql);// 获取PreparedStatement
ps.setInt(1, id);// 对SQL语句中的第一个占位符赋值
ps.executeUpdate();// 执行更新操作
二、对CRUD操作的总结
1.JDBC访问数据库的步骤
a:导入java.sql包;
b:加载数据库驱动程序;
c:定义数据库的连接对象地址,用户名,密码;
d:得到与数据库的连接对象;
e:声明sql语句;
f:得到语句对象;
g:执行sql语句;
h:处理sql语句的返回结果;
i:关闭对象;
2.规律总结
a:每一个操作都可以用PreperdStatement对象获得语句对象;
b:可以对这四个操作进行分类:查询一类,非查询一类;
c:非查询过程:
首先,用PreperdStatement对象获得语句对象;
然后,对sql语句中的占位符赋值;
最后,用ps.executeUpdate();方法执行更新操作
d:查询过程:
首先,用PreperdStatement对象获得语句对象;
然后,用stmt.executeQuery();方法执行查询并将结果赋值给ResultSet对象;
e:注意:在用用PreperdStatement对象获得语句对象时,要传入sql参数;
三、CRUD操作源码【Javabean】
package util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class DBUtil {
private String driver;
private String url;
private String username;
private String password;
private Connection con;
private PreparedStatement pstmt;
private ResultSet rs;
public void setDriver(String driver) {
this.driver = driver;
}
public void setUrl(String url) {
this.url = url;
}
public void setUsername(String username) {
this.username = username;
}
public void setPassword(String password) {
this.password = password;
}
//构造方法,定义驱动程序连接用户名和密码信息
public DBUtil(){
driver="com.mysql.jdbc.Driver";
url="jdbc:mysql://localhost:3306/book";
username="root";
password="root";
}
// 获取连接对象
private Connection getConnection() {
try {
Class.forName(driver);
con = DriverManager.getConnection(url, username, password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return con;
}
// 获取语句对象
private PreparedStatement getPrepareStatement(String sql) {
try {
pstmt = getConnection().prepareStatement(sql);
} catch (SQLException e) {
e.printStackTrace();
}
return pstmt;
}
// 给pstmt的SQL语句设置参数(要求参数以数组形式给出)
private void setParams(String sql, String[] params) {
pstmt = this.getPrepareStatement(sql);
if(params != null){
for (int i = 0; i < params.length; i++){
try {
pstmt.setString(i + 1, params[i]);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
// 执行数据库查询操作时,将返回的结果封装到List对象中
public List getList(String sql, String[] params){
List list = new ArrayList();
try {
this.setParams(sql, params);
ResultSet rs = pstmt.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
while(rs.next()) {
Map m = new HashMap();
for (int i = 1; i <= rsmd.getColumnCount(); i++) {
String colName = rsmd.getColumnName(i);
m.put(colName, rs.getString(colName));
}
list.add(m);
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
close();
}
return list;
}
// 执行数据库查询操作时,将返回的结果封装到List对象中
public Map getMap(String sql, String[] params){
List list=getList(sql, params);
if(list.isEmpty())
return null;
else
return (Map)list.get(0);
}
// 更新数据库时调用的update方法
//添加数据和删除数据都可以用这个函数
public int update(String sql, String[] params) {
int recNo = 0;// 表示受影响的记录行数
try {
setParams(sql, params);// 根据sql语句和params,设置pstmt对象
recNo = pstmt.executeUpdate();// 执行更新操作
} catch (Exception e) {
e.printStackTrace();
} finally {
close();
}
return recNo;
}
// 关闭对象
private void close() {
try {
if (rs != null)
rs.close();
if (pstmt != null)
pstmt.close();
if (con != null)
con.close();
} catch (SQLException e) {
}
}
}