1.測試數據庫及表結構
CREATE DATABASE /*!32312 IF NOT EXISTS*/`petinfo` /*!40100 DEFAULT CHARACTER SET utf8 */;
USE `petinfo`;
/*Table structure for table `userinfo` */
DROP TABLE IF EXISTS `userinfo`;
CREATE TABLE `userinfo` (
`id` int(11) NOT NULL auto_increment,
`username` varchar(12) NOT NULL,
`password` varchar(12) NOT NULL,
`userphone` varchar(15) default NULL,
PRIMARY KEY (`username`),
UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*Data for the table `userinfo` */
insert into `userinfo`(`id`,`username`,`password`,`userphone`) values (1,'123','123',NULL),(2,'admin','123',NULL),(3,'wang','123f',NULL),(4,'wangkai','123f',NULL);
2.數據庫連接通用類
package com.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class ConMysqlDao {
static {
// 加載驅動程序
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("驅動加載失敗");
}
}
// 數據庫連接字符串
private String url = "jdbc:mysql://localhost:3306/petinfo";
// 用戶名
private String userName = "root";
// 密碼
private String passWord = "123456";
// 連接對象
public Connection con = null;
// 語句對象
public PreparedStatement ps = null;
// 數據庫連接方法
public void prepareConnection() {
try {
if (con == null || con.isClosed()) {
con = DriverManager.getConnection(url, userName, passWord);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeException("連接異常:" + e.getMessage());
}
}
// 關閉方法
public void close() {
try {
if (ps != null) {
ps.close();
}
if (con != null) {
con.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeException("關閉連接異常:" + e.getMessage());
}
}
// 操作回滾
public void rollback() {
try {
con.rollback();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeException("回滾失敗:" + e.getMessage());
}
}
}
3.封裝實例類
package com.dao;
public class UserBean {
private Integer id;
private String username;
private String password;
private String userphone;
// 空的構造方法
public UserBean() {
}
public Integer getId() {
return id;
}
public void setId(Integer 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;
}
public String getUserphone() {
return userphone;
}
public void setUserphone(String userphone) {
this.userphone = userphone;
}
}
4.本封裝dao的實例運用,獲取數據庫中所以用戶記錄
package com.dao;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class GetAllUser {
ConMysqlDao csd;
// UserBean user = new UserBean();
private String sql = "SELECT * FROM userinfo";
public GetAllUser() {
}
public List<UserBean> allUser() {
List<UserBean> users = new ArrayList<UserBean>();
csd = new ConMysqlDao();
try {
csd.prepareConnection();
csd.ps = csd.con.prepareStatement(sql);
ResultSet rs = csd.ps.executeQuery();
while (rs.next()) {
UserBean user = new UserBean();
user.setUsername(rs.getString("username"));
user.setPassword(rs.getString("password"));
user.setUserphone(rs.getString("userphone"));
// 將找到的記錄添加進users集合中
users.add(user);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
csd.close();
}
return users;
}
}
上邊類的測試使用:
package com.test;
import java.util.List;
import com.dao.GetAllUser;
import com.dao.UserBean;
public class testallusers {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
List<UserBean> users=new GetAllUser().allUser();
System.out.println("id | name | password | phone");
int i=1;
for(UserBean user : users){
System.out.print(i++);
System.out.print(" | ");
System.out.print(user.getUsername());
System.out.print(" | ");
System.out.print(user.getPassword());
System.out.print(" | ");
System.out.println(user.getUserphone());
}
}
}
總結:
1.連接數據代碼寫好之後,記得務必把連接驅動jar包,放進去,初學者經常出現這種問題,所以在需要用到連接數據的項目時,首相將jar包放進去再進行,後邊工作。
2.本例,思路很簡單,充分利用了java的面向對象編程。將需要使用的對象,bean化使用時只需傳遞對象即可,避免了數據傳遞獲取時無章可循的尷尬
3.將連接類分離出去,在別的數據庫連接也是可以使用,做到了代碼的重用。
4.數據庫連接,使用完畢後務必關閉連接,不然會佔用系統資源且不安全。
5.本例還使用了,對於數據庫的記錄進行物理修改時,若系統出錯即可回滾事務