Java中级测试题六-JDBC与Java数据库编程基础(2-2)

涎涎原创约 1936 字大约 6 分钟...JavaJava

Java中级测试题六-JDBC与Java数据库编程基础(2-2)

注意

本博文仅供学术研究和交流参考,严禁将其用于商业用途。如因违规使用产生的任何法律问题,使用者需自行负责。

一、简答题

1.1 简述JDBC应用程序的基本步骤

JDBC应用程序大概有以下六个步骤
1、创建连接对象
2、创建执行SQL语句的命令对象
3、执行sql语句
4、获取结果:
如果是查询获取结果集如果是更新 获取 影响的行数
5、如果是查询 需要从结果集中获取数据
6、关闭所有资源 先创建的对象后关闭

如下实例:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class Test1 {
	public static void main(String[] args) {
//1、创建连接对象
    Connection conn = null;//连接对象
    Statement stmt = null;//命令对象
    ResultSet rs = null;//结果集对象
		
try {
Class.forName("oracle.jdbc.driver.OracleDriver");//获取驱动程序
conn = DriverManager.getConnection
("jdbc:oracle:thin:@localhost:1521:orcl",
            "scott","scott123");
System.out.println(conn);//白盒测试 是否连接成功
//2、创建执行SQL语句的命令对象
stmt = conn.createStatement();
//3、执行sql语句 query_sal_by_empno
String query_sal_by_empno = "select sal from emp where 
empno = "+7369;
System.out.println(query_sal_by_empno);//白盒测试sql语句	
//4.获取结果集如果是查询获取结果集 如果是更新则结果集是空
rs = stmt.executeQuery(query_sal_by_empno);
//5.如果是查询,需要从结果集获取数据,
if(rs.next()) {//将指针往下移确定是否为空
	Double sal = rs.getDouble("sal");//调用方法并传列名返回结果
        System.out.println(sal);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }finally {
//6、关闭所有资源 先创建的对象后关闭
        try {
            if(rs != null) {
                rs.close();
            }
            if(stmt != null) {
                stmt.close();
            }
            if(conn != null) {
                conn.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
}

1.2 简述Class.forName()的作用

Class.forName()作用是获取驱动程序

1.3 简述对Statement,PreparedStatement理解

Statement 和 PreparedStatement的区别:
1.PreparedStatement是预编译的,就是sql语句在给占位符赋值之前会提前编译好
2.你的参数ename="jones' or 1='1",那么PreparedStatement就认为它是一个值,
不会对其中的内容进行解析,比如中间有个or,它不会解析
 3.以后建议大家使用预编译的PreparedStatement,不但效率
高,能够重用,而且安全

二、编程题

2.1 写一个连接Oracle数据库,并在User表中实现如下操作数据表定义如下:

首先在Oracle可视化工具中创建此表:
以pl/sql为例:

create table tab_user(
  col_name varchar(50) primary key,
  col_pwd varchar(6) not null,
  col_email varchar(64),
  col_birthday date
)

如图:

其次写对应的Java代码:

1.导入对应的jdbc包 导入步骤参考我的上一篇博客 Eclipse导入jdbc包open in new window 2、新建一个jdbc.properties文件,建立步骤参考我的上一博客 jdbc.properties文件建立及配置open in new window 3、对应的代码如下:

jdbc.properties

jdbc_url=jdbc:oracle:thin:@localhost:1521:orcl
jdbc_username=scott
jdbc_password=abcde123
jdbc_driver=oracle.jdbc.driver.OracleDriver

DBUtil.java

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
/**
 * 连接数据库的工具类
 * @author xianxian
 *
 */
public class DBUtil {
	private static String driverName;
	private static String url;
	private static String username;
	private static String password;
	
	static
	{
		//如何读取属性文件:jdbc.properties
		//使用的技术:使用类加载器获取输入流进而加载属性文件,拿到其中的数据
		InputStream in = DBUtil.class.getClassLoader().getResourceAsStream("jdbc.properties");
		Properties prop = new Properties();
		try {
			prop.load(in);
		} catch (IOException e) {
			e.printStackTrace();
		}
		driverName=prop.getProperty("jdbc_driver");
		url=prop.getProperty("jdbc_url");
		username=prop.getProperty("jdbc_username");
		password=prop.getProperty("jdbc_password");
	}
	//获取连接对象的方法
	public static Connection getConnection()
	{
		Connection conn=null;
		try {
			Class.forName(driverName);
			conn=DriverManager.getConnection(url, username, password);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return conn;
	}
	//释放资源的方法
	public static void release(Connection conn, Statement stmt, ResultSet rs) {
		try {
			if (rs != null) {
				rs.close();
			}
			if (stmt != null) {
				stmt.close();
			}
			if (conn != null) {
				conn.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

测试类:

import java.sql.Connection;

public class Test {

	public static void main(String[] args) {
		Connection conn = DBUtil.getConnection();
		System.out.println(conn);

	}

}

如图,经测试连接成功: 2.1.1 插入如下数据:

新建一个实体类User

import java.util.Date;

/**
 * 实体类User
 * @author xxx
 *
 */
public class User {

	private String name;
	private String pwd;
	private String email;
	private Date birthday;
	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;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	@Override
	public String toString() {
		return "User [name=" + name + ", pwd=" + pwd + ", email=" + email + ", birthday=" + birthday + "]";
	}
	public User(String name, String pwd, String email, Date birthday) {
		super();
		this.name = name;
		this.pwd = pwd;
		this.email = email;
		this.birthday = birthday;
	}
	public User() {
		super();
	}
}

再建一个数据访问对象UserDao 最终得到效果如下:

2.1.2张三的时间更新为当前系统时间

2.1.3删除名为李四的全部记录

全部代码:

DBUtil

package highchapter6;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
/**
 * 连接数据库的工具类
 * @author xianxian
 *
 */
public class DBUtil {
	private static String driverName;
	private static String url;
	private static String username;
	private static String password;
	
	static
	{
		//如何读取属性文件:jdbc.properties
		//使用的技术:使用类加载器获取输入流进而加载属性文件,拿到其中的数据
		InputStream in = DBUtil.class.getClassLoader().getResourceAsStream("jdbc.properties");
		Properties prop = new Properties();
		try {
			prop.load(in);
		} catch (IOException e) {
			e.printStackTrace();
		}
		driverName=prop.getProperty("jdbc_driver");
		url=prop.getProperty("jdbc_url");
		username=prop.getProperty("jdbc_username");
		password=prop.getProperty("jdbc_password");
	}
	//获取连接对象的方法
	public static Connection getConnection()
	{
		Connection conn=null;
		try {
			Class.forName(driverName);
			conn=DriverManager.getConnection(url, username, password);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return conn;
	}
	//释放资源的方法
	public static void release(Connection conn, Statement stmt, ResultSet rs) {
		try {
			if (rs != null) {
				rs.close();
			}
			if (stmt != null) {
				stmt.close();
			}
			if (conn != null) {
				conn.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

UserDao

package highchapter6;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.Statement;

/**
 * 数据访问对象UserDao 
 * @author xianxian
 *
 */
public class UserDao {
	// 添加一个用户信息
	public int addUser(User user) {
		int rows = 0;

		Connection conn=null;
		PreparedStatement stmt=null;
		
		try {
			conn=DBUtil.getConnection();
			conn.setAutoCommit(false);
			stmt=conn.prepareStatement("insert into tab_user (col_name,col_pwd,col_email,col_birthday) values (?,?,?,?)");
			/*
			 * 注意:在执行更新的sql语句之前,需要先给占位符赋值
			 */
	        stmt.setString(1, user.getName());
			stmt.setString(2,user.getPwd());
			stmt.setString(3, user.getEmail());
			/*Date date=emp.getHiredate();
			long time=date.getTime();
			java.sql.Date date2=new java.sql.Date(time);*/
			stmt.setDate(4,new java.sql.Date(user.getBirthday().getTime()));
			
			/*
			 * 执行更新
			 */
			rows=stmt.executeUpdate();
			if(rows == 1) {
				conn.commit();
			}else {
				conn.rollback();
			}
		} catch (Exception e) {
			e.printStackTrace();
			try {
				conn.rollback();
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}finally
		{
			DBUtil.release(conn, stmt, null);
		}
		return rows;
	}

	//更新某个用户信息
	public int updateUser(User user) {
		int rows = 0;
		Connection conn = null;
		PreparedStatement stmt = null;

		try {
			conn = DBUtil.getConnection();
			conn.setAutoCommit(false);
			stmt = conn.prepareStatement("update tab_user set col_name=?,col_pwd=?,"
					+ "col_email=?,col_birthday=? where col_name=?");
			//注意:在执行更新操作之前必须 给点位符赋值
			stmt.setString(1,user.getName());//1表示第一个?号
			stmt.setString(2,user.getPwd());//2表示第二个?号
			stmt.setString(3,user.getEmail());//3表示第三个?号
			
//			Date date = emp.getHiredate();
//			long time = date.getTime();
//			java.sql.Date date2 = new java.sql.Date(time);
			
			stmt.setDate(4,new java.sql.Date(user.getBirthday().getTime()));
			stmt.setString(5,user.getName());
			
			//执行 更新
			rows = stmt.executeUpdate();
			if(rows == 1) {
				conn.commit();
			}else {
				conn.rollback();
			}
			
		} catch (Exception e) {
			e.printStackTrace();
			try {
				conn.rollback();
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}finally {
			DBUtil.release(conn, stmt, null);
		}
		return rows;
	}
	//删除某个用户信息
	public int deleteUserByName(String name) {
		int rows = 0;
		Connection conn=null;
		PreparedStatement stmt=null;
		try {
			conn=DBUtil.getConnection();
			conn.setAutoCommit(false);
			String delete_user_by_name="delete from tab_user where col_name=?";
			stmt = conn.prepareStatement(delete_user_by_name);
			stmt.setString(1,name);
			
			rows=stmt.executeUpdate(delete_user_by_name);
			if(rows == 1) {
				conn.commit();
			}else {
				conn.rollback();
			}
		} catch (Exception e) {
			e.printStackTrace();
			try {
				conn.rollback();
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}finally
		{
			DBUtil.release(conn, stmt, null);
		}
		return rows;
	}

Test

package highchapter6;

import java.sql.Connection;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class Test {
	public static void test_conn() {
		Connection conn = DBUtil.getConnection();
		System.out.println(conn);
	}
	public static void test_addUser() {
		UserDao dao = new UserDao();
		try {
			User user1 = new User("张三","888888","zhangsan@126.com",
					new SimpleDateFormat("YYYY-MM-DD").parse("1986-10-11"));
			User user2 = new User("李四","999999","lisi@126.com",
                    new SimpleDateFormat("YYYY-MM-DD").parse("1988-10-23"));
			User user3 = new User("王五","777777","wangwu@126.com",
                    new SimpleDateFormat("YYYY-MM-DD").parse("1988-10-23"));
			dao.addUser(user1);
			dao.addUser(user2);
			dao.addUser(user3);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		
	}

	public static void test_updateUser() {
		UserDao dao = new UserDao();
		User user = new User("张三","888888","zhangsan@126.com",new Date());
		dao.updateUser(user);
	}
	public static void test_deleteUserByName() {
		UserDao dao = new UserDao();
		dao.deleteUserByName("李四");
	}
	public static void main(String[] args) {
//		test_conn();//连接测试
//		test_addUser();//添加测试
//		test_updateUser();//更新测试
		test_deleteUserByName();//删除测试
	}
}

分割线


相关信息

以上就是我关于 Java中级测试题六-JDBC与Java数据库编程基础(2-2) 知识点的整理与总结的全部内容,希望对你有帮助。。。。。。。

上次编辑于:
贡献者: 涎涎
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.4