Java数据库编程---Statement接口

本文详细介绍了如何使用Java的Statement接口进行数据库操作,包括插入、更新和删除数据。通过示例展示了如何实例化Statement对象,执行SQL语句,并展示结果。同时,强调了在开发中不应使用"SELECT *",而应明确指定查询列的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.执行数据库的更新操作

Statement接口

数据库可以连接之后,下面就可以进行数据库的具体操作了,如果要想对数据库进行操作,则肯定要使用Statement接口完成,此接口可以使用Connection接口中提供的createStatement()方法实例化。此接口中定义了以下的常用方法。


重新创建之前的user表:

DROP TABLE user ; -- 删除表

CREATE TABLE user(

id INT AUTO_INCREMENT PRIMARY KEY ,

name VARCHAR(30) NOT NULL ,

password  VARCHAR(32) NOT NULL ,

age INT NOT NULL ,

sex VARCHAR(2) DEFAULT '男' ,

birthday DATE 

) ;

数据库的操作步骤肯定是需要连接的。以下通过一些例子来演示Statement进行数据库更新的操作:增加、修改、删除。

向user表中增加数据

执行插入操作前,数据库skewrain中的user表中的数据如下所示:


我们写的插入操作的代码如下:

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.Statement;

public class InsertDemo01{

    //定义MySQL的数据库驱动程序

    public static final String DBDRIVER = "org.gjt.mm.mysql.Driver";

    //定义MySQL数据库的连接地址

    public static final String DBURL = "jdbc:mysql://localhost:3306/skewrain";

    //MySQL数据库的连接用户名

    public static final String DBUSER = "root";

    //MySQL数据库的连接密码

    public static final String DBPASS = "mysqladmin";

    public static void main(String args[]) throws Exception{

    Connection conn = null;    //数据库连接

    Statement stmt = null;     //数据库操作

    Class.forName(DBDRIVER);  //加载驱动程序

    String sql = "INSERT INTO user(name,password,age,sex,birthday) "+

       " VALUES('梅花','www.tencent.com',22,'女','2014-02-26')";

    conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS);

    stmt = conn.createStatement(); //实例化Statement对象

    stmt.executeUpdate(sql);       //执行数据库更新操作

    stmt.close();                  //关闭操作

    conn.close();         //数据库关闭

}


编译运行正常。

此时user表已经发生改变:


以上的程序是将SQL语句固定好了,如果现在希望具体的内容是一个变量,则可以将代码修改如下:

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.Statement;

public class InsertDemo02{

    //定义MySQL的数据库驱动程序

    public static final String DBDRIVER = "org.gjt.mm.mysql.Driver";

    //定义MySQL数据库的连接地址

    public static final String DBURL = "jdbc:mysql://localhost:3306/skewrain";

    //MySQL数据库的连接用户名

    public static final String DBUSER = "root";

    //MySQL数据库的连接密码

    public static final String DBPASS = "mysqladmin";

    public static void main(String args[]) throws Exception{

    Connection conn = null;    //数据库连接

    Statement stmt = null;     //数据库操作

    Class.forName(DBDRIVER);   //加载驱动程序

    String name = "桃花";      //姓名

    String password = "www.google.com";  //密码

    int age = 22;              //年龄

    String sex = "女";         //性别

    String birthday = "2014-02-13";   //生日

    String sql = "INSERT INTO user(name,password,age,sex,birthday) "+

        " VALUES('"+name+"','"+password+"',"+age+",'"+sex+"','"+birthday+"')";

    conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS);

    stmt = conn.createStatement(); //实例化Statement对象

    stmt.executeUpdate(sql);       //执行数据库更新操作

    stmt.close();                  //关闭操作

    conn.close();         //数据库关闭

}

};


编译运行正常。

此时user表已经发生改变:


 

既然可以插入数据,现在开始更新数据。更新数据的代码UpdateDemo01.java如下所示:

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.Statement;

public class UpdateDemo01{

    //定义MySQL的数据库驱动程序

    public static final String DBDRIVER = "org.gjt.mm.mysql.Driver";

    //定义MySQL数据库的连接地址

    public static final String DBURL = "jdbc:mysql://localhost:3306/skewrain";

    //MySQL数据库的连接用户名

    public static final String DBUSER = "root";

    //MySQL数据库的连接密码

    public static final String DBPASS = "mysqladmin";

    public static void main(String args[]) throws Exception{

    Connection conn = null;    //数据库连接

    Statement stmt = null;     //数据库操作

    int id = 15;

    Class.forName(DBDRIVER);   //加载驱动程序

    String name = "兰花";      //姓名

    String password = "www.oracle.com";  //密码

    int age = 21;              //年龄

    String sex = "女";         //性别

    String birthday = "2014-02-14";   //生日

    String sql = "UPDATE user SET name='"+name+"',password='"

        +password+"',age='"+ age +"',sex='"+sex+"',birthday='"

        +birthday+"' WHERE id="+id;

    conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS);

    stmt = conn.createStatement(); //实例化Statement对象

    stmt.executeUpdate(sql);       //执行数据库更新操作

    stmt.close();                  //关闭操作

    conn.close();         //数据库关闭

}

};


编译运行正常。

此时user表已经发生改变:


数据已经更新成功。

 

删除数据的代码DeleteDemo01.java如下所示:

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.Statement;

public class DeleteDemo01{

    //定义MySQL的数据库驱动程序

    public static final String DBDRIVER = "org.gjt.mm.mysql.Driver";

    //定义MySQL数据库的连接地址

    public static final String DBURL = "jdbc:mysql://localhost:3306/skewrain";

    //MySQL数据库的连接用户名

    public static final String DBUSER = "root";

    //MySQL数据库的连接密码

    public static final String DBPASS = "mysqladmin";

    public static void main(String args[]) throws Exception{

    Connection conn = null;    //数据库连接

    Statement stmt = null;     //数据库操作

    int id = 15;

    Class.forName(DBDRIVER);   //加载驱动程序

    String sql = "DELETE FROM user WHERE id="+id;

    conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS);

    stmt = conn.createStatement(); //实例化Statement对象

    stmt.executeUpdate(sql);       //执行数据库更新操作

    stmt.close();                  //关闭操作

    conn.close();         //数据库关闭

}

};


编译运行正常。

此时user表已经发生改变:


Id=15的数据已经被删除。


启动MySQL服务的命令:net start mysql;

关闭MySQL服务的命令:net close mysql;


数据库的操作主要是分为更新和查询操作,查询操作的时候会将全部的查询结果返回给用户。


ResultSet接口

使用SQL中的SELECT语句可以将数据库的全部结果查询出来,在JDBC的操作中,数据库的所有查询记录将使用ResultSet进行接收,并使用ResultSet显示出来。


 

在操作的时候使用Statement中的executeQuery()方法进行数据库的查询操作。此方法的返回值就是ResultSet接口。

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.Statement;

import java.sql.ResultSet;

public class ResultSetDemo01{

    //定义MySQL的数据库驱动程序

    public static final String DBDRIVER = "org.gjt.mm.mysql.Driver";

    //定义MySQL数据库的连接地址

    public static final String DBURL = "jdbc:mysql://localhost:3306/skewrain";

    //MySQL数据库的连接用户名

    public static final String DBUSER = "root";

    //MySQL数据库的连接密码

    public static final String DBPASS = "mysqladmin";

    public static void main(String args[])throws Exception {

        Connection conn = null;    //数据库连接

        Statement stmt = null;     //数据库的操作对象

        ResultSet rs = null;       //保存查询结果

        String sql = "SELECT id,name,password,age,sex,birthday From user";

        Class.forName(DBDRIVER);  //加载驱动程序

        conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS);

        stmt = conn.createStatement();

        rs = stmt.executeQuery(sql);

        while(rs.next()){   //依次取出数据

        int id = rs.getInt("id");   //取出id列的内容

        String name = rs.getString("name"); //取出name列的内容

        String password = rs.getString("password");  //取出password列的内容

        int age = rs.getInt("age"); //取出age列的内容

        String sex = rs.getString("sex");//取出sex列的内容

        java.util.Date d = rs.getDate("birthday");  //取出birthday的内容

        System.out.print("编号: " + id + "; ");

        System.out.print("姓名: " + name + "; ");

        System.out.print("密码: " + password + "; ");

        System.out.print("年龄: " + age + "; ");

        System.out.print("性别: " + sex + "; ");

        System.out.println("生日: " + d + "; ");

        System.out.print("---------------------------");

        System.out.println("-------------------------");

    }

    rs.close();

    stmt.close();

    conn.close();         //数据库关闭

}

};

编译运行的结果如下:


可以看出数据库表中的数据已经被读出。


对于以上的操作代码,如果假设列的名称过长的话,则肯定取值的时候不是很方便,所以此时可以采用顺序的编号取得。更改ResultSetDemo1.java的代码如下:【ResultSetDemo02.java】

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.Statement;

import java.sql.ResultSet;

public class ResultSetDemo02{

    //定义MySQL的数据库驱动程序

    public static final String DBDRIVER = "org.gjt.mm.mysql.Driver";

    //定义MySQL数据库的连接地址

    public static final String DBURL = "jdbc:mysql://localhost:3306/skewrain";

    //MySQL数据库的连接用户名

    public static final String DBUSER = "root";

    //MySQL数据库的连接密码

    public static final String DBPASS = "mysqladmin";

    public static void main(String args[])throws Exception {

    Connection conn = null;    //数据库连接

    Statement stmt = null;     //数据库的操作对象

    ResultSet rs = null;       //保存查询结果

    String sql = "SELECT id,name,password,age,sex,birthday From user";

    Class.forName(DBDRIVER);  //加载驱动程序

    conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS);

    stmt = conn.createStatement();

    rs = stmt.executeQuery(sql);

    while(rs.next()){   //依次取出数据

        int id = rs.getInt(1);   //取出id列的内容

        String name = rs.getString(2); //取出name列的内容

        String password = rs.getString(3);  //取出password列的内容

        int age = rs.getInt(4); //取出age列的内容

        String sex = rs.getString(5);//取出sex列的内容

        java.util.Date d = rs.getDate(6);  //取出birthday的内容

        System.out.print("编号: " + id + "; ");

        System.out.print("姓名: " + name + "; ");

        System.out.print("密码: " + password + "; ");

        System.out.print("年龄: " + age + "; ");

        System.out.print("性别: " + sex + "; ");

        System.out.println("生日: " + d + "; ");

        System.out.print("---------------------------");

        System.out.println("-------------------------");

    }

    rs.close();

    stmt.close();

    conn.close();         //数据库关闭

}

};

编译运行的结果如下:


运行的结果与按名称查询的结果一致。

综合比较来说,直接使用编号取值会更加方便

问题:如果现在查询的时候直接使用“SELECT * FROM user”不是更简单吗?

但是在开发中是不能直接使用“*”的。因为这样在查询的时候并不能明确地表示要取的内容是什么,所以在开发中查询时肯定要明确的写出需要查找的列。


小结:

1.ResultSet查询时是将全部的查询结果以ResultSet的形式返回。

2.通过ResultSet接口依次取出里面的全部内容。

3.所有的查询结果实际上最终都是保存在内存之中的,所以对于数据库的查询操作来讲,尽量不要全部查询。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值