本文是基于成绩管理系统的服务器端,嵌入式SQL利用了SQL语言具有很强的查询处理能力,JAVA等高级语言具有很强逻辑表达能力,用到的软件为eclipse和pgAdmin4,实现客户端是基于上一篇文章成绩管理系统——数据库编程(服务器端)
数据库编程分为数据库客户端编程与数据库服务器端编程,在完成任务之前需要对控制语句的格式、函数编程 ,存储过程编程,游标编程、触发器以及嵌入式SQL编程等的知识有所了解。
嵌入式SQL编程
JDBC程序访问数据库的步骤
1)加载驱动Class.forName("驱动名字")
2)建立连接 connection con= DriverManager.getConnection(URL,userName,passWord);
3)创建Statement对象 Statement stmt = conn.createStatement();
4)执行SQL语句
分为查询和更新操作,查询又分为静态查询和动态查询(向SQL语句传递参数)prepareStatemen,
executeQuery():返回语句执行后的单个结果集的,所以通常用于select语句;
executeUpdate()返回值是一个整数,指示受影响的行数(可以用于update、insert、delete语句)
例如:
String sql = "INSERT INTO public.student (sid, sname, major, phone)"
+ " VALUES ('2017001', '张山' ,'土木工程','13602810001')";
stmt.executeUpdate(sql);
5)ResultSet在用到查询语句时我们要保存结果集
执行增删改的时候我们不需要返回结果,但是用查询语句时需要获得结果集。
String sql = "SELECT id, name, age FROM company";
ResultSet rs = stmt.executeQuery(sql);
ResultSet对象它被称为结果集,本质上是内存中用于存储多条记录的游标,通过一套getXXX方法提供了对这些行中数据的访问,用while和next()方法得到每一行数据
1)ResultSet.next()将游标由当前位置移动到下一行;
2)ResultSet.getString(String columnName) 获取指定字段的String类型值;
3)ResultSet.getString(int columnIndex) 获取指定索引的String类型值;
4)ResuleSet.previous()将游标由当前位置移动到上一行。
6)关闭连接
rs.close(); //关闭结果集对象
stmt.close(); //关闭执行对象
conn.close(); //关闭连接对象
客户端
首先在PostgreSQL官网https://jdbc.postgresql.org/下载JDBC驱动程序包 postgresql-xx.x.x.jar
针对成绩管理系统数据库应用访问,编写Java应用程序实现成绩查询功能,即输入课程名、教师名,查询该班学生成绩表输出。
在Eclipse下使用JDBC连接数据库,做如下配置
之后是Java程序,按嵌入式SQL编程的步骤顺序编写就行
由于在执行数据库有关操作时可能发生异常,我们需要用try{}catch{}语句进行处理
package ***;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Scanner;
public class Main {//注意修改包名和主类名
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
String url="jdbc:postgresql://localhost:5432/GradeDB";//指明连接的数据库为GradeDB
//回想一下自己数据库的名字密码
String name="***";
String pas="***";
Connection conn;
try {
Class.forName("org.postgresql.Driver");//加载驱动
conn = DriverManager.getConnection(url,name,pas);//建立连接
System.out.println("请输入课程名:");
String cname=scan.next();
Statement stmt=conn.createStatement();
String sql="SELECT s.sid,s.sname,g.score,g.note\n"
+ "FROM grade as g\n"
+ "JOIN course as c ON g.cid = c.cid\n"
+ "JOIN student as s ON g.sid = s.sid\n"
+ "WHERE c.cname = '"+cname+"'\n"
+ "ORDER BY g.score DESC";
ResultSet rs=stmt.executeQuery(sql);
System.out.println("查询结果为:");
while(rs.next()) {
//由指定字段获取改属性的值
System.out.println(rs.getString("sid")+"\t"+rs.getString("sname")+
"\t"+rs.getString("score")+"\t"+rs.getString("note"));
}
//关闭所有
rs.close();
stmt.close();
conn.close();
} catch (Exception e) {
System.out.println(e.getClass().getName()+":"+e.getMessage());
System.exit(0);
}
}
}
百看不如一练,快实践吧~