Mysql教程

19.2 Java操作MySQL数据库

连接MySQL数据库之后,可以对MySQL数据库中的数据进行查询、插入、更新和删除等操作。Statment接口主要用来执行SQL语句,其中定义一些执行SQL语句的方法。 SQL语句执行后返回的结果由ResultSet接口管理。通过这两个接口,Java可以方便的操作MySQL数据库。本节将详细的向读者介绍Java操作MySQL数据库的方法。

19.2 创建 Statement对象

Connection对象调用createStatement()方法来创建Statement对象,其代码如下:

Statement statement=connection.createStatement();

其中,statement是Statement对象;connection是Connection对象;createStatement()方法返回Statement对象。通过这个Java语句就可以创建Statement对象。Statement对象创建成功后,可以调用其中的方法来执行SQL语句。

19.2.2 使用SELECT语句查询数据

Statement对象可以调用executeQuery()方法执行SELECT语句。SELECT语句的查询结果返回给ResultSet对象。调用executeQuery()方法的代码如下:

ResultSet result=statement.executeQuery("SELECT 语句");

通过该语句可以将査询结果存储到result中。査询结果可能有多条记录,这就需要使用循环语句来读取所有记录。其代码如下:

while(result.next()){
String s=result.getString("字段名");
System.out.print(s);
}

其中,“字段名”参数表示査询出来记录的字段名称。使用getString()函数可以将指定字段的值取出来。不够字段的数据类型是什么,都是当作字符串取出来。只要result.next()的值不为空,则可以执行循环。

【示例19-2】下面从student表中查询学生的学号、考试科目和成绩。部分代码如下:

Statement statement=connection.createStatement();//创建 Statement 对象
//执行SELECT语句,并且将查询结果传递到ResultSet对象中
ResultSet result=statement.executeQuery("SELECT stu_id, c_name, grade FROM score");
while(result.next()){//判断是否还有记录
String id=result.getString("stuJd");//获取stu_id字段的值
String course=result.getString("c_name");//获取c_name字段的值
String grade=result.getString("grade");//获取grade字段的值
System.out.println(id+" "+course+" "+grade);//输出字段的值
}

表中查询出stu_id、c_name和grade 3个字段的值。因为查询出来的记录可能有很多条,所以需要用while()语句来进行循环读取。读取到最后一条记录以后,result.next()的值变为空,此时循环结束。

说明:ResultSet()接口中还定义了其他的方法。例如,getRow()方法可以获取当前行在结果集中的位置;first()方法可以从当前行回到第一行;last()方法可以从当前行跳到最后一行;isFirst()方法判断当前行是否是第一行;isLast()方法判断当前行是否是最后一行。

19.2.3插入、更新或者删除数据

executeQuery()方法只能执行SELECT语句。如果需要进行插入、更新或者删除操作,则需要Statement对象调executeUpdate()方法来实现。executeUpdate()方法执行完后,返回影响表的行数。

下面是调用executeUpdate()方法的代码:

int result=statement.executeUpdate(sql); 

其中,sql参数必须是INSERT语句、UPDATE语句或者DELETE语句。该方法返回的结果为数字。

【示例19-3】下面而向score表插入一条新记录。部分代码如下:

Statement statement=connection.createStatement();//创建 Statement 对象
String sql="INSERT INTO score VALUES (21,902,'英语',85)";//获取INSERT语句
int result=statement.executeUpdate(sql);//执行INSERT语句,返回插入的记录数
System.out.println(result);	//输出插入的记录数

代码执行成功后,可以以将新记录插入到score表中。同时,返回数字1,这表示对表中的一条记录进行了操作。

【示例19-4】下面更新score表中id为16的记录,将该记录的grade字段的值改为100。部分代码如下:

Statement statement=connection.createStatement();//创建Statement对象
String sql="UPDATE score SET grade=100 WHERE id=16"; //获取UPDATE语句
int result=statement.executeUpdate(sql); //执行UPDATE语句,返回更新的记录数
System.out.println(result)://输出更新的记录数

代码执行成功后,可以更新id为16的记录。同时,返回数字1,这表示更新了表中的一条记录。

【示例19-5】下面从score表中删除id为16的记录。部分代码如下:

Statement statement=connection.createStatement(); //创建Statement对象
String sql="DELTE FROM score WHERE id=16"; //获取DELETE语句
int result=statement.executeUpdate(sql); //执行DELETE语句,返回删除的记录数
System.out.println(result);//输出删除的记录数

代码执行成功后,可以删除id为l6的记录。同时,返回数字1,这表示从表中删除了一条记录。

19.2.4 执行任意SQL语句

execute()方法可以执行SELECT语句、INSERT语句、UPDATE语句和DELETE语句 等。无法确定要执行的sql语句是査询还是更新时,可以使用execute()函数。该函数的返回结果是boolean类型的值,返回值为true表示执行查询语句,false表示执行更新语句。 下面是调用execute()方法的代码:

boolean result=statement.execute(sql);

技巧:因为executeQuery()方法只能执行SELECT语句。而executeUpdate()方法能够能执行UPDATE语句、INSERT语句、DELETE语句等改变数据的SQL语句。所以,在不知道SQL语句的类型或者要执行不同类型的SQL语句时,可以选择 execute()方法。

如果要获取SELECT语句的查询结果,需要调用getResultSet()方法.如果要获取INSERT语句、Uf>DATE语句或者DELETE语句影响表的行数,需要调用getUpdateCount()方法。这两个方法的调用语句如下:

ResultSet result1 =statement.getResultSet();
int result2=statement.getUpdate();

【示例19-6】下面调用execute()函数执行SQL语句。部分代码如下:

Statement statement=connection.createStatement();//创建Statement对象 sql="SELECT stu_id, c_name, grade FROM score";//定义变量sql,获取SELECT语句 boolean st=statement.execute(sql);//执行SELECT语句 //如果执行SELECT语句,execute()方法返回TRUE if(st==true){ ResultSet result=statement.getResultSet(); //将查询结果传递给ResultSet对象 while(result.next()){//判断是否还有记录 String id=result.getString("stu_id");//获取stu_id字段的值 String course=result.getString("c_name"); //获取c_name字段的值 String grade=result.getString("grade");//获取grade字段的值 System.out.println(id+" "+course+" "+grade);//输出字段的值 //如果执行UPDATE语句、INSERT语句、DELETE语句,execute()方法将返回FALSE else{ int i=stat.getUpdateCount();//通过获取发生变化的记录数 System.oaf.println("the number is "+i); //输出记录数 }

如果执行的是SELECT语句,那么st的值就是true,将执行if语句中的代码。如果执行的是INSERT语句、UPDATE语句或者DELETE语句,将执行elae语句中的代码。

19.2.5关闭创建的对象

当所有SQL语句都执行完毕后,需要关闭所创建的Connection对象、Statement对象和ResuleSet对象。关闭对象的顺序与创建对象的顺序相反,关闭的顺序为尺ResultSet对象、Statement对象、Connection对象。对象调用close()方法来关闭对象,然后将对象的值设为空。关闭对象的部分代码如下:

if(result !=null){
result.close();
result=null;
}
if(statement !=null){
statement.close();
statement=null;
}
if(connection !=null){
connection.close();
connection=null;
}

关注微信获取最新动态