java教材源代码第12章 Java数据库操作
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第12章 Java数据库操作
【例12-7】查询计算机系全体学生的名单。
select XMing from XSheng where YXi='中文系';
【例12-8】查询年龄在20~23岁(包括20岁和23岁)的学生的姓名、性别和所属院系。
select XMing, Xbie, YXi from XSheng where NLing between 20 and 23;
【例12-9】查询既不是中文系、数学系,也不是计算机学院的学生的姓名和性别。
select XMing, XBie from XSheng where YXi not in ('中文系', '数学系', '计算机学院');
【例12-10】查询学号为04020001的学生的详细情况。
select * from XSheng where XHao like '04020001';
等价于:
select * from XSheng where XHao = '04020001';
【例12-11】查询所有姓学号以04开头的学生的姓名和性别。
select XMing, XBie from XSheng where XMing like '04%';
【例12-12】查询C_Language课程的课程号,课程名和学分。
如果用户要查询的字符串本身就含有%或_ _,这是就要使用ESC APE ‘<换码字符>’短语对通配符进行转义了。
select KChHao, MCheng, XFen
from KCheng
where MCheng like 'C\_Language' ESCAPE '\';
【例12-13】某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。
查询缺少成绩的学生的学号和相应的课程号。
select XHao, KChHao from XKe where ChJi is NULL;
【例12-14】查询外语学院年龄在19岁以下的学生姓名。
select XMing from XSheng where YXi='外语学院' and NLing<20;
【例12-15】查询全体学生的情况,查询结果按所属院系升序排列,同一院系中的学生按年龄降序排列。
select * from XSheng order by YXi, NLing desc;
【例12-16】查询选修了课程的学生人数。
select count(distinct XHao) from XKe;
【例12-17】查询选修了3门以上课程的学生学号。
select XHao from XKe
group by XHao having count(*)>3;
【例12-18】查询每个学生及其选修课程的情况。
select XSheng.*, XKe.* from XSheng, XKe
where XSheng.XHao= XKe.XHao;
【例12-19】查询每一门课的间接先行课(即先行课的先行课)。
首先为KCheng表取两个别名first, second。
select first.KChHao, second.XXKe
from KCheng first, KCheng second
where first.XXKe=second.KChHao;
【例12-20】查询选修2号课程且成绩在90分以上的所有学生。
select XSheng.XHao, XMing from XSheng, XKe
where XSheng.XHao= XKe.XHao and XKe.KChHao=‘2’ and XKe.ChJi>90;
【例12-21】将一个新学生记录(学号:05020020;姓名:陈述;性别:男;年龄:21;所在院系:中文系)插入到XSheng表中。
insert into XSheng values('05020020', '陈述', '男', 21, '中文系');
【例12-22】对每一个系,求学生的平均年龄,并把结果存入数据库。
首先,建立一个新表:
create table deptage (YXi char(15) avgage smallint);
然后,对XSheng表按系分组求平均年龄,再把系名和平均年龄存入新表。
insert into deptage (YXi, avgage)
select YXi, avg(NLing) from XSheng groupe by YXi;
【例12-21】将学生05020025的年龄改为23岁。
update XSheng set NLing=23 where XHao='05020025';
【例12-22】删除学号为05020025的学生记录。
delete from XSheng where XHao='05020025';
12.4 案例分析:创建JDBC-ODBC连接
本例代码如下:
import java.sql.*;
class JdbcOdbcDemo {
public static void main (String[] args) {
try {
// 第一步:注册 JDBC Driver
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
// 第二步:建立与数据库的连接
String url = "jdbc:odbc:Store";
Connection conn = DriverManager.getConnection(url);
// 第三步:声明Statement 来传送 SQL statements到database
Statement stmt = conn.createStatement();
//创建表Personnel
String createTablePersonnel = "CREATE TABLE Personnel " +
"(Name VARCHAR(32), ID INTEGER, Salary FLOAT, " +
"Gender String)";
stmt.executeUpdate(createTablePersonnel);// 执行SQL语句
//在表中插入数据
stmt.executeUpdate("Insert Into Personnel Values
('Tom', 12, 37000, '男' )" );
//更新表中数据
String updateString = "UPDATE Personnel " +"SET ID = 7 " + "WHERE Name LIKE 'Jack' ";
stmt.executeUpdate(updateString);
String query = "Select ID, Gender, Name From Personnel";
ResultSet rs = stmt.executeQuery(query);// 执行SQL语句
while (rs.next()) {
String name = rs.getString("Name");
int id = rs.getInt("ID");
String gender = rs.getString("Gender");
System.out.println(name + "\t" + id + "\t" + gender);
} // while
rs.close();
stmt.close();
conn.close();
} catch (Exception e) {
System.err.println(e.getMessage());
} // catch
} // main
} // JdbcOdbcDemo
【例12-23】使用Prepared Statement向Package表中插入数据库。
import java.sql.*;
class PreStateDemo{
public static void main (String[] args) {
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String url = "jdbc:odbc:Store";
Connection conn = DriverManager.getConnection(url);
Statement stmt = conn.createStatement();
PreparedStatement insertPackage = conn.prepareStatement(
"Insert Into Package Values ( ?, 'Simon', ?, ? ,'男')");
String n[] = {"Dean", "Donald", "Eric", "Julian", "Jeff"};
int a[] = {22, 23, 21, 20, 25};
int s[] = {40000, 38000, 38000, 38500, 37500};
for(int i = 0; i < n.length; i++) {
insertPackage.setString(1, n[i]);
insertPackage.setInt(2, a[i]);
insertPackage.setInt(3, s[i]);
insertPackage.executeUpdate();
} // for
stmt.close();
conn.close();
} catch (Exception e) {
System.err.println(e.getMessage());
} // catch
} // main
} // PreStateDemo
【例12-24】利用滚动结果集实现从前到后对数据库的遍历。
import java.sql.*;
class ScrollDemo1{
public static void main (String[] args) {
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String url = "jdbc:odbc:Store";
Connection conn = DriverManager.getConnection(url);
Statement stmt = conn.createStatement
(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
ResultSet rs = stmt.executeQuery
("SELECT ID, senderName, State FROM Package where ID < 20");
//如果是从后向前遍历可采将while(rs.previous())语句用以下两条语句替代
//rs.afterLast();
//while(rs.previous()) {
while(rs.next()) {
int id = rs.getInt("ID");
String sender = rs.getString("senderName");
String state = rs.getString("State");
System.out.println(id + "\t" + sender + "\t" + state);
} // while
rs.close();
stmt.close();
conn.close();
} catch (Exception e) {
System.err.println(e.getMessage());
} // catch
} // main
} // ScrollDemo1
【例12-26】利用滚动结果集实现对数据库中数据的修改操作。
import java.sql.*;
class ScrollUpdate{
public static void main (String[] args) {
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String url = "jdbc:odbc:Store";
Connection conn = DriverManager.getConnection(url);
Statement stmt = conn.createStatement (
ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
ResultSet rs = stmt.executeQuery("SELECT ID, senderName,
State FROM Package where ID < 20");
st(); // 移动游标到最后一行
// 修改最后一行数据的State列为Damaged
rs.updateString("State", "Damaged");
rs.updateString("senderName", "Nora");
rs.updateRow(); // 将数据库中的数据一并修改
rs.previous();
rs.updateString("State", "Damaged");
rs.cancelRowUpdates();
rs.updateString("State", "On the way");
rs.updateRow();
rs.close();
stmt.close();
conn.close();
} catch (Exception e) {
System.err.println(e.getMessage());
} // catch
} // main
} // ScrollUpdate
【例12-27】利用滚动结果集实现将一行数据写入表,并删除一行数据内容。
import java.sql.*;
class ScrollInsert{
public static void main (String[] args) {
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String url = "jdbc:odbc:Store";
Connection conn = DriverManager.getConnection(url);
Statement stmt = conn.createStatement (
ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSet rs = stmt.executeQuery(
"SELECT * FROM Package where ID < 20");
rs.moveToInsertRow();
rs.updateString("senderName", "Olive");
rs.updateString("receiverName", "Ruth");
rs.updateInt("ID", 1);
rs.updateFloat("Fee", 10.99f);
rs.updateString("State", "On the way");
rs.insertRow();
rs = stmt.executeQuery(
"SELECT ID, senderName, State FROM Package where ID < 20");
rs.moveToInsertRow();
rs.updateString("senderName", "Olive");
//rs.updateString("receiverName", "Ruth");
rs.updateInt("ID", 1);
//rs.updateFloat("Fee", 10.99f);
rs.updateString("State", "On the way");
rs.insertRow();
rs.absolute(1);
rs.deleteRow();
rs.close();
stmt.close();
conn.close();
} catch(SQLException e) {
System.err.println(e.getMessage());
}catch (Exception e) {
System.err.println(e.getMessage());
} // catch
} // main
} // ScrollInsert
【例12-28】利用JDBC连接oracle数据库。
String result = ""; // 查询结果字符串
String sql = "select * fromtest"; // SQL 字符串
// 连接字符串,格式: "jdbc:数据库驱动名称:连接模式:@数据库服务器ip:端口号:数据库SID" String url ="jdbc:oracle:thin:@localhost:1521:orcl";
String username = "scott"; // 用户名
String password = "tiger"; //密码
// 创建oracle数据库驱动实例
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
// 获得与数据库的连接
Connection conn =DriverManager.getConnection(url, username, password);
// 创建执行语句对象
Statement stmt = conn.createStatement();
// 执行sql语句,返回结果集
ResultSet rs = stmt.executeQuery(sql);
while ( rs.next() )
{
result += "第一个字段内容:" + rs.getString(1) ;
System.out.prinltn(result) ;
}
rs.close(); // 关闭结果集
stmt.close(); // 关闭执行语句对象
conn.close(); // 关闭与数据库的连接
【例12-29】利用JDBC连接mysql数据库。
import java.sql.*;
public class JDBCTest
{
//主函数main()
public static void main(String[] args) throws Exception
{
String kongge=new String(" ");
//为后面的结果集输出好看点
Class.forName("com.mysql.jdbc.Driver");
//驱动
Connection conn=DriverManager.getConnection
("jdbc:mysql://localhost:3306/greatwqs?user=root&password=greatwqs");
/*连接数据库,jdbc:mysql://localhost:3306/greatwqs 数据库为greatwqs数据库* 端口为3306
*
* 用户名user=root
*
* 用户密码password=greatwqs
*/
Statement stmt=conn.createStatement();
//创建SQL语句,实现对数据库的操作功能
ResultSet rs=stmt.executeQuery("select * from person");
//返回查询的结果
while(rs.next())
{
System.out.print(rs.getString("id")+kongge);
System.out.print(rs.getString("name")+kongge);
System.out.print(rs.getString("gender")+kongge);
System.out.print(rs.getString("major")+kongge);
System.out.print(rs.getString("phone")+kongge);
System.out.println();
}//输出结果集的内容
rs.close();
stmt.close();
conn.close();
//关闭语句,结果集,数据库的连接. }
}
【例12-30】利用JDBC连接Sqlserver数据库。
package MyDB;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class GetDB{
ResultSet re ;
Connection con;
String driver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
String url = "jdbc:microsoft:sqlserver://localhost:1433;
DatabaseName=db_shop";public GetDB() {
try {
Class.forName(driver);
} catch (ClassNotFoundException ex) {
System.out.println("There are exception about " + ex.getMessage()); }
}
public Statement getStatement() throws SQLException {
con = DriverManager.getConnection(url, "sa", "6462133");
return con.createStatement();
}
public ResultSet runSQLSearch(String sql) throws SQLException
{
return getStatement().executeQuery(sql);
}
public int runSQLUpdata(String sql) throws SQLException { return getStatement().executeUpdate(sql);
}
public ResultSet executeQuery(String sql){
try {
Statement stat = con.createStatement();
re= stat.executeQuery(sql);
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
public void runSQL(String sql) throws SQLException
{
getStatement().execute(sql);
}
}。