【题外话】
说实话一直对我湖某院的实验课感到很迷茫,从大一到大三感觉实验课基本上完全都是依靠自学和看学长学姐的博客。老师存在的意义是什么嘞?可能就是添堵吧[doge]
如果您打开了这篇博文,我觉得您应该是对我说的话很有体会。唉,同是天涯沦落人,相逢何必曾相识。预祝成功通过实验验收。
【一些说明】
我用的是idea和navicat,然后安装方法在这里就不赘述了,搜一搜应该很容易找到的,然后代码方面记得要添加jar包idea添加jar包的方法
至于为什么在有很多优秀前辈发表了相关博客的基础上还要写这个呢?因为前辈们的代码并不完全是符合老师的要求的,所以就在验收完后把自己的代码往老师要求的样子进行了修改。所以说老师就是来添堵的嘛,实验开始前不说清楚实验要求,然后验收实验的时候又对我的代码重拳出击
注意!不是很肯定修改后的代码完全符合,因为改到后面我也有点懵逼了,没错我就是一个很不靠谱的学长,真是不好意思。所以就先这样吧,以后有机会再改。
注意!本文仅供参考!!!
【实验内容】
在安装配置好Mysql数据库后,使用Java语言通过JDBC直接连接数据库,在数据库中建表并进行表数据的增删查改。
关键代码:
……
Class.forName(……); //加载数据库驱动名
String url=……; //数据连接的url
String name=……; //数据库访问的用户名
String password=……; //数据库访问的密码
Connection con= DriverManager.getConnection(url, name, password);
……
在安装配置好数据库Mysql后,需要使用Java编程完成如下任务:
(1)创建数据库表users,字段分别为username(主键,varchar(10))、pass(varchar(8));数据库表person,字段按分别为username(varchar(10),对应于users表的username)、name(主键,varchar(20))、age(int,可以为空)、teleno(char(11),可以为空);如表users中username则表person中也不能有相应的username的数据。
(2)在表users中插入4行数据,数据分别是(ly,123456)、(liming,345678)、(test, 11111)、(test1,12345),在表person中插入3行数据,数据分别为(ly,雷力)、(liming,李明,25)、(test,测试用户,20,13388449933);
(3)在person表中插入5行数据,分别为(ly,王五)、(test2,测试用户2)、(test1,测试用户1,33)、(test,张三,23,18877009966)、(admin,admin)。对于表中已有的username,则根据最新的数据修改其相应字段值;如该username不存在,则首先在表users中插入该username,默认的password为888888,然后才能将数据插入至person表。
(4)删除users表中test打头的username,同时按照规则一并删除person表相应的数据。
要求每个处理阶段均要在控制台打印出处理完成后的结果,格式按照制表方式输出,如:
表users
字段名xx 字段名xx ….
xx xx
表person
字段名xx 字段名xx ….
xx xx
(5)类的设计要求:需要将数据库的连接、操作进行封装,以便在后续实验中进行重用。此项为扣分项,没有进行封装的实验分会相应扣减。
自此实验结束,按照要求提交源代码进行验收。
代码
首先是我的文件结构:
caozuo这个软件包里面放的是操作的类,就是包括了库的操作,表的操作,person表的操作,users表的操作
main这个软件包里的main类就是按照步骤的调用
peizhi这个软件包里放的就是读取配置文件的类
zhuce这个软件包里放的就是对person
关于库的操作:
package caozuo;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import peizhi.*;
public class Ku {
public Connection conn = null;
private String JDBC_DRIVER = Propertiess.getValue("JDBC_DRIVER");
private String URL = Propertiess.getValue("URL");
private String USER = Propertiess.getValue("USER");
private String PASS = Propertiess.getValue("PASS");
public void lianjie()
{
try {
//加载数据库的驱动
Class.forName(JDBC_DRIVER);
//获得连接对象
conn = DriverManager.getConnection(URL, USER, PASS);
System.out.println("数据库成功连接!");
} catch (Exception e) {
e.printStackTrace();
System.out.println("数据库连接失败!");
}
}
public void duankai()
{
try {
conn.close();
System.out.println("数据库关闭成功!");
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
然后是关于表的操作:
package caozuo;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
public class Biao {
//删除原本存在的表单
public void shanbiao(String sql, String sql2, Connection conn)
{
Statement sta = null;
try {
sta = conn.createStatement();
sta.executeUpdate(sql);
sta.executeUpdate(sql2);
System.out.println("初始化表单成功!");
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
//新建表单
public void jianbiao(String sql, String sql2,Connection conn) throws Exception{
Statement sta = conn.createStatement();
sta.executeUpdate(sql);
sta.executeUpdate(sql2);
System.out.println("创建表单成功!");
}
}
然后是users表的属性的类:
package zhuce;
public class Users {
private String username;
private String password;
//显示信息
public String getUsername() { return username; }
public String getPassword() { return password; }
//修改信息
public void setPassword(String password) { this.password = password; }
public void setUsername(String username) { this.username = username; }
//便于插入数据
public String getUser() {
String temp="'"+this.username+"','"+this.password+"'";
return temp;
}
}
然后是person表的属性的类:
package zhuce;
public class Person {
private String username;
private String name;
private Integer age;
private String teleno;
//初始化
public void init() {
this.username=null;
this.name=null;
this.age=-1;
this.teleno=null;
}
//显示信息
public String getUsername() {return username;}
public String getName() {return name;}
public Integer getAge() {return age;}
public String getTeleno() {return teleno;}
//修改信息
public void setUsername(String username) {
this.username = username;
}
public void setName(String name) {
this.name = name;
}
public void setAge(Integer age) {
this.age = age;
}
public void setTeleno(String teleno) {
this.teleno = teleno;
}
//便于插入数据
public String getPerson() {
String temp="'"+this.username+"','"+this.name+"'";
if(this.getAge()!=-1) {
temp+=",'"+this.getAge()+"'";
}
if(this.getTeleno()!=null) {
temp+=",'"+this.getTeleno()+"'";
}
return temp;
}
}
然后是对于users表的操作的类:
package caozuo;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import zhuce.*;
public class Userss {
public void zengusers(Statement state, Users user)
{
String sql="insert into users(username,password) values ("+user.getUser()+")";
try {
state.execute(sql);
System.out.println("插入users数据成功!");
} catch (SQLException throwables) {
System.out.println("插入users数据失败!");
throwables.printStackTrace();
}
}
public void shanusers(Statement state, ResultSet rs, String test)
{
String sql="delete from users where username like'"+test+"%'";
try {
state.executeUpdate(sql);
System.out.println("删除users表中以"+test+"开头的数据成功!");
} catch (SQLException throwables) {
throwables.printStackTrace();
System.out.println("删除users表中以"+test+"开头的数据失败!");
}
}
private String users1="表users";
private String users2="username password";
public void xianusers(Statement state, ResultSet rs){
System.out.println(users1);
System.out.println(users2);
String sql="select * from users";
try {
rs=state.executeQuery(sql);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
while (true){
try {
if (!rs.next()) break;
String s1=rs.getString(1);
String s2=rs.getString(2);
System.out.println(s1+" "+s2);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
}
然后是对person表的操作的类:
package caozuo;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import zhuce.*;
public class Personn {
public void shanperson(Statement state,ResultSet rs,String test)
{
String sql="delete from person where username like'"+test+"%'";
try {
state.executeUpdate(sql);
System.out.println("删除person表中以"+test+"开头的数据成功!");
} catch (SQLException throwables) {
throwables.printStackTrace();
System.out.println("删除person表中以"+test+"开头的数据失败!");
}
}
//删除具体值
public void shanchu(Statement state,String table,String atrribute,String value){
String sql="delete from "+table+" where "+atrribute+" = '"+value+"'";
//System.out.println(sql);
try {
state.executeUpdate(sql);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
public void zengperson(Statement state, ResultSet rs, Person person)
{
//判别初始化
String sql="insert into person(username,name";
if(person.getAge()!=-1 && person.getTeleno()!=null) { sql+=",age,teleno)"; }
else if(person.getAge()==-1 && person.getTeleno()==null) { sql+=")"; }
else if(person.getAge()!=-1 && person.getTeleno()==null) { sql+=",age)"; }
else { sql+=",teleno)"; }
sql+=" values ("+person.getPerson()+")";
//检查person表
String sql1="select * from person where username='"+person.getUsername()+"';";
try {
rs=state.executeQuery(sql1);
if(!rs.next()){//不存在
state.executeUpdate(sql);
System.out.println("插入person数据成功!");
}
else{//存在
shanchu(state,"person","username",person.getUsername());
state.executeUpdate(sql);
System.out.println("插入并更新person数据成功!");
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
//检查users表
String sql2="select * from users where username='"+person.getUsername()+"';";
try {
rs=state.executeQuery(sql2);
rs.last();
if(rs.getRow()==0){//不存在
state.execute("insert into users(username,password) values ('"+person.getUsername()+"','888888')");
System.out.println("插入并更新person数据成功!");
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
private String person1="表person";
private String person2="username name age teleno";
public void xianperson(Statement state,ResultSet rs){
System.out.println(person1);
System.out.println(person2);
String sql="select * from person";
try {
rs= state.executeQuery(sql);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
while (true){
try {
if (!rs.next()) break;
String s1=rs.getString(1);
String s2=rs.getString(2);
String s3=rs.getString(3);
String s4=rs.getString(4);
System.out.println(s1+" "+s2+" "+s3+" "+s4);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
}
配置文件的类:
package peizhi;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class Propertiess {
public static String getValue(String key){
String p =null;
InputStream in = Propertiess.class.getClassLoader().getResourceAsStream("resources.properties");
Properties properties = new Properties();
try {
properties.load(in);
} catch (IOException e) {
e.printStackTrace();
}
p = properties.getProperty(key);
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
return p;
}
}
配置文件:
JDBC_DRIVER = com.mysql.cj.jdbc.Driver
URL = jdbc:mysql://localhost:3306/test1
USER = root
PASS = /*你自己的密码*/
最后是主函数的类:
package main;
import java.sql.*;
import caozuo.*;
import zhuce.*;
public class main {
public static void main(String[] args){
//链接库
Ku lj=new Ku();
lj.lianjie();
//创建实体
Person person1=new Person();
Users user1=new Users();
Statement st = null;
try {
st = lj.conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
ResultSet rs = null;
try {
rs = st.getResultSet();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
//删除已经有的表
Biao biao1=new Biao();
String user3="drop table users";
String person3="drop table person";
biao1.shanbiao(user3,person3, lj.conn);
System.out.println("开始第一步操作!");
//创建表
String users="create table users("+"username varchar(10) not null,"+"password varchar(8) not null,"+"primary key ( username )"+")";
String person ="create table person("+"username varchar(10) not null,"+"name varchar(20) not null,"+"age int,"+"teleno char(11),"+"primary key ( name )"+")";
try {
biao1.jianbiao(users,person, lj.conn);
} catch (Exception e) {
e.printStackTrace();
}
Userss userss1=new Userss();
Personn personn1=new Personn();
//展示表
userss1.xianusers(st,rs);
personn1.xianperson(st,rs);
String [][]user2={
{"ly","123456"},
{"liming","345678"},
{"test","11111"},
{"test1","12345"}};
String [][]person2={
{"ly","雷力",null,null},
{"liming","李明","25",null},
{"test","测试用户","20","13388449933"},
{"ly","王五",null,null},
{"test2","测试用户2",null,null},
{"test1","测试用户1","33",null},
{"test","张三","23","18877009966"},
{"admin","admin",null,null}};
System.out.println("开始第二步操作!");
//增加users
for (int i=0;i<4;i++)
{
user1.setUsername(user2[i][0]);
user1.setPassword(user2[i][1]);
userss1.zengusers(st,user1);
}
for (int i=0;i<3;i++)
{
person1.init();
person1.setUsername(person2[i][0]);
person1.setName(person2[i][1]);
if(person2[i][2]==null) person1.setAge(-1);
else person1.setAge(Integer.valueOf(person2[i][2]).intValue());
person1.setTeleno(person2[i][3]);
personn1.zengperson(st,rs,person1);
}
userss1.xianusers(st,rs);
personn1.xianperson(st,rs);
System.out.println("开始第三步操作!");
//增加person
for (int i=3;i<8;i++)
{
person1.init();
person1.setUsername(person2[i][0]);
person1.setName(person2[i][1]);
if(person2[i][2]==null) person1.setAge(-1);
else person1.setAge(Integer.valueOf(person2[i][2]).intValue());
person1.setTeleno(person2[i][3]);
personn1.zengperson(st,rs,person1);
}
userss1.xianusers(st,rs);
personn1.xianperson(st,rs);
System.out.println("开始第四步操作!");
//删除test开头的数据
personn1.shanperson(st,rs,"test");
userss1.shanusers(st,rs,"test");
userss1.xianusers(st,rs);
personn1.xianperson(st,rs);
lj.duankai();
}
}