`

数据库基础入门(三)——通过JDBC对数据库进行增删改查操作

阅读更多

 

何谓JDBC

   JDK提供了一组API,让我们可以在java程序中连结到网络上的数据库,并执行SQL语句返回执行结果,这组API的应用我们通常称作JDBC技术;相关的API都在包java.sql.*下面。

    Connection对象,则是由java.sql.DriverManager类的静态方法getConnection(…)得到,一但应用程序中得取一个Connection对象,即应用程序与数据库创建立了连结。随后,我们就可以通过操作Connection对象,创建Statement对象以执行sql语句,或从执行结果返回的ResultSet中取得查询结果。

以下是具体代码实现:

1)  连接到数据库:

1
2
3
4
5
6
7
8
9
10
11
12
public Connection getConnection() throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQ    LException{

     Connection conn = null;

     String url = "jdbc:mysql://localhost:3306/pets";//连接数据库的URL地址

     String username = "root";//连接数据库的用户名

     String password = "123456";//连接数据库的密码

     String driver = "com.mysql.jdbc.Driver";

     //加载驱动,然后再实例化驱动对象

     Class.forName(driver).newInstance();

     //建立连接对象

     conn = DriverManager.getConnection(url, username, password);

     return conn;

}

需要注意的是以下的几个参数,URL:本地用户localhost 端口号默认为3306 后面是数据库的名字。Username默认为root,密码就是你设置的数据库密码。DriverMySQL的驱动名应写成(驱动jar包要从www.mysql.org上下载):com.mysql.jdbc.Driver

如果是没有加载驱动将会出现找不到驱动的错误:

找不到驱动.png

2)使用预编译sql

数据库处理SQL语句时,需要一个预编译过程,数据库可以把一些格式固定的SQL编译后,存入在其内存池中,再次执行时即直接使用,不再执行预编译过程,这样可以有效提高数据库操作效率;我们可以通过预编译对象实现,如下代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//添加用户
   //username password mail添加的用户信息
   public void addMember(String username,String password,String mail){
     try{
        Connection con = this.getConnection();
        //定义SQL语句
        String sql = "insert into user(username,password,mail) values(?,?,?)";
        //获取预编译SQL执行对象,同时检测数据库中是否已经存在该SQL语句,如果存在,不存入SQL语句,如果不存在则存入SQL语句
        PreparedStatement pstmt = con.prepareStatement(sql);
        
        //给每一个?占位符指定数据
        pstmt.setString(1, username);
        pstmt.setString(2, password);
        pstmt.setString(3, mail);
  
        int count = pstmt.executeUpdate();//执行并记录次数
        
        if(count>0){
           System.out.println("插入数据成功!影响的记录条数是"+count);
        }else{
           System.out.println("插入数据失败!");
        }
     }catch(Exception e){
        e.printStackTrace();
     }
}

    每一个问号代表了一个表中的数值。其中的:pstmt.setString(1, username);1代表的是第几个占位符,既不能多也不能重复使用。

    连结对象创建成功后,即可通过连结对象创建statement对象,以执行SQL语句。我们可将要执行的SQL语句分为两类,一类为需要返回结果表的select语句;一类为执行insertupdatedelete操作的语句,因用程序只需要这类语句返回操作所生效的行数即可;对于这两种SQL操作,Statement在执行时可采用不同的方法,如是select语句,则使用executeQuery(sql)方法返回一个ResultSet对象,其中包含查询到的数据;如是另外三种,则使用executeUpdate(sql)方法,返回一个int型值,代表语句所影响的行数,如下代码示例:

1
2
3
4
5
6
7
8
Statement stmt=conn.createStatement();
String deleteSQL="delete from post where id=2";
int t=stmt.executeUpdate(sql);
if(count>0){
                System.out.println("删除数据成功!影响的记录条数是"+count);
            }else{
                System.out.println("删除数据失败!");
            }

    一下是针对具体项目的完整代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
 
public class Petsdb {
     
    public static void main(String[] args) {
        Petsdb db = new Petsdb();
        //查询
        db.queryMember("昭进");
        //添加
//      db.addMember("昭进","123456","123456");
        //删除字段
        db.delete_field();
        //增加字段
//      db.add_field();
        //删除用户
//      db.delete_user("昭进");
        //修改用户数据
//      db.update("new昭进", 1);
    }
    /**
     * 获取链接对象
     * @return connection对象
     */
    public Connection getConnection() throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException{
        Connection conn = null;
        String url = "jdbc:mysql://localhost:3306/pets";//连接数据库的URL地址
        String username = "root";//连接数据库的用户名
        String password = "123456";//连接数据库的密码
        String driver = "com.mysql.jdbc.Driver";
         
        //加载驱动,然后再实例化驱动对象
        Class.forName(driver).newInstance();
        //建立连接对象
        conn = DriverManager.getConnection(url, username, password);
        return conn;
    }
     
    /**
     * 添加用户
     * @param username用户名
     * @param password密码
     * @param mail邮箱
     */
    public void addMember(String username,String password,String mail){
        try{
            Connection con = this.getConnection();
            //定义SQL语句
            String sql = "insert into user(username,password,mail) values(?,?,?)";
            //获取预编译SQL执行对象,同时检测数据库中是否已经存在该SQL语句,如果存在,不存入SQL语句,如果不存在则存入SQL语句
            PreparedStatement pstmt = con.prepareStatement(sql);
             
            //给每一个?占位符指定数据
            pstmt.setString(1, username);
            pstmt.setString(2, password);
            pstmt.setString(3, mail);
 
            int count = pstmt.executeUpdate();//执行并记录次数
             
            if(count>0){
                System.out.println("插入数据成功!影响的记录条数是"+count);
            }else{
                System.out.println("插入数据失败!");
            }
             
        }catch(Exception e){
            e.printStackTrace();
        }
    }
     
    /** 
     * 查询用户
     * @param condition 查询条件
     */
    public void queryMember(String condition){
        try{
            Connection con = this.getConnection();
            //定义SQL语句
            String sql2 = "select * from user where username = ?";
             
//          //获取拼接SQL的执行对象
//          Statement stmt = con.createStatement();
//          //执行拼接SQL语句返回一个结果集对象
//          ResultSet rs = stmt.executeQuery(sql1);
             
            //获取预编译SQL执行对象,同时检测数据库中是否已经存在该SQL语句,如果存在,不存入SQL语句,如果不存在则存入SQL语句
            PreparedStatement pstmt = con.prepareStatement(sql2);
             
            //给每一个?占位符指定数据
            pstmt.setString(1, condition);
             
            ResultSet rs = pstmt.executeQuery();//执行
             
            System.out.println("id     username    password    mail");
            while(rs.next()){//检测是否还有下一条记录
                int id = rs.getInt("id");
                String username = rs.getString("username");
                String password = rs.getString("password");
                String mail = rs.getString("mail");
                 
                System.out.println(id+"          "+username+"                     "+password+"    "+mail);
            }
             
        }catch(Exception e){
            e.printStackTrace();
        }
    }
     
    /**
     * 删除字段
     */
    public void delete_field(){
        try{
            Connection con = this.getConnection();
            //定义SQL语句
            String sql = "alter table user drop sex";
            //获取预编译SQL执行对象,同时检测数据库中是否已经存在该SQL语句,如果存在,不存入SQL语句,如果不存在则存入SQL语句
            PreparedStatement pstmt = con.prepareStatement(sql);
             
            int count = pstmt.executeUpdate();//执行并记录次数
             
            //判断如何执行成功?pstmt.executeUpdate();只返回被影响行数 count=0;
//          if(count>0){
//              System.out.println("删除字段成功!影响的记录条数是"+count);
//          }else{
//              System.out.println("删除字段失败!"+count);
//          }
        }catch(Exception e){
            e.printStackTrace();
        }
    }
     
        /**
         * 添加字段  
         */
        public void add_field(){
            try{
                Connection con = this.getConnection();
                //定义SQL语句
                String sql = "alter table user add sex boolean";
                //获取预编译SQL执行对象,同时检测数据库中是否已经存在该SQL语句,如果存在,不存入SQL语句,如果不存在则存入SQL语句
                PreparedStatement pstmt = con.prepareStatement(sql);
                 
                int count = pstmt.executeUpdate();//执行并记录次数
                 
                //判断如何执行成功?pstmt.executeUpdate();只返回被影响行数 count=0;
//              if(count>0){
//                  System.out.println("添加字段成功!影响的记录条数是"+count);
//              }else{
//                  System.out.println("添加字段失败!"+count);
//              }
            }catch(Exception e){
                e.printStackTrace();
            }
        }
     
    /**
     * 删除用户
     * @param username 用户名
     */
    public void delete_user(String username){
        try{
            Connection con = this.getConnection();
            //定义SQL语句
            String sql = "delete from user where username = ?";
            //获取预编译SQL执行对象,同时检测数据库中是否已经存在该SQL语句,如果存在,不存入SQL语句,如果不存在则存入SQL语句
            PreparedStatement pstmt = con.prepareStatement(sql);
             
            //给每一个?占位符指定数据
            pstmt.setString(1, username);
             
            int count = pstmt.executeUpdate();//执行并记录次数
             
            if(count>0){
                System.out.println("删除数据成功!影响的记录条数是"+count);
            }else{
                System.out.println("删除数据失败!");
            }
             
        }catch(Exception e){
            e.printStackTrace();
        }
    }
     
    /**
     * 修改用户资料
     * @param username用户名
     * @param id用户id
     */
    public void update(String username,int id){
        try{
             
            Connection con = this.getConnection();
            //定义SQL语句
            String sql = "update user set username = ? where id = ?";
            //获取预编译SQL执行对象,同时检测数据库中是否已经存在该SQL语句,如果存在,不存入SQL语句,如果不存在则存入SQL语句
            PreparedStatement pstmt = con.prepareStatement(sql);
            //给每一个?占位符指定数据
            pstmt.setString(1, username);
            pstmt.setInt(2, id);
             
            int count = pstmt.executeUpdate();//执行并记录次数
             
            if(count>0){
                System.out.println("修改数据成功!影响的记录条数是"+count);
            }else{
                System.out.println("修改数据失败!");
            }
             
        }catch(Exception e){
            e.printStackTrace();
        }
    }
     
}

 

 

 

1
0
分享到:
评论

相关推荐

    jsp入门经典实例(只包含增删改查)

    本教程“jsp入门经典实例(只包含增删改查)”是一个专门为初学者设计的学习资源,旨在帮助他们快速掌握JSP的基础知识,特别是如何使用JSP和JavaBean来实现常见的数据操作——增、删、改、查(CRUD)。 首先,让...

    入门级的增删改查的系统【客户信息管理系统】.zip

    《入门级的增删改查的系统——客户信息管理系统》 在信息技术日益发达的今天,信息管理系统已经成为各行各业不可或缺的一部分。本项目,名为“人工智能-项目实践-信息管理系统的设计与开发”,是一个面向初学者的...

    职工管理系统源代码(Java+Sql server)

    通过调用其他辅助类的方法,如"EmpModel.java"中的数据模型和"SqlHelper.java"中的数据库操作方法,实现了对数据库的操作。 "EmpModel.java"是数据模型类,用于封装员工的数据结构。通常,此类会包含员工的各种属性...

    Mybatis入门实例(三)——使用MyBatis Generator生成DAO

    3. **DAO接口(Java Client)**:定义了操作数据库的方法,如增删查改。 通过MBG,开发者可以快速地为每个表创建对应的模型类和映射文件,从而专注于业务逻辑的实现,提高开发效率。同时,由于MBG支持自定义模板,...

    Beetlsql自学笔记(csdn)————程序.pdf

    - **内置增删改查功能**:BeetlSQL提供了内置的CRUD操作,大大减少了开发者的工作量。 - **SQL管理**:通过Markdown文件管理SQL,使得复杂的SQL编写更为便捷。 - **链式API**:对于简单的SQL,可以通过Query类的...

    hibernate入门

    - **数据库操作**:使用Hibernate,可以执行数据库的增删改查等基本操作,以及更为复杂的事务管理和并发控制。 - **HQL查询**:Hibernate支持HQL(Hibernate Query Language),这是一种类似于SQL的查询语言,但更...

    Java开发入门及项目实战 快速入门课件资源.zip

    在项目实战中,你可能需要了解如何使用JDBC连接MySQL、Oracle等数据库,进行数据的增删改查操作。 最后,IDE(集成开发环境)对于提高开发效率至关重要。Eclipse、IntelliJ IDEA和NetBeans是Java开发的主流IDE,...

    StudentScoreManagerSystem:学生成绩管理系统,使用Java GUI和MySQL数据库以及相关知识编写,分为管理员,教师和学生用户三种登录方式,主要的功能就是对学生的成绩进行管理和查询,适合Java新手项目入门

    通过Java的JDBC(Java Database Connectivity)接口,我们可以与MySQL数据库进行交互,执行SQL语句来实现数据的增删改查。了解基本的SQL语法和JDBC操作是理解和实现本系统的必要条件。 三、用户角色与权限控制 系统...

    (jsp入门)图书管理系统---支持中文不乱码

    系统的核心功能包括“增删改查”。在JSP中,我们通常会创建四个独立的JSP页面来对应这四种操作。例如,`addBook.jsp`用于添加新书,`deleteBook.jsp`负责删除书籍,`updateBook.jsp`处理书籍更新,而`searchBook.jsp...

    webapp.zip

    【描述】提到的"SSH新手入门代码"意味着这个压缩包内包含了实现简单数据库操作——增删改查(CRUD)的实例。在Web开发中,CRUD操作是基础且至关重要的,它们涵盖了对数据库记录的全部基本操作。此外,"带数据库"说明...

    学生管理系统

    接着,可以创建一个StudentDAO接口,定义对数据库的操作方法,如增删改查。实现这个接口的类将具体实现这些操作,这样我们就将业务逻辑与数据库操作解耦。 七、异常处理 在开发过程中,应注重异常处理,确保程序的...

    MyBatis 1章 入门(使用MyBatis完成CRUD)

    本教程将带你逐步了解如何使用MyBatis进行基本的增删改查(CRUD)操作。 首先,我们需要在项目中引入MyBatis的核心库。在描述中提到的`log4j-1.2.16.jar`是日志处理库,虽然不是MyBatis的直接依赖,但在实际开发中...

    library.zip

    在这个项目中,你需要了解如何创建数据库表,执行SQL查询以及如何通过Java代码进行数据的增删改查操作。 JDK 1.8是Java编程语言的标准实现,包含了编译器、JVM和开发所需的库。使用JDK 1.8可以确保项目遵循最新的...

    基于springboot + mybatis, backbone 前后端分离的会员管理系统.zip

    在这个会员管理系统中,MyBatis用于与数据库交互,处理会员信息的增删改查等业务逻辑。 前端部分采用了Backbone.js,这是一个轻量级的JavaScript库,用于构建结构化的Web应用。Backbone的主要特点是模型-视图-视图...

    Oracle课程设计--图书馆书籍管理系统.docx

    - 编写存储过程处理图书的增删改查操作。 4. **JDBC连接设计**: - 使用JDBC实现Oracle数据库的连接与数据交互。 5. **前端界面设计**: - 使用JSP设计用户交互界面。 #### 四、系统设计与分析 - **系统设计**:...

    Java EE轻量级框架应用实战 课程教学大纲.pdf

    课程还将详细讲解MyBatis的核心配置,包括核心接口和类、配置文件、映射文件的使用,使学生能熟练进行“增删改查”操作和条件查询。 动态SQL章节是课程的一个重要部分,学生将学习各种动态SQL的运用,如如何根据...

    Servlet+JSP+SQL Server+Layui+intellij idea编写的客户信息管理系统.zip

    在本系统中,Servlet作为服务器端的程序,用于接收HTTP请求,进行业务逻辑处理,如用户登录验证、数据增删改查等,并将处理结果返回给客户端。Servlet通过继承HttpServlet类并重写doGet和doPost方法来实现对HTTP请求...

    超时管理系统

    1. 商品管理:通过数据库存储商品信息,如名称、价格、库存等,使用Java的JDBC接口与数据库进行交互,实现增删改查操作。 2. 库存管理:监控商品的进出库情况,当库存低于预警值时,自动触发补货流程。 3. 销售管理...

    尚硅谷教学视频

    - **JDBC视频教程**:讲解如何通过Java程序连接数据库,并进行增删改查等基本操作。 ### JavaWeb阶段 #### 3. 前端技术 - **JavaScript DOM编程视频教程**:介绍JavaScript的基础语法及如何操作DOM(文档对象模型...

Global site tag (gtag.js) - Google Analytics