知识屋:更实用的电脑技术知识网站
所在位置:首页 > 科技

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

发表时间:2022-03-26来源:网络

一、简答题

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.S; 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 (S 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包
2、新建一个jdbc.properties文件,建立步骤参考我的上一博客
jdbc.properties文件建立及配置
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.S; 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 (S 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.S; 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 (S 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","", new SimpleDateFormat("YYYY-MM-DD").parse("1986-10-11")); User user2 = new User("李四","999999","", new SimpleDateFormat("YYYY-MM-DD").parse("1988-10-23")); User user3 = new User("王五","777777","", 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","",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();//删除测试 } }

分割线

博主为咯学编程:父母不同意学编程,现已断绝关系;恋人不同意学编程,现已分手;亲戚不同意学编程,现已断绝来往;老板不同意学编程,现已失业三十年。。。。。。如果此博文有帮到你欢迎打赏,金额不限。。。

收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜