mysql數據庫連接簡單分析 dao的應用

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.本例還使用了,對於數據庫的記錄進行物理修改時,若系統出錯即可回滾事務

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章