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