JDBC(Java Data Base Connectivity:java数据库连接):它定义了一组标准的操作数据库的接口,既然是接口,那它就是一种规范,是Java操作数据库的技术规范。
Java数据库编程有两步常用操作:
1.加载(或注册)JDBC驱动程序
Class.forName(“com.mysql.jdbc.Driver”); 推荐这种方式,不会对具体的驱动类产生依赖。
DriverManager.registerDriver(com.mysql.jdbc.Driver); 会造成DriverManager中产生两个一样的驱动,并会对具体的驱动类产生依赖。
2.建立数据库Connection
Connection conn = DriverManager.getConnection(url, user, password);DriverManager是一个驱动管理器,内部有一个驱动注册表(Map结构),可以向其注册多个JDBC驱动。
举例说明1:
/**
* @author lhy
* @description 数据库工具类
*/
public class DBUtil {
// 创建连接
public static Connection createConn() {
Connection conn = null;
try {
// 加载驱动程序
Class.forName("com.mysql.jdbc.Driver");
// 获取连接(这里用户名为root,密码为空)
conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/test", "root", "");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
// 创建回话,获取预处理语句(可以防止sql语句注入)
public static PreparedStatement prepare(Connection conn, String sql) {
PreparedStatement ps = null;
try {
ps = conn.prepareStatement(sql);
} catch (SQLException e) {
e.printStackTrace();
}
return ps;
}
// 关闭连接
public static void close(Connection conn) {
if (conn != null) {
try {
conn.close();
conn = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
}
// 关闭回话
public static void close(Statement st) {
if (st != null) {
try {
st.close();
st = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
}
// 关闭查询结果集
public static void close(ResultSet rs) {
if (rs != null) {
try {
rs.close();
rs = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
下面用户表为例,调用Statement对象的executeQuery()方法或executeUpdate()方法,让DBMS 执行具体的SQL语句,以便对数据执行查询、增、删、改等操作;我们先建好一张用户表(user,数据库为test)
创建实体类(User):
public class User {
private int id;
private String username;
private String password;
public User() {
}
public User(int id, String username, String password) {
this.id = id;
this.username = username;
this.password = password;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User [id=" + id + ", password=" + password + ", username="
+ username + "]";
}
}
/**
* @author lhy
* @description 对用户的CRUD相关操作
*/
public class UserDao {
// 添加用户
public void add(User u) {
Connection conn = DBUtil.createConn();
String sql = "insert into user values(null,?,?)";
PreparedStatement ps = DBUtil.prepare(conn, sql);
try {
ps.setString(1, u.getUsername());
ps.setString(2, u.getPassword());
ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
DBUtil.close(ps);
DBUtil.close(conn);
}
// 根据Id删除用户
public void deleteById(int id) {
Connection conn = DBUtil.createConn();
String sql = "delete from user where id=?";
PreparedStatement ps = DBUtil.prepare(conn, sql);
try {
ps.setInt(1, id);
ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
DBUtil.close(ps);
DBUtil.close(conn);
}
// 删除用户
public void delete(User u) {
deleteById(u.getId());
}
// 更新用户
public void update(User u) {
Connection conn = DBUtil.createConn();
String sql = "update user set username=?,password=? where id=?";
PreparedStatement ps = DBUtil.prepare(conn, sql);
try {
ps.setString(1, u.getUsername());
ps.setString(2, u.getPassword());
ps.setInt(3, u.getId());
ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
DBUtil.close(ps);
DBUtil.close(conn);
}
// 根据查询用户
public User loadById(int id) {
Connection conn = DBUtil.createConn();
String sql = "select * from user where id=?";
PreparedStatement ps = DBUtil.prepare(conn, sql);
User user = null;
ResultSet rs = null;
try {
ps.setInt(1, id);
rs = ps.executeQuery();
if (rs.next()) {
user = new User();
user.setId(rs.getInt("Id"));
user.setUsername(rs.getString("username"));
user.setPassword(rs.getString("password"));
}
} catch (SQLException e) {
e.printStackTrace();
}
DBUtil.close(rs);
DBUtil.close(ps);
DBUtil.close(conn);
return user;
}
// 查询所有用户信息
public List<User> listUser() {
Connection conn = DBUtil.createConn();
String sql = "select * from user";
PreparedStatement ps = DBUtil.prepare(conn, sql);
List<User> list = new ArrayList<User>();
ResultSet rs = null;
try {
rs = ps.executeQuery();
while (rs.next()) {
User user = new User();
user.setId(rs.getInt("Id"));
user.setUsername(rs.getString("username"));
user.setPassword(rs.getString("password"));
list.add(user);
}
} catch (SQLException e) {
e.printStackTrace();
}
DBUtil.close(rs);
DBUtil.close(ps);
DBUtil.close(conn);
return list;
}
}
客户端(测试类):
public class TestUser {
public static void main(String[] args) {
User user = new User();
user.setUsername("张三");
user.setPassword("123");
UserDao userDao = new UserDao();
// userDao.add(user);//添加用户
// userDao.deleteById(1);// 删除Id为1的用户
// userDao.update(new User(2, "李四", "1234546"));// 更新Id为2的用户信息
// System.out.println(userDao.loadById(2)); // 查询Id为2的用户信息
// 列出所有的用户
List<User> list = userDao.listUser();
for (User u : list) {
System.out.println(u);
}
}
}
Java的数据库编程比较简单,这里就不再赘述。结束语:
Javase基础部分就到这了,之后会更新 Java的反射、注解、代理、设计模式、jsp、Struts、Hibernate、Spring等内容。
![微笑](http://static.blog.csdn.net/xheditor/xheditor_emot/default/smile.gif)