002 JDBC注册驱动和简单的使用

======================

jdbc是java对数据库操作的一种技术

1 首先需要下载jdbc的驱动,新建一个叫lib的文件夹

2 然后把jdbc驱动jar包复制进去,然后对着jar包右键---构建路径--添加至构建路径

注意:

1 现在的操作都是在java项目下完成,也就意味着目录结构和web项目下有所不同,先不要在意,后面用web项目的适合再探讨

在这之前还需要创建一个test数据库,product表   1个pid列,1个pname列

注册驱动,因为只需要注册一次,所以写成工具类即可

public class JDBCUtil
{
	public static Connection getConnection()
	{
		// 帐号密码都是写在配置文件里,在src源文件里创建一个配置文件
		// 这个文件在bin目录里也会自动被添加
		// 然后直接读取这个配置文件即可
		String url = "";        
		String user = "";
		String password = "";
		
		
		Connection conn1 = null;
		try
		{
			Properties pro1 = new Properties();
			
			// 使用FileInputStream方式加载配置文件,默认的根路径是在项目路径,需要指定配置文件在哪
			// InputStream input1=new FileInputStream("src\\JDBC.properties");

			// 使用类加载器加载,默认就是在bin目录里,因为是用eclipse创建的,所以在bin目录下自动会有JDBC.properties
			// 相当于加载字节码文件的时候,顺便加载一下资源文件
			InputStream input1 = JDBCUtil.class.getClassLoader().getResourceAsStream("JDBC.properties");
			pro1.load(input1); 
			url = pro1.getProperty("url");
			user = pro1.getProperty("user");
			password = pro1.getProperty("password");

			
			// 注册驱动,参数需要Driver,而Driver是个接口,所以我们应该new它的实现类
			// 那么它的实现类,就是jdbc驱动里面的类,他继承了Driver接口
			// 所以是com.mysql.jdbc.Driver,这是前面都是指定驱动的路径,后面的Driver才是实现类
			// 所以我们必须要导入jar包
			
			// DriverManager.registerDriver(new com.mysql.jdbc.Driver());

			// 但是Driver类内部就有一个静态代码块,用来注册驱动的,所以只要使用了类就会注册驱动
			// Class.forName的作用是,参数为xxx的类被会被初始化,所以我们使用forName提供类名即可,初始化了后
			// 会自动调用static静态代码块
			
			// Class.forName("com.mysql.jdbc.Driver");

			// 但是其实java jdbc4之后,不需要我们注册驱动,直接连接,里面会自动注册驱动
			// 连接数据库,这个url每个数据库都不一样,可以通过查文档获得
			//url=jdbc:mysql://localhost/test  
			// localhost后面是要使用哪个数据库,再后面是帐号密码,返回的是Connection
			conn1 = DriverManager.getConnection(url, user, password);

		} catch (Exception e)
		{
			e.printStackTrace();
		}
		return conn1;
	}

	//释放资源,需要关闭ResultSet(结果集),Statement(语句声明),Connection(连接)
	//这3个都是要被使用的,当然这只是前期,后期不需要这样
	public static void release(ResultSet rs, Statement state1, Connection conn1)
	{
		closeRs(rs);
		closeState(state1);
		closeConn(conn1);
	}

	private static void closeRs(ResultSet rs)
	{
		try
		{
			// 需要先判断是不是等于空,如果等于空,去释放就触发异常了
			// 最后的时候还需要把rs置空
			if (rs != null)
			{
				rs.close();
			}
		} catch (SQLException e)
		{
			e.printStackTrace();
		} finally
		{
			rs = null;
		}
	}

	private static void closeState(Statement state1)
	{
		try
		{
			if (state1 != null)
			{
				state1.close();
			}
		} catch (SQLException e)
		{
			e.printStackTrace();
		} finally
		{
			state1 = null;
		}
	}

	private static void closeConn(Connection conn1)
	{
		try
		{
			if (conn1 != null)
			{
				conn1.close();
			}
		} catch (SQLException e)
		{
			e.printStackTrace();
		} finally
		{
			conn1 = null;
		}
	}
}


简单的使用,上面的JDBCUtil工具类,用于连接数据库

public class Test1
{
	public static void main(String[] args)
	{
		Connection conn1 = null;
		Statement state1 = null;
		ResultSet resultSet1 = null;
		try
		{
			// 注册驱动,具体看工具类
			conn1 = JDBCUtil.getConnection();

			// 创建一个Statement(声明) 代表你要使用这个数据库了
			state1 = conn1.createStatement();

			// 指定语句,返回的结果用ResultSet接受
			String sql = "select * from product";
			resultSet1 = state1.executeQuery(sql);

			// 必须要用next来把指针移到后面一层,因为第一层是没有数据的,相当于0
			// 这也刚刚好可以做循环
			while (resultSet1.next())
			{
				// 每个get方法都有重载,可以传列的名称,也可以传列的索引,从1开始
				// 但是不能同时取一个列
				System.out.println("pid==" + resultSet1.getInt(1) + "   pname     " + resultSet1.getString("pname"));
			}

		} catch (Exception e)
		{
			e.printStackTrace();
		} finally
		{
			// 释放资源,具体看JDBCUtil工具类
			JDBCUtil.release(resultSet1, state1, conn1);
		}

	}

}

简单的增删查改

public class Test1
{
	Connection conn1 = null;
	Statement state1 = null;
	ResultSet resultSet1 = null;

	//Before测试单元,意思是在Test单元执行前执行,用来执行连接数据库
	@Before
	public void test()
	{
		try
		{
			// 创建连接
			conn1 = JDBCUtil.getConnection();

			// 创建声明语句
			state1 = conn1.createStatement();

		} catch (Exception e)
		{
			e.printStackTrace();
		}

	}

	// 查询语句
//	@Test
	public void test1() throws SQLException
	{
		// 查询所有商品信息,查询用executeQuery
		String sql = "select * from product";
		resultSet1 = state1.executeQuery(sql);

		// 遍历结果
		while (resultSet1.next())
		{
			System.out.println("pid==" + resultSet1.getInt(1) + "      " + "pname" + resultSet1.getString("pname"));
		}
	}

	// 插入语句
//	@Test
	public void test2() throws SQLException
	{
		// 插入一个商品,用executeUpdate
		String sql = "insert into product values(null,'娃哈哈')";
		int res = state1.executeUpdate(sql);
		if (res > 0)
		{
			System.out.println("添加成功");
		} else
		{
			System.out.println("添加失败");
		}

	}

	// 删除语句
//	@Test
	public void test3() throws SQLException
	{
		// 删除一个商品
		String sql = "delete from product where pname='娃哈哈'";
		int res = state1.executeUpdate(sql);

		if (res > 0)
		{
			System.out.println("删除成功");
		} else
		{
			System.out.println("删除失败");
		}

	}

	// 更新语句
	@Test
	public void test4() throws SQLException
	{
		// 更新一个商品的价格
		String sql = "update product set pname='天帝' where pid=1";
		int res = state1.executeUpdate(sql);

		if (res > 0)
		{
			System.out.println("更新语句成功");
		} else
		{
			System.out.println("更新语句失败");
		}

	}

}

猜你喜欢

转载自blog.csdn.net/yzj17025693/article/details/82821821
002