JAVA jdbc满分代码

package information;

import java.sql.Connection;

import java.util.*;

import java.sql.Date;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

class User{

String name;

String password;

void setName(String s){

name=s;

}

void setPassword(String s){

password=s;

}

String getName() {

return name;

}

String getPassword() {

return password;

}

}

class DBUtil{

private static final String URL = "jdbc:mysql://localhost:3306/Information?"+

"useSSL=false&serverTimezone=GMT&characterEncoding=utf-8";

private static final String USER="root";

private static final String PASSWORD="dbqyyl276151.";

private static Connection conn=null;

//connetcDB方法:连接数据库

public static void connetcDB() {

try{ //加载JDBC-MySQL8.0连接器:

Class.forName("com.mysql.cj.jdbc.Driver");

}

catch(Exception e){}

try{

conn=DriverManager.getConnection(URL,USER,PASSWORD);

}

catch(SQLException e){

System.out.println(e);

}

}

public static Connection getConnection(){

return conn;

}//getConnection方法:返回所建立的数据库连接,即:Connection对象

}

class UserDao{

User user;

DBUtil a=new DBUtil();

boolean find(String s) {

boolean flag=false;

try {

a.connetcDB();

Connection con=a.getConnection();

Statement sql=con.createStatement();

String record="name";

String findRecord="select * from userinfo where "+record+"='"+s+"'";

ResultSet rs=sql.executeQuery(findRecord);

if(rs.next())

flag=true;

con.close();

}

catch(SQLException e) {

System.out.println(e);

}

return flag;

}

void addStudent(User user) {

try {

a.connetcDB();

Connection con=a.getConnection();

Statement sql=con.createStatement();

String record=user.name;

String record1=user.password;

String addRecord="insert into userInfo values "+"('"+record+"','"+record1+"')";

int ok=sql.executeUpdate(addRecord);

con.close();

}

catch(SQLException e) {

System.out.println(e);

}

}

void query(String s) {

try {

a.connetcDB();

Connection con=a.getConnection();

Statement sql=con.createStatement();

String record="name";

String findRecord="select * from userinfo where "+record+"='"+s+"'";

ResultSet rs=sql.executeQuery(findRecord);

if(rs.next())

System.out.println(rs.getString(1)+" "+rs.getString(2));

else System.out.println("不存在该用户!");

con.close();

}

catch(SQLException e) {

System.out.println(e);

}

}

void delete(String s){

try {

a.connetcDB();

Connection con=a.getConnection();

Statement sql=con.createStatement();

String deleteRecord="delete from userinfo where name = '"+s+"'";

int ok=sql.executeUpdate(deleteRecord);

System.out.println("删除成功!");

con.close();

}

catch(SQLException e) {

System.out.println(e);

}

}

void update() {

try {

a.connetcDB();

Connection con=a.getConnection();

Statement sql=con.createStatement();

String name=new String();

Scanner reader = new Scanner(System.in);

System.out.println("请输入想要修改的用户姓名:");

name=reader.next();

String record=new String();

System.out.println("请输入想要修改的信息(name/password):");

record=reader.next();

String xinxi=new String();

System.out.println("请输入想把信息修改为:");

xinxi=reader.next();

String newrecord="update userinfo set "+record+"='"+xinxi+"'where name='"+name+"'";

sql.executeUpdate(newrecord);

con.close();

}

catch(SQLException e) {

System.out.println(e);

}

}

void queryAll() {

try {

a.connetcDB();

Connection con=a.getConnection();

Statement sql=con.createStatement();

String allRecord="select * from userinfo ";

ResultSet rs;

rs=sql.executeQuery(allRecord);

while(rs.next()) {

String name=rs.getString(1);

String password=rs.getString(2);

System.out.println(name+" "+password);

}

con.close();

}

catch(SQLException e) {

System.out.println(e);

}

}

}

public class information{

public static void main(String []args) {

Scanner read = new Scanner(System.in);

UserDao userDao=new UserDao();

User user=new User();

String a=new String();

// user.setName("张三");

// user.setPassword("12345")

// userDao.addStudent(user);

String flag=new String();

while(true) {

System.out.println("欢迎来到yyl的数据库管理系统");

System.out.println("请选择你想要的操作");

System.out.println("1.添加用户(输入数字1):");

System.out.println("2.查询用户(输入数字2):");

System.out.println("3.更新用户信息(输入数字3):");

System.out.println("4.删除用户信息(输入数字4):");

System.out.println("5.查询表内所有用户信息(输入数字5):");

System.out.print("0.完成操作(输入数字0):");

flag=read.next();

if(flag.equals("1"))

while(true) {

System.out.println("是否添加一个用户信息?(是,输入1;否,输入0)");

a=read.next();

if(a.equals("0")) break;

else if(!a.equals("1")) {System.out.println("输入信息错误!"); continue;}

String name,password;

name=new String();

password=new String();

System.out.print("请输入用户姓名:");

name=read.next();

while(userDao.find(name)==true) {

System.out.print("用户名重复!请重新输入用户姓名:");

name=read.next();}

user.setName(name);

System.out.print("请设置用户密码:");

password=read.next();

user.setPassword(password);

userDao.addStudent(user);

System.out.println("设置成功!");

}

else if(flag.equals("2"))

while(true) {

System.out.println("是否查询用户信息?(是,输入1;否,输入0)");

a=read.next();

if(a.equals("0")) break;

else if(!a.equals("1")) {System.out.println("输入信息错误!"); continue;}

String name;

name=new String();

System.out.print("请输入待查询的用户姓名:");

name=read.next();

userDao.query(name);

}

else if(flag.equals("3"))

while(true) {

System.out.println("是否更新用户信息?(是,输入1;否,输入0)");

a=read.next();

if(a.equals("0")) break;

else if(!a.equals("1")) {System.out.println("输入信息错误!"); continue;}

userDao.update();

}

else if(flag.equals("4"))

while(true) {

System.out.println("是否删除用户信息?(是,输入1;否,输入0)");

a=read.next();

if(a.equals("0")) break;

else if(!a.equals("1")) {System.out.println("输入信息错误!"); continue;}

String name;

name=new String();

System.out.print("请输入待删除的用户姓名:");

name=read.next();

if(userDao.find(name)==false) {

System.out.print("用户名不存在!");

}

else userDao.delete(name);

}

else if(flag.equals("5")) userDao.queryAll();

else if(flag.equals("0")) {System.out.println("您已退出系统期待您的再次使用"); break;}

else {

System.out.println("输入信息错误请重新输入:");}

}

read.close();}

}

实验内容:

  1. 使用MySQL(或SQL Server)数据库管理系统,建立名为“Information”数据库,在该数据库中创建名为“userInfo”的数据表,用于存储用户注册时在注册界面输入的用户信息,包括:用户名、密码等,为“userInfo”表设置主键。

  1. 编写User.java类,该类对应于数据库的userInfo表,其成员变量和数据库字段相对应,提供对成员变量操作的方法,比如:成员变量的set方法和get方法等。

//User.java

public class User{

……

}

  1. 编写类数据库连接类DBUtil.java,该类实现连接数据库的功能,该类模板如下:

//数据库连接类,需要连接数据库时使用该类

publicclass DBUtil {

//设置数据库参数

privatestaticfinal String URL = "jdbc:sqlserver://localhost:1433;DatabaseName=factory";

privatestaticfinal String USER="sa";

privatestaticfinal String PASSWORD="12345";

privatestatic Connection conn=null;

//connetcDB方法:连接数据库

public static void connetcDB() {

//补充与数据库建立连接的代码

}

//getConnection方法:返回所建立的数据库连接,即:Connection对象

publicstatic Connection getConnection(){

returnconn;

}

}

  1. 编写数据访问类UserDao.java(Data Access Object,DAO),该类负责提供方法对User表进行增查删改等所有操作,其它类需要对User表进行增查删改等操作时直接该使用该类。

  • add(User user)方法:添加一个用户的信息到User表中,如果用户已经存在则不重复添加。

  • query(String name)方法:按用户姓名查找用户,还可以根据其他字段查询用户。

  • delete(String name)方法:删除一个用户记录,比如:根据用户名或编号删除某个用户。

  • update()方法:更新用户信息,比如:修改密码。

  • queryAll()方法:遍历并显示所有用户信息。

/*UserDao.java, 是专为User类设计的数据访问类,该类使用JDBC编程提供数据的增查删改的服务,所有需要操作数据库的sql语句均包含在该类中。 */

public class UserDao{

//构造方法

……

//方法

……

}

  1. 编写测试类Test.java,测试以下功能,该类模板如下::

  1. 添加一个新用户

  1. 按新用户名查询用户

  1. 修改用户密码

  1. 删除新用户

  1. 查询并显示所有用户

//Test.java

public class Test{

publicstaticvoid main(String[] args) throws Exception {

UserDao userDao=new UserDao();

//添加用户

User user=new User();

user.setName("张三");

user.setPassword("12345");

userDao.addStudent(user);

……

}

}

实验中的问题及解决方案(不少于100字)

问题1:添加新用户时,从键盘读入String类型的name和password总是只能读入一个,另一个自动赋为空(虽然mysql里声明了not null)

解决方法:String类型是不能改变的,但是找了一下没找到直接的StringBuffer的读入方法,索性将两个信息在输入循环里声明,然后试错发现需要用next读入,nextline可能存在问题导致只能读入一个信息

问题2:用户名查询信息时,查询不到会报Exception in thread "main"错误,

解决方法:匹配用户名输出信息时加“ if(rs.next())”就可以输出,查资料发现:ResultSet是访问数据库返回的数据表,作为结果集合,一开始是处于“第一行”之前的,使用了next( )才将指针指向返回结果表的第一行,另添加了用户名输入错误,查询不到用户的情况

问题3:mysql建表时申明的主键并不会自动重复、为空时就报错

解决方法:需要自己写一个函数去判断是否重复或为空

问题4:update更新里用到Scanner,后在函数里关闭,但在主函数里也关闭了读入。

解决方法:试错发现在函数里把reader.close()删去就对了,询问老师发现,scanner对象共用一个缓冲区,一个程序里出现俩个scanner对象是很危险的,以及读入read的close可以不用关闭,只是会有一个警告。

问题5:为了使作业更完整,我添加了选择操作的功能,然后!一开始我想的是输入数字控制操作,而后觉得万一输入错误,则编译会直接报错而跳出代码。而后想到用string字符串来存储数字来选择,而后遇到了疯狂输出“输入信息错误请重新输入”

解决方法:而后想到了用判断字符串相等,但是我直接写的“==”,but!!!java里应该用equals函数。

String str3=new String(“123”);运行时把123放入堆中,在堆中创建一个对象,

而String str1=“123”把123放入常量池,编译时产生;String str2=“123”引用常量池中的对象,不会重新创建对象。则str1==str2是真,str2==str3是假

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值