20.4 数据库操作

1、连接数据库
  要访问数据,首先要加载数据库的驱动程序(值需要在第一次访问数据库时加载一次),然后每次访问数据时创建一个Connection对象,接着执行操作数据库的SQL语句,最后在完成数据库操作后销毁前面创建的Connection对象,释放与数据库的连接。
  注意:在本实例中将连接数据库作为单独的一个方法,并以Connection对象作为返回值。这样写的好处是在遇到对数据库卡执行操作的程序时可直接调用Conn类的getConnection()方法获取连接,增加了代码的重用性。
例子:在项目中创建类Conn,并创建getConnection()方法,获取与MySQL数据库的拦截,在主方法中调用该方法。

 1 import java.sql.*; //导入java.sql包
 2
 3 public class Conn { // 创建类Conn
 4     Connection con; // 声明Connection对象
 5
 6     public Connection getConnection() { // 建立返回值为Connection的方法
 7         try { // 加载数据库驱动类
 8             Class.forName("com.mysql.jdbc.Driver");
 9             System.out.println("数据库驱动加载成功");
10         } catch (ClassNotFoundException e) {
11             e.printStackTrace();
12         }
13         try { // 通过访问数据库的URL获取数据库连接对象
14             con = DriverManager.getConnection("jdbc:mysql:"
15                     + "//127.0.0.1:3306/test", "root", "123456");
16             System.out.println("数据库连接成功");
17         } catch (SQLException e) {
18             e.printStackTrace();
19         }
20         return con; // 按方法要求返回一个Connection对象
21     }
22
23     public static void main(String[] args) { // 主方法
24         Conn c = new Conn(); // 创建本类对象
25         c.getConnection(); // 调用连接数据库的方法
26     }
27 }

2、向数据库发送SQL语句
  在上例中的getConnection()方法,只是获取与数据库的连接,要执行SQL语句首先要获得Statement类对象。通过上例穿件的连接数据库对象con的createStatement()方法可获得Statement对象。
  创建Statement类对象sql如下:
    try{
      Statement sql = con.createStatement();
    }catch (SQLException e){
      e.printStackTrace();
    }

3、处理查询结果集
  有了Statement对象以后,可调用相应的方法实现对数据库的查询和修改,并将查询的结果集存放在ResulteSet类的对象中。
  获取查询结果集,代码如下:
    ResultSet res = sql.executeQuery("select * from emp");
  运行结果为返回一个ResultSet对象,ResultSet对象一次只可以看到结果集中的一行数据,使用该类的next()方法可将光标从当前位置移向下一行。

4、顺序查询
  ResultSet类的next()方法的返回值是boolean类型的数据,当游标移动到最后一行之后会返回false。下面的实例就是将数据表emp中的全部信息显示到控制台上。
例子:本实例在getConnection()方法中获取与数据库的连接,在主方法中将数据表tb_stu中的数据检索出来,保存在便利查询结果集ResulteSet中,并遍历该结果集。

 1 import java.sql.*;
 2
 3 public class Gradation { // 创建类
 4     static Connection con; // 声明Connection对象
 5     static Statement sql; // 声明Statement对象
 6     static ResultSet res; // 声明ResultSet对象
 7
 8     public Connection getConnection() { // 连接数据库方法
 9
10         try {
11             Class.forName("com.mysql.jdbc.Driver");
12             con = DriverManager.getConnection("jdbc:mysql:"
13                     + "//127.0.0.1:3306/test", "root", "123456");
14         } catch (Exception e) {
15             e.printStackTrace();
16         }
17         return con; // 返回Connection对象
18     }
19
20     public static void main(String[] args) { // 主方法
21         Gradation c = new Gradation(); // 创建本类对象
22         con = c.getConnection(); // 与数据库建立连接
23         try {
24             sql = con.createStatement(); // 实例化Statement对象
25             // 执行SQL语句,返回结果集
26             res = sql.executeQuery("select * from tb_stu");
27             while (res.next()) { // 如果当前语句不是最后一条则进入循环
28                 String id = res.getString("id"); // 获取列名是"id"的字段值
29                 // 获取列名是"name"的字段值
30                 String name = res.getString("name");
31                 // 获取列名是"sex"的字段值
32                 String sex = res.getString("sex");
33                 // 获取列名是"birthday"的字段值
34                 String birthday = res.getString("birthday");
35                 System.out.print("编号:" + id); // 将列值输出
36                 System.out.print(" 姓名:" + name);
37                 System.out.print(" 性别:" + sex);
38                 System.out.println(" 生日:" + birthday);
39             }
40         } catch (Exception e) {
41             e.printStackTrace();
42         }
43     }
44 }

5、模糊查询
  SQL语句中提供了LIKE操作符用于模糊查询,可使用“%”来代替0个或多个字符,使用下划线“_”来代替一个字符。例如,在查询姓张的同学的信息时,可使用以下SQL语句:
select * from tb_stu where name like ‘张%‘;
例子:本实例在getConnection()方法中获取与数据库的连接,在主方法中间数据表tb_stu中姓张的同学的信息检索出来,保存在ResulteSet结果集中,并遍历该集合。

 1 import java.sql.*;
 2
 3 public class Train { // 创建类Train
 4     static Connection con; // 声明Connection对象
 5     static Statement sql; // 声明Statement对象
 6     static ResultSet res; // 声明ResultSet对象
 7
 8     public Connection getConnection() { // 与数据库连接方法
 9         try {
10             Class.forName("com.mysql.jdbc.Driver");
11             con = DriverManager.getConnection("jdbc:mysql:"
12                     + "//127.0.0.1:3306/test", "root", "123456");
13         } catch (Exception e) {
14             e.printStackTrace();
15         }
16         return con; // 返回Connection对象
17     }
18
19     public static void main(String[] args) { // 主方法
20         Train c = new Train(); // 创建本类对象
21         con = c.getConnection(); // 获取与数据库的连接
22         try { // try语句捕捉异常
23             sql = con.createStatement(); // 实例化Statement对象
24             res = sql
25                     .executeQuery("select * from tb_stu where name like ‘张%‘");// 执行SQL语句
26             while (res.next()) { // 如果当前记录不是结果集中的最后一条,进入循环体
27                 String id = res.getString(1); // 获取id字段值
28                 String name = res.getString("name"); // 获取name字段值
29                 String sex = res.getString("sex"); // 获取sex字段值
30                 String birthday = res.getString("birthday"); // 获取birthday字段值
31                 System.out.print("编号:" + id); // 输出信息
32                 System.out.print(" 姓名:" + name);
33                 System.out.print(" 性别:" + sex);
34                 System.out.println(" 生日:" + birthday);
35             }
36         } catch (Exception e) { // 处理异常
37             e.printStackTrace(); // 输出异常信息
38         }
39     }
40 }

6、预处理语句
  向数据库发送一个SQL语句,数据库中的SQL解释器负责吧SQL语句生成底层的内部命令,然后执行该命令,完成相关的数据操作。如果不断地向数据库提交SQL语句,肯定会增加数据库中SQL解释器的负担,影响执行的速度。
  对于JDBC,可以通过Connection对象的preparedStatement(String sql)方法对SQL语句进行预处理,生成数据库底层的内部命令,并将该命令封装在PreparedStatement对象中,通过调用该对象的相应方法执行底层数据库命令。这样应用程序能针对连接的数据库,实现将SQL语句解释为数据库底层的内部命令,然后让数据库执行这个命令,这样可以减轻数据库的负担,提高访问数据库的速度。
  对SQL进行预处理可以使用通配符“?”来代替任何的字段。如下:
    sql = con.prepareStatement("select * from tb_stu where id=?");
  在执行预处理语句前,必须用相应方法来设置通配符所表示的值。如下:
    sql.setint(1,2);
  上述语句中的“1”表示从左向右的第几个通配符,“2”表示设置的通配符的值。将通配符的值设置为2后,功能等同于:
    sql = con.prepareStatement("selelct * from tb_stu where id=2");
  尽管书写两条语句看似麻烦了一些,但使用预处理语句可使应用程序更容易动态地改变SQL语句中关于字段值条件的设定。
  注意:setXXX()方法为SQL语句中的参数赋值时,建立利用与参数匹配的方法,也可以利用setObject()方法为各种类型的参数赋值。例如:sql.setObject(2,‘李丽‘);
例子:本实例预处理语句动态地获取指定编号的同学的信息,在此以查询编号为19的同学的信息为例介绍预处理语句的用法。

 1 import java.sql.*;
 2 public class Prep { // 创建类Perp
 3     static Connection con; // 声明Connection对象
 4     static PreparedStatement sql; // 声明预处理对象
 5     static ResultSet res; // 声明结果集对象
 6     public Connection getConnection() { // 与数据库连接方法
 7         try {
 8             Class.forName("com.mysql.jdbc.Driver");
 9             con = DriverManager.getConnection("jdbc:mysql:"
10                     + "//127.0.0.1:3306/test", "root", "123456");
11         } catch (Exception e) {
12             e.printStackTrace();
13         }
14         return con; // 返回Connection对象
15     }
16
17     public static void main(String[] args) { // 主方法
18         Prep c = new Prep(); // 创建本类对象
19         con = c.getConnection(); // 获取与数据库的连接
20         try {
21             // 实例化预处理对象
22             sql = con.prepareStatement("select * from tb_stu"
23                     + " where id = ?");
24             sql.setInt(1, 4); // 设置参数
25             res = sql.executeQuery(); // 执行预处理语句
26             // 如果当前记录不是结果集中最后一行,则进入循环体
27             while (res.next()) {
28                 String id = res.getString(1); // 获取结果集中第一列的值
29                 String name = res.getString("name"); // 获取name列的列值
30                 String sex = res.getString("sex"); // 获取sex列的列值
31                 // 获取birthday列的列值
32                 String birthday = res.getString("birthday");
33                 System.out.print("编号:" + id); // 输出信息
34                 System.out.print(" 姓名:" + name);
35                 System.out.print(" 性别:" + sex);
36                 System.out.println(" 生日:" + birthday);
37             }
38         } catch (Exception e) {
39             e.printStackTrace();
40         }
41     }
42 }

7、添加、修改、删除记录
  通过SQL语句考科一对数据还行添加、修改和删除操作。可通过PreparedStatement类的指定参数动态对数据表中原有数据进行修改操作,并通过executeUpdate()方法执行更新语句操作。
  注意:executeQuery()方法是在PreparedStatement对象中执行SQL查询,并返回该查询生成的ResultSet对象,而executeUpdate()方法时在PreparedStatement对象中执行SQL语句,该语句必须是一个SQL数据操作语言(Date Maniplation Language,DML)语句,如INSETRT、UPDATE或DELETE语句,或者是无返回内容的SQL语句,如DDL语句。
例子:本实例通过预处理语句动态地对数据表tb_stu中的数据执行添加、修改、删除操作,并遍历对数据进行操作之前和对数据进行操作之后的tb_stu表中的数据。

 1 import java.sql.*;
 2
 3 public class Renewal { // 创建类
 4     static Connection con; // 声明Connection对象
 5     static PreparedStatement sql; // 声明PreparedStatement对象
 6     static ResultSet res; // 声明ResultSet对象
 7
 8     public Connection getConnection() {
 9         try {
10             Class.forName("com.mysql.jdbc.Driver");
11             con = DriverManager.getConnection("jdbc:mysql:"
12                     + "//127.0.0.1:3306/test", "root", "123456");
13         } catch (Exception e) {
14             e.printStackTrace();
15         }
16         return con;
17     }
18
19     public static void main(String[] args) {
20         Renewal c = new Renewal(); // 创建本类对象
21         con = c.getConnection(); // 调用连接数据库方法
22         try {
23             sql = con.prepareStatement("select * from tb_stu"); // 查询数据库
24             res = sql.executeQuery(); // 执行SQL语句
25             System.out.println("执行增加、修改、删除前数据:");
26             while (res.next()) {
27                 String id = res.getString(1);
28                 String name = res.getString("name");
29                 String sex = res.getString("sex");
30                 String birthday = res.getString("birthday"); // 遍历查询结果集
31                 System.out.print("编号:" + id);
32                 System.out.print(" 姓名:" + name);
33                 System.out.print(" 性别:" + sex);
34                 System.out.println(" 生日:" + birthday);
35             }
36             sql = con.prepareStatement("insert into tb_stu(name,sex,birthday) values(?,?,?)");
37             sql.setString(1, "张一"); // 预处理添加数据
38             sql.setString(2, "女");
39             sql.setString(3, "2012-12-1");
40             sql.executeUpdate();
41             sql = con.prepareStatement("update tb_stu set birthday "
42                     + "= ? where id = ? ");
43             sql.setString(1, "2012-12-02"); // 更新数据
44             sql.setInt(2, 1); // 更新数据
45             sql.executeUpdate();
46             Statement stmt = con.createStatement();
47             stmt.executeUpdate("delete from tb_stu where id = 1");
48             // 查询修改数据后的tb_stu表中数据
49             sql = con.prepareStatement("select * from tb_stu");
50             res = sql.executeQuery(); // 执行SQL语句
51             System.out.println("执行增加、修改、删除后的数据:");
52             while (res.next()) {
53                 String id = res.getString(1);
54                 String name = res.getString("name");
55                 String sex = res.getString("sex");
56                 String birthday = res.getString("birthday");
57                 System.out.print("编号:" + id);
58                 System.out.print(" 姓名:" + name);
59                 System.out.print(" 性别:" + sex);
60                 System.out.println(" 生日:" + birthday);
61             }
62         } catch (Exception e) {
63             e.printStackTrace();
64         }
65     }
66 }

8、参考例子

 1 import java.sql.*;
 2
 3 public class SearchEmp {
 4
 5     static Connection con;
 6     static Statement sql;
 7     static ResultSet res;
 8
 9     public Connection getConnection() {
10         try {
11             Class.forName("com.mysql.jdbc.Driver");
12             con = DriverManager.getConnection(
13                     "jdbc:mysql://127.0.0.1:3306/test", "root", "123456");
14         } catch (Exception e) {
15             e.printStackTrace();
16         }
17         return con;
18     }
19
20     public static void main(String[] args) {
21         SearchEmp c = new SearchEmp();
22         con = c.getConnection();
23         try {
24             sql = con.createStatement();
25             res = sql.executeQuery("select * from tb_emp where"
26                     + " dapt = ‘销售部‘");
27             while (res.next()) {
28                 String id = res.getString(1);
29                 String name = res.getString("name");
30                 String sex = res.getString("sex");
31                 String birthday = res.getString("birthday");
32                 System.out.print("编号:" + id);
33                 System.out.print(" 姓名:" + name);
34                 System.out.print(" 性别:" + sex);
35                 System.out.println(" 生日:" + birthday);
36             }
37         } catch (Exception e) {
38             e.printStackTrace();
39         }
40     }
41 }

 1 import java.sql.*;
 2
 3 public class InsertStu {
 4
 5     static Connection con;
 6     static PreparedStatement sql;
 7     static ResultSet res;
 8
 9     public Connection getConnection() {
10         try {
11             Class.forName("com.mysql.jdbc.Driver");
12             con = DriverManager.getConnection("jdbc:mysql:"
13                     + "//127.0.0.1:3306/test", "root", "123456");
14         } catch (Exception e) {
15             e.printStackTrace();
16         }
17         return con;
18     }
19
20     public static void main(String[] args) {
21         InsertStu c = new InsertStu();
22         con = c.getConnection();
23         try {
24             sql = con.prepareStatement("insert into tb_stu(name,sex,birthday) values(?,?,?)");
25             sql.setString(1, "李某");
26             sql.setString(2, "女");
27             sql.setString(3, "1999-10-20");
28             sql.executeUpdate();
29             System.out.println("数据插入成功。");
30         } catch (SQLException e) {
31             e.printStackTrace();
32         }
33     }
34 }

 1 import java.sql.*;
 2
 3 public class DeleteStu {
 4     static Connection con;
 5     static PreparedStatement sql;
 6     static ResultSet res;
 7     public Connection getConnection() {
 8         try {
 9             Class.forName("com.mysql.jdbc.Driver");
10             con = DriverManager.getConnection("jdbc:mysql:"
11                     + "//127.0.0.1:3306/test", "root", "123456");
12         } catch (Exception e) {
13             e.printStackTrace();
14         }
15         return con;
16     }
17     public static void main(String[] args) {
18         DeleteStu c = new DeleteStu();
19         con = c.getConnection();
20         try {
21             sql = con.prepareStatement("delete from tb_stu where birthday < ?");
22             sql.setString(1, "2010-01-01");
23             sql.executeUpdate();
24             System.out.println("数据删除完毕");
25         } catch (SQLException e) {
26             // TODO 自动生成 catch 块
27             e.printStackTrace();
28         }
29
30     }
31 }

原文地址:https://www.cnblogs.com/studycode/p/9612939.html

时间: 2024-11-14 11:07:46

20.4 数据库操作的相关文章

第20章 数据库操作----JDBC概述

JDBC是一种可用于执行SQL语句的Java API(Application Programming Interface,应用程序设计接口),是连接数据库和Java应用程序的纽带. 1.JDBC-ODBC桥 JDBC-ODBC桥是一个JDBC驱动程序,完成了从JDBC操作到ODBC操作之间的转换工作,允许JDBC驱动程序被用作ODBC的驱动程序.使用JDBC-ODBC桥连接数据库的步骤如下: (1)首先加载JDBC-ODBC桥的驱动程序,代码如下: Class.forName(“sun.jdbc

第20章 数据库操作----数据库种类

常见主流数据库分类: DB2, Oracle, Informix, Sybase, SQL Server, PostgreSQL, mySQL, Access数据库, FoxPro数据库, Teradata  1.IBM 的DB2 DB2是IBM著名的关系型数据库产品,DB2系统在企业级的应用中十分广泛.截止2003年,全球财富500强(Fortune 500)中有415家使用DB2,全球财富100强(Fortune100)中有96家使用DB2,用户遍布各个行业.2004年IBM的DB2就获得相

C# .NET更智能的数据库操作的封装

前述: 对数据库操作的封装,相信网络上已经有一大堆,ORM框架,或者是.NET本身的EF,都很好的支持数据库操作.这篇文章是分享自己所思考的,对数据库操作的简单封装.我对于这篇文章,认为被浏览者所关注重点的是怎么分析设计数据库操作封装,代码是其次.而且,这是我第一篇文章,为了想好怎么实现花了些天,代码是博客发表时现写的.所以我想,使用可能还有bug,而且没有try catch异常的设计. 这个框架我理应做到对数据库无关,无论是哪个数据库都能够使用.不过,重点在于分析,而不是代码.所以,为了更好的

数据库——基础(数据库操作,表格操作)——增加高级查询

笔记 LAMP:Linx(操作系统) A(阿帕奇)——网页的应用程序 M(Mysql):体积小,应用简单 P(PHP) 第一步:搭建网页环境——A\M\P WAMP:用WAMP搭建环境 DW:更好的显示 数据库的基本操作: 数据库——表结构——字段(列) 每一行数据成为一条数据(记录) 特点:关系型数据库,有严格的规范 1.必须有主键:能够唯一标识一条数据的字段 2 T-SQL:通用的数据库操作语句 自增长列code(主键列) ;连接键表 最后一个字段不加 ,#注释 创建表:create tab

SQLiteDatabase数据库操作详解

今天花了点时间总结了一下数据的相关知识android中系统自带的数据库SQLiteDatabase数据库,这种数据库操作起来比ormLite数据库(第三方的)麻烦点,但是我对这种数据库操作比较熟悉所以我就采用了这种数据库,如有错误欢迎大家批评指正,谢谢 1.SQLiteDatabase SQLiteDatabase本身是一个数据库的操作类,但是如果想进行数据库的操作,还需要android.database.sqlite.SQLiteOpenHelper类的帮助,在执行SQL语句时execSQL(

人事管理系统——数据库操作类

连接数据库类主要代码: 1 package PersonSystem; 2 3 import java.sql.*; 4 /** 5 * 6 * 连接数据库的类 7 * 8 */ 9 public class Database 10 { 11 private Statement stmt = null; 12 ResultSet rs = null; 13 private Connection conn = null; 14 String sql; 15 String strurl = "jdb

Python之路【第八篇】:堡垒机实例以及数据库操作

Python之路[第八篇]:堡垒机实例以及数据库操作 堡垒机前戏 开发堡垒机之前,先来学习Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作 SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接: + import paramiko transport = paramiko.Transport(('hostname', 22)) transport.connect(username='wupeiqi', password='123') ssh

MySql数据库操作

MySql数据库操作 –登录MySql:--– Windows环境进入cmd后输入mysql –h localhost –u root –p,再输入密码就可以启动mysql;其中localhost是mysql服务器所在的ip如果是本机可以用localhost. –数据库相关操作--– create database db_name(数据库名称)建名为db_name的数据库 show databases查看已经存在的数据库 drop database db_name删除名为db_name的数据库

phpcms v9 数据库操作函数

表明默认当前load_model('xxxx')模块所在表名xxxx 若要指定表名  则:操作在mysql.class.php中$this->db->select(...) 1.查询  $this->select($where = '', $data = '*', $limit = '', $order = '', $group = '', $key='')   返回结果集数组         条件 ,字段(id,name,email....),范围   排序方式,分组方式,按建名排序