您的位置:首页 > 数据库

Java学习系列(十九)Java面向对象之数据库编程

2013-11-26 15:46 701 查看
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等内容。

相信学完了Javase基础之后,对后面的学习会更加轻松。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: