JDBC1

JDBC1

  1. JDBC是什么?

        JDBC(java database connectivity)Java数据库连接。是Java语言中用来规范客户端程序如何来访问数据库[关系型数据库]的应用程序接口,提供了诸如查询和更新数据库中数据的方法。

        我们通常说的JDBC是面向关系型数据库的。

      2.JDBC访问数据库需要用到的类、接口、方法?

        2.1 java.sqlDriverManager--负责加载各种不同驱动程序(Driver),并根据不同的请求,向调用者返回相应的数据库连接。 驱动程序,会将自身加载到DriverManager中去。

        2.1.1数据驱动程序(Driver)--- 根据所连接的数据库不同需要下载对应数据库的驱动程序。

          例如:MySQL数据库----https://downloads.mysql.com/archives/c-j/

          mysql-connector-java-5.1.38-bin.jar

          通过java的反射机制,来给DriverManager,提供被加载的数据库驱动名称。

          Class.forName(“数据库驱动名称【包名+类名】”);

          数据库驱动名称来自mysql-connector-java-5.1.38-bin.jar中Driver的java类的全名称。

          Class.forName(com.mysql.jdbc.Deiver);

        2.1.2向调用者返回相应的数据库连接

          DriverManager类中的静态方法getConnection(url,username,password)向调用者返回相应的数据库连接

          static  Connection   getConnection(url,username,password)

          参数url---指定被连接的数据库位置

        【jdbc:mysql://数据库服务器IP:端口/数据库名称】

         参数username---登陆数据库服务器的用户名

         参数password----登陆数据库服务器的密码

     2.2 java.sqlConnection接口---数据库连接,负责与进行数据库间通讯,SQL执行以及事务处理都是在某个特定Connection环境中进行的。可以产生用以执行SQL的Statement。

        1.产生用以执行SQL的Statement。

          [用以执行SQL查询和更新(针对静态SQL语句和单次执行)]

          Statement  createStatement()

          select   * from  t_user  where uid=12;[拼接字符串]

        2.产生用以执行SQL的PreparedStatement。

           [用以执行包含动态参数的SQL查询和更新(在服务器端编译,允许重复执行以提高效率)]

           PreparedStatement  prepartatement(Sql)

           参数sql---包含动态参数的SQL语句

           select   * from  t_user  where uid=?;【需要给sql动态传递参数值

           ?---占位符

      2.3 java.sql包Statement接口---用以执行SQL查询和更新(针对静态SQL语句和单次执行)

            以执行SQL更新insert / update /delete

            int executeUpdate(SQL)

            参数SQL---[insert / update /delete]字符串类型的sql语句。

            以执行SQL查询select】

            ResultSet    executeQuery(SQL)

           参数SQL---[select]字符串类型的sql语句。

      2.4 java.sqlPreparedStatement接口--用以执行包含动态参数的SQL查询和更新(在服务器端编译,允许重复执行以提高效率)

            以执行SQL更新【insert / update /delete】

            int executeUpdate()

            以执行SQL查询【select】

            ResultSet    executeQuery()

            注意:PreparedStatement需要执行的sql语句

         1.sql语句是在创建PreparedStatement对象的时候传入执行,不是在调用executeUpdate()/executeQuery()的时候传入。

         2.PreparedStatement对象所执行的sql语句中有“?【占位符】”

           有一组填补sql语句占位符的方法

           setInt(参数1,参数2)  int--int

           setLong(参数1,参数2)  long---bigint

           setDouble(参数1,参数2) double--double

           setString(参数1,参数2)  String--varchar/char

           .....................

           参数1---SQL语句中“?”的位置【从1开始】

           参数2---SQL语句中“?”具体数据值

       2.5.java.sqlResultSet接口 --- 数据库结果集的数据表,通常通过执行查询数据库的语句生成。

             ResultSet 对象具有指向其当前数据行的指针。最初,指针被置于第一行之前。next 方法将指针移动到下一行;因为该方法在 ResultSet 对象中没有下一行时返回 false,所以可以在 while 循环中使用它来迭代结果集。

             默认的 ResultSet 对象不可更新,仅有一个向前移动的指针。因此,只能迭代它一次,并且只能按从第一行到最后一行的顺序进行。

              boolean  next()--将指针移动到下一行;因为该方法在 ResultSet 对象中没有下一行时返回 false。在 while 循环中使用它来迭代结果集。

             由于通过next方法将指针移动到下一行,我们现在就可以取出指针指向的当前行的数据值。要获取当前行中保存的数据值,就需要一列一列的取出数据值,所以ResultSet会有一组获取

指定列数据的方法。

              getXXXX(int colindex)---int colindex[当前需要获取数据值的列在当前行中的位置【从0开始】]

                                                                              getXXXX(String colname)--String colname[当前需要获取数据值的列名称]

1 [int]--[id]

Zhangsan  [varchar]--[name]

23 [int]--[age]

2[int]--[id]

Lisi  [varchar]--[name]

24  [int]--[age]

3[int]--[id]

Wangwu  [varchar]--[name]

25  [int]--[age]

通过ResultSet对象得到第一行数据值
int  id=ResultSet对象.getInt(0);
int  id=ResultSet对象.getInt(“id”);
//id==1
String name=ResultSet对象.getString(1);
String name=ResultSet对象.getString(“name”);
//name==zhangsan
int  age=ResultSet对象.getInt(2);
int  age=ResultSet对象.getInt(“age”);
//age==23

    3.JDBC访问数据库的流程

            测试基于Statement接口的数据库访问

package com.wangxing.bean;
/**
 * 保存用户信息的java类
 * @author Administrator
 *
 */
public class UserBean {
	private int uid;
	private String uname;
	private int uage;
	private String uaddress;
	public int getUid() {
		return uid;
	}
	public void setUid(int uid) {
		this.uid = uid;
	}
	public String getUname() {
		return uname;
	}
	public void setUname(String uname) {
		this.uname = uname;
	}
	public int getUage() {
		return uage;
	}
	public void setUage(int uage) {
		this.uage = uage;
	}
	public String getUaddress() {
		return uaddress;
	}
	public void setUaddress(String uaddress) {
		this.uaddress = uaddress;
	}	
}
package com.wagxing.db;

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

/**
 * 数据库驱动管理类--加载数据库启动,得到数据库连接
 * @author Administrator
 *
 */
public class DBConnection {
		//定义数据库的URL
		//【jdbc:mysql://数据库服务器IP:端口/数据库名称】
		private static final String URL="jdbc:mysql://127.0.0.1:3306/test";
		//定义数据库的用户名
		private static final String USERNAME="root";
		//定义数据库的密码
		private static final String PASSWORD="123456";
		//定义数据库驱动名称
		private static final String DARIERNAME="com.mysql.jdbc.Driver";
		//加载数据库驱动
		static{
			try {
				Class.forName(DARIERNAME);
			} catch (ClassNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}		
		//得到数据库连接对象
		public static Connection getConnection(){
			Connection connection=null;
			try {
				connection=DriverManager.getConnection(URL, USERNAME, PASSWORD);
			} catch (SQLException e) {
				System.out.println("数据库连接失败!");
				e.printStackTrace();
			}
			return connection;
		}		
}
package com.wangxing.dao;

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

import com.wagxing.db.DBConnection;
import com.wangxing.bean.UserBean;

/**
 * 用户数据库的访问对象
 * @author Administrator
 *
 */
public class UseDaoObject {
	//添加用户信息
	public void insertUser(UserBean userBean){
		Connection conn=null;
		Statement statement=null;
		try{
		//得到数据库连接
		conn=DBConnection.getConnection();
		// 创建添加数据的sql语句
		String into="insert into t_user values(null,'"+userBean.getUname()+"',"+userBean.getUage()+",'"
				+userBean.getUaddress()+"');";
		System.out.println(into);
		// 创建Statement对象
			statement=conn.createStatement();
		// 执行添加sql
			int temp=statement.executeUpdate(into);
			if(temp>0){
				System.out.println("添加信息成功!");
			}			
		} catch (SQLException e) {
			System.out.println("添加信息失败!");
			e.printStackTrace();
		}finally{
			if(statement!=null && conn!=null){
				try {
					statement.close();
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}	
			}
		}	
	}
	//根据用户id修改用户信息
	public void updataUser(UserBean userBean){
		Connection conn=null;
		Statement statement=null;
		try{
			//得到数据库连接
			conn=DBConnection.getConnection();
			//创建要执行的sql语句
			String into="update t_user set u_name='" + userBean.getUname() + "',u_age=" + userBean.getUage()
					+ ",u_address='" + userBean.getUaddress() + "' where u_id=" + userBean.getUid() + ";";
			System.out.println(into);
			//创建statemen对象
			statement=conn.createStatement();
			//执行sql语句
			int temp=statement.executeUpdate(into);
			if(temp>0){
				System.out.println("修改成功");
			}
		}catch(Exception  e){
			System.out.println("修改失败!");
			e.printStackTrace();
		}finally{
			if(conn!=null && statement!=null){
				try {
					statement.close();
					conn.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}			
			}
		}
	}
	// 根据用户id查询用户信息
	public UserBean selectById(int userid){
		UserBean userBean=null;
		Connection conn=null;
		Statement statement=null;
		ResultSet resultSet=null;
		try{
			//创建数据库连接
			conn=DBConnection.getConnection();
			//要执行的sql语句
			String into="select * from t_user where u_id="+userid+";";
			//创建statement对象
			statement=conn.createStatement();
			//执行sql语句
			resultSet=statement.executeQuery(into);
				if(resultSet.next()){
				int id=resultSet.getInt("u_id");
				String name=resultSet.getString("u_name");
				int age=resultSet.getInt("u_age");
				String address=resultSet.getString("u_address");
				userBean=new UserBean();
				userBean.setUid(id);
				userBean.setUname(name);
				userBean.setUage(age);
				userBean.setUaddress(address);	
			}
			
		}catch(Exception e){
			System.out.println("查询失败");
			e.printStackTrace();
		}finally{
			if(conn!=null && statement!=null){
				try {
					statement.close();
					conn.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}					
			}			
		}
		return userBean;
	}
	// 查询所有用户信息
	public List<UserBean> selectAll(){
		List<UserBean> userlist=new ArrayList<UserBean>();
		Connection conn = null;
		Statement statement = null;
		ResultSet resultSet=null;
		try{
			conn=DBConnection.getConnection();
			String into="select * from t_user;";
			System.out.println(into);
			statement=conn.createStatement();
			resultSet=statement.executeQuery(into);
			while(resultSet.next()){
				int id=resultSet.getInt("u_id");
				String name=resultSet.getString("u_name");
				int age=resultSet.getInt("u_age");
				String address=resultSet.getString("u_address");
				UserBean userBean=new UserBean();
				userBean=new UserBean();
				userBean.setUid(id);
				userBean.setUname(name);
				userBean.setUage(age);
				userBean.setUaddress(address);	
				userlist.add(userBean);
			}
		}catch(Exception e){
			System.out.println("查询失败");
			e.printStackTrace();
		}finally{
			if(conn!=null && statement!=null){
				try {
					statement.close();
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}	
			}		
		}
		return userlist;
	}
	// 根据id删除用户信息
	public void deleteUserById(int userid){
		Connection conn=null;
		Statement statement=null;
		try{
			conn=DBConnection.getConnection();
			String into="delete from t_user where u_id="+userid+";";
			statement=conn.createStatement();
			int temp=statement.executeUpdate(into);
			if(temp>0){
				System.out.println("删除成功");
			}
		}catch(Exception  e){
			System.out.println("删除失败");
			e.printStackTrace();
		}finally{
			try {
				conn.close();
				statement.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}	
		}
	}
	
}
package com.wangxing.test;

import java.util.List;

import com.wangxing.bean.UserBean;
import com.wangxing.dao.UseDaoObject;

public class Main {
	public static void main(String[] args) {
		UseDaoObject use=new UseDaoObject();
		UserBean userBean=new UserBean();
		/*	
		测试添加信息
		userBean.setUname("zhangsan");
		userBean.setUage(23);
		userBean.setUaddress("xian");
		use.insertUser(userBean);
		*/
		/*
		 测试修改信息
		userBean.setUid(2);
		userBean.setUname("张三");
		userBean.setUage(33);
		userBean.setUaddress("西安");
		use.updataUser(userBean);
		*/
		/*
		 测试通过id查询信息
		UserBean user=use.selectById(1);
		System.out.println(user.getUid()+"\t"+user.getUname()+
				"\t"+user.getUage()+"\t"+user.getUaddress());
		*/	
		/*
		  测试查询所有信息
		List<UserBean> userlist=use.selectAll();
		if(userlist.size()>0){
			for (UserBean user : userlist) {
				System.out.println(user.getUid()+"\t"+user.getUname()+
						"\t"+user.getUage()+"\t"+user.getUaddress());
			}
		}else{
			System.out.println("没有数据");
		}	
		*/	
		//测试删除信息
		use.deleteUserById(1);
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值