1.掌握MySQL数据库的使用方法。
2.掌握Java操作MySQL数据库的方法。
【目标】目标1:MySQL数据库的基本操作,包括MySQL的安装、创建数据库、数据表、增删改查操作(80分)。
目标2:Java操作MySQL数据库,包括基本步骤和具体的编码实现(90分)。
1. 遇到问题,想办法解决问题。有智慧=找原因+想办法。充分利用百度、Google进行搜索。
2. 先达成初步目标,再逐步深入、凝练、总结。
【作业要求】1.MySQL数据库的基本操作,包括如下两个工作:
(1)在MySQL数据库中插入两个文件中的数据(List_Class1.txt, List_Class1_Submit.xls,点击下载)。
(2)利用SQL命令查找所有 出现在“List_Class1”中,未出现在“List_Class1_Submit” 的学生名单,并保存或输出(截图)。
2. Java操作MySQL数据库。
(1)连接作业1中建立的数据库中的相关的表(table),输出到控制台或Java的相关控件(如表格控件)中。(2)Java语言编程实现数据库的插入、删除、修改某一条或若干条记录。
目标1:MySQL数据库的基本操作,包括MySQL的安装、创建数据库、数据表、增删改查操作
创建数据库:create database class;
选择你所创建的数据库:use class;
(1)在MySQL数据库中插入两个文件中的数据,首先创建两个表(List1,List2)
create table List1(s_nu char(5),s_no char(20),s_name char(8),p_class char(10),s_sex char(2),primary key(s_no));
create table List2(s_no char(20) not null,s_name char(8) not null,s_group char(5) not null,s_address char(100)not null,primary key(s_no));
再把两个文件中的数据(List_Class1.txt, List_Class1_Submit.xls)使用SQL语言分别插入进这两个表中,结果如图一,图二:
(也可以使用语句 (load data local infile 'G:\java.txt' into table List2 fields terminated by '\t';)进行导入,教程:点击打开链接)
图一:
图二:
删除数据库:
先删除表,再删除库,drop table List1; drop table List2; 删除数据库:drop database class;
另外:Truncate:删除数据表中的数据(仅数据表中的数据,不删除表)truncate table 数据表名称
Delete :
删除数据表中的行(可以删除某一行,也可以在不删除数据表的情况下删除所有行)。
删除某一行:Delete from 数据表名称 where 列名称=值;
删除所有行:Delete * from 数据表名称;
修改数据
update score set s_name="刘翔" where s_no="A00001";
查询
select * from List1;
(2)利用SQL命令查找所有 出现在“List_Class1”中,未出现在“List_Class1_Submit” 的学生名单
利用这两句语句的其中一句都可以:(1)select * from List1 where not exists(select s_no from List2 where s_no=List1.s_no);(2)SELECT * FROM List1 WHERE s_no NOT IN (SELECT s_no FROM List2);
查询结果如图:
从以上两张图可以看出,学号(s_no)在开始时是设置为主键的,为什么当用姓名查询和用学号查询的结果有差异,用姓名查询时,结果不准确,这也是主键的作用。
目标2:Java操作MySQL数据库,包括基本步骤和具体的编码实现。
(1)连接作业1中建立的数据库中的相关的表(table),输出到控制台或Java的相关控件(如表格控件)中。
以下为源代码:
import java.sql.*;
public class JDBCTest {
public static void main(String[] args){
// 驱动程序名
String driver = "com.mysql.jdbc.Driver";
// URL指向要访问的数据库名scutcs
// String url = "jdbc:mysql://localhost/student";
String url = "jdbc:mysql://127.0.0.1:3306/class";
// MySQL配置时的用户名
String user = "root";
// MySQL配置时的密码
String password = "123456";
try {
// 加载驱动程序
Class.forName(driver);
// 连续数据库
Connection conn = DriverManager.getConnection(url, user, password);
if(!conn.isClosed())
System.out.println("Succeeded connecting to the Database!");
// statement用来执行SQL语句
Statement statement = conn.createStatement();
// 要执行的SQL语句
String sql = "select * from List1";
// 结果集
ResultSet rs = statement.executeQuery(sql);
System.out.println("----------------------");
System.out.println("执行结果如下所示:");
System.out.println("----------------------" );
System.out.println("s_nu "+" s_no " + " s_name " + " p_class " + " s_sex ");
System.out.println("-----------------------");
String name = null;
while(rs.next()) {
// 选择s_name这列数据
name = rs.getString("s_name");
// 首先使用ISO-8859-1字符集将name解码为字节序列并将结果存储新的字节数组中。
// 然后使用GB2312字符集解码指定的字节数组
//name = new String(name.getBytes("ISO-8859-1"),"GB2312");
/*关于这句的,在我的win8系统下不适合,所以不用,不知道在其它系统 下怎么样,
* 暂未测试,所以提供一个百度上的解答
*/
// 输出结果
System.out.print(rs.getString("s_nu") + "\t" );
System.out.print(rs.getString("s_no") + "\t" );
System.out.print(rs.getString("s_name") + "\t" );
System.out.print(rs.getString("p_class") + "\t" );
System.out.println(rs.getString("s_sex") + "\t" );
}
rs.close();
conn.close();
} catch(ClassNotFoundException e) {
System.out.println("Sorry,can`t find the Driver!");
e.printStackTrace();
} catch(SQLException e) {
e.printStackTrace();
} catch(Exception e) {
e.printStackTrace();
}
}
}
List1运行结果:
import java.sql.*;
public class JDBCTest {
public static void main(String[] args){
// 驱动程序名
String driver = "com.mysql.jdbc.Driver";
// URL指向要访问的数据库名scutcs
// String url = "jdbc:mysql://localhost/student";
String url = "jdbc:mysql://127.0.0.1:3306/class";
// MySQL配置时的用户名
String user = "root";
// MySQL配置时的密码
String password = "123456";
try {
// 加载驱动程序
Class.forName(driver);
// 连续数据库
Connection conn = DriverManager.getConnection(url, user, password);
if(!conn.isClosed())
System.out.println("Succeeded connecting to the Database!");
// statement用来执行SQL语句
Statement statement = conn.createStatement();
// 要执行的SQL语句
String sql = "select * from List2";
// 结果集
ResultSet rs = statement.executeQuery(sql);
System.out.println("----------------------");
System.out.println("执行结果如下所示:");
System.out.println("----------------------" );
System.out.println(" s_no " + " s_name " + " s_group " + " s_address ");
System.out.println("-----------------------");
String name = null;
while(rs.next()) {
// 选择s_name这列数据
name = rs.getString("s_name");
// 首先使用ISO-8859-1字符集将name解码为字节序列并将结果存储新的字节数组中。
// 然后使用GB2312字符集解码指定的字节数组
//name = new String(name.getBytes("ISO-8859-1"),"GB2312");
/*关于这句的,在我的win8系统下不适合,所以不用,不知道在其它系统 下怎么样,
* 暂未测试,所以提供一个百度上的解答
*/
// 输出结果
System.out.print(rs.getString("s_no") + "\t" );
System.out.print(rs.getString("s_name") + "\t" );
System.out.print(rs.getString("s_group") + "\t" );
System.out.println(rs.getString("s_address") + "\t" );
}
rs.close();
conn.close();
} catch(ClassNotFoundException e) {
System.out.println("Sorry,can`t find the Driver!");
e.printStackTrace();
} catch(SQLException e) {
e.printStackTrace();
} catch(Exception e) {
e.printStackTrace();
}
}
}
List2运行结果:
关于程序中的 //name = new String(name.getBytes("ISO-8859-1"),"GB2312");
/*关于这句的,在我的win8系统下不适合,所以不用,不知道在其它系统 下怎么样,
* 暂未测试,所以提供一个百度上的解答
*/
//源代码出自百度,自己加以修改
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.mysql.jdbc.Driver;
public class DBConnection {
DBConnection db;
public static void main(String[] args) {
// TODO Auto-generated method stub
DBConnection db = new DBConnection();
db.getConn();
try {
db.getStmt().execute("insert into mytable values('陈世友','男','1994-07-06','广东湛江')");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public Statement getStmt() {
Statement stmt = null;
try {
stmt = getConnDirect().createStatement();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return stmt;
}
private Connection getConnDirect() {
// TODO Auto-generated method stub
return getConn();
}
public Connection getConn() {
Connection conn = null;
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/abccs", "root", "123456");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (conn != null) {
System.out.println("数据库已经连接上");
}
return conn;
}
}
运行结果:(这里选择了另一个数据库来尝试,避免和上面的数据库混乱)
/*经过了两天的编写和尝试,作业终于按要求完成了,但是这次的作业让自己收获蛮大的,借用老师的那句话,
* 学习的目的:不是为了记住知识,而是为了唤醒爱心,引爆智慧。我觉得当你用心去做一件事时,做出来了,
* 自己不仅仅是感到那种胜利的满足,还有获得了收获知识后的一种新生感;自己这次遇到问题也充分利用了百度,
* 寻求网上解决遇到的问题,所以把遇到的错误一一解决了,作业也就完成了,有时候,不是不会,而是不敢于去
* 尝试,没有那个拼的思想,这次我也是按照先达成初步目标,再逐步深入、凝练、总结,而达到作业这个要求的,
* 我感觉自己这次的最大收获是在上次能够在困难中,一步一步的坚持下,多了一份敢于尝试!
*/