Java使用JDBC连接mySQL数据库小例子

Java连接mySQL数据库时,需要使用到一个Jar包,如:"mysql-connector-java-5.0.5-bin.jar",此为连接数据库

的驱动包,将其导入所在工程的lib目录下,并Build Path,即可进行引用。

注意:如果你没有添加jar程序驱动包的话编译的时候发现以下问题:

Sorry,can`t find the Driver!

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

    atjava.net.URLClassLoader$1.run(Unknown Source)

    atjava.net.URLClassLoader$1.run(Unknown Source)

    atjava.security.AccessController.doPrivileged(Native Method)

    atjava.net.URLClassLoader.findClass(Unknown Source)

    atjava.lang.ClassLoader.loadClass(Unknown Source)

    atsun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)

    atjava.lang.ClassLoader.loadClass(Unknown Source)

    atjava.lang.Class.forName0(Native Method)

     atjava.lang.Class.forName(Unknown Source)

这里可供下载驱动包:http://dev.mysql.com/downloads/connector/j/,导入Jar后,接下来进行操作。


1、新建一个名为BDHelper的工具类:为外界提供数据库连接对象。

package util;

import java.sql.Connection;
import java.sql.DriverManager;

public class DBHelper {
	
	//mysql数据库驱动,固定写法。连接Oracle时又与之不同,为:"oracle.jdbc.driver.OracleDriver"
	private static final String driver = "com.mysql.jdbc.Driver"; 

	/**
	* 如下是连接数据库的URL地址,
	* 其中,"jdbc:mysql://"   为固定写法
	* "localhost"是连接本机数据库时的写法,当不是连接本机数据库时,要写数据库所在计算机的IP地址。如:172.26.132.253
	* "shopping"是数据库的名称,一定要根据自己的数据库更改。
	* "?useUnicode=true&characterEncoding=UTF-8" 指定编码格式,无需时可省略,
	* 即地址直接为:"jdbc:mysql://localhost:3306/shopping"
	*/
	private static final String url="jdbc:mysql://localhost:3306/shopping?useUnicode=true&characterEncoding=UTF-8"; 
	
	private static final String username="root";//数据库的用户名
	private static final String password="123456";//数据库的密码:这个是自己安装数据库的时候设置的,每个人不同。
    
	private static Connection conn=null;  //声明数据库连接对象
	
	//静态代码块负责加载驱动
	static 
	{
		try
		{
			Class.forName(driver);
		}
		catch(Exception ex)
		{
			ex.printStackTrace();
		}
	}
	
	//单例模式返回数据库连接对象,供外部调用
	public static Connection getConnection() throws Exception
	{
		if(conn==null)
		{
			conn = DriverManager.getConnection(url, username, password); //连接数据库
			return conn;
		}
		return conn;
	}
	
	//写main方法测试是否连接成功,可将本类运行为Java程序先进行测试,再做后续的数据库操作。
	public static void main(String[] args) {
		
		try
		{
		   Connection conn = DBHelper.getConnection();
		   if(conn!=null)
		   {
			   System.out.println("数据库连接正常!");
		   }
		   else
		   {
			   System.out.println("数据库连接异常!");
		   }
		}
		catch(Exception ex)
		{
			ex.printStackTrace();
		}
		
	}
}

2、在已有的数据库中,建立数据库表tb_user,这里使用的是Navicat数据库管理工具进行建表操作。



3、建立与tb_user表对应的实体类:

package service;

/**
 * 对应数据库在中的tb_user表
 */
public class User {
	
	private int id;
	
	private String name;
	
	private String pwd;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
}

4、调用DBHelper工具类进行数据库操作:

package service;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import util.DBHelper;

public class dao{

	// 数据库连接对象,注意:是导入“java.sql.Connection”此包下的连接对象。
	private static Connection conn = null; 

	// PreparedStatement对象用来执行SQL语句
	private static PreparedStatement pst = null; 

	//结果集
	private static ResultSet rs = null;

	//保存查询到的实体集合
	List list = null;

	/**
	 * 查询数据库,获取一个User类型的list集合
	 */
	public List getUsers(){
		list = new ArrayList<User>();

		try {
			conn=DBHelper.getConnection();  //从DBHelper获取连接对象

			// 创建statement 执行数据库语句,第一不预处理,第二步才是正式。执行的语句可以修改.
			// 不过为了防止SQl注入。骗取登录,所以最好创建它的子类PreparedStatement 
			pst = conn.prepareStatement("SELECT * FROM users");// 预处理

			rs = pst.executeQuery();// 这里才是执行,获得数据。 

			// 遍历处理结果集,用while 方法next方法,相当于指针依次下移,获得每一行表的数据 

			while (rs.next()) {

				User user=new User(); 

				/**
				 * 两种get,
				 * 一种是根据下标 从1开始每一列, 
				 * rs.getInt(1); 
				 * rs.getString(2); 
				 * rs.getString(3);
				 * 第二个是根据列名查找。根据表的列数据类型使用不同的个体方法 
				 */

				//为user属性赋值
				user.setId(rs.getInt(1));
				user.setName(rs.getString(2));
				user.setPwd(rs.getString(3)); 

				//将user对象添加到list集合中
				list.add(user); 
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			// 关闭资源.一定要关闭资源。数据库的每一个连接都占据服务器资源。
			// 我们写代码的时候感觉不到, 
			// 但是一旦服务器运行个三五天,连接就会不断地增加,最终导致资源不足,
			// 服务器将自动关机来强行关闭连接。 
			// 而且这里面,不仅这里,全部过程都不要抛出异常,而是要捕捉处理异常,不然也会导致资源浪费。
			//即使前面抛出异常,程序中断,也会执行关闭资源,而不影响浪费。
			
			try {
				// 这里最好要先判断是否为空,不为空了,才去关闭。 
				// 而且要从小到大的关闭,顺序不能乱 
				if (rs != null) 
					rs.close(); 
				if (pst != null) 
					pst.close(); 
				/*if (conn != null) 
					conn.close(); */    //注意:如果后续还要使用connection,则不用关闭
			} catch (SQLException e) 
			{ 
				e.printStackTrace(); 
			}
		}
		return list;
	}
}


5、获得此数据集合后,根据需要进行相应的操作。

......



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